要做 Network Address Translation (请参阅 NAT HOWTO) 以及封包过滤,已是很平常之事了。好消息是,将它们混合起来使用实是完全没问题的。
当你设计封包过滤的时候,可以完全不用理会您要做怎样的 NAT 。於封包过滤中看到的来源与目的地,只会是 `真正的' 来源和目的地。举例来说,如果您做 NAT ,要将所有连到 1.2.3.4 port 80 的连线送到 10.1.1.1 port 8080 去,这样封包过滤会看那些送到 10.1.1.1 port 8080 (真正的目的地),而不是 1.2.3.4 port 80。类似的,您也可以忽略封包伪装:封包会看起来是来自真正的内部 IP 地址(比方 10.1.1.1),回应也看起来送回那里。
您可以运用 `state' 比对延伸(match extension)而无需让封包过滤做额外的工作,因为无论如何, NAT 都会要求连线追踪。为了增强在 NAT HOWTO 里面那个简单的封包伪装例子,去挡掉来自 ppp0 界面的任何新连接,您可以这样做:
# Masquerade out ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# Disallow NEW and INVALID incoming or forwarded packets from ppp0.
iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP
iptables -A FORWARD -i ppp0 0 -m state --state NEW,INVALID -j DROP
# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward