Also, it is good to control the Internet addressable devices on your network
by putting them behind a NAT device. That way you have less devices to
concern yourself about that are directly addressable when they most likely
need not be. You can argue that you can do the same with a firewall and a
default deny policy but it's a hell of a lot easier to sneak packets past a
firewall when you have a directly addressable target behind it than when
it's all anonymous because it's NATed and the real boxes are on RFC1918.
This is patently untrue. Using a firewall such as CheckPoint, which
integrates NAT into the object definition, makes it just as likely to
accidentally allow traffic to a NAT'd address as it does a real address.
Either you are allowing access to the _object_ or you are not.
If you start messing with the NAT table directly then you open up another
can of worms- namely additional complexity and a greater opportunity for
mistakes.
So really, those who do not think there is a security gain from NATing don't
see the big picture.
We see the big picture- we see applications with a ton of extra code to
handle NAT- code that may contain mistakes and end up being compromised.
We see firewalls that need more code to handle NAT'd applications- code
that contains mistakes and can be compromised.
We see firewall rule sets that are more complicated and make less than if
NAT were not involved.
We see security/performance problems that are harder to troubleshoot
because we have to dig through a NAT table to figure out which connection
is which.
Keep it simple. NAT is a terrible terrible hack- and it's sad that it's
become so accepted in the maintsream.
-Don