Es ist weit verbreitet, dass man Network Adress Translation (siehe das NAT-HOWTO) und Paketfilter machen will. Die guten Neuigkeiten sind, dass man sie extrem gut miteinander kombinieren kann.
Du entwirfst Deine Paketfilter und kannst das NAT, das Du machst, dabei komplett ignorieren. Die Quellen und Ziele, die die Paketfilter sehen, sind die 'wirklichen' Quellen und Ziele. Wenn Du z.B. DNAT machst, um irgendeine Verbindung an 1.2.3.4 Port 80 ueber 10.1.1.1 Port 8080 zu schicken, sieht der Paketfilter Pakete an 10.1.1.1 Port 8080 (das wirkliche Ziel), nicht an 1.2.3.4 Port 80. Aehnlich kannst Du Masquerading ignorieren: Pakete scheinen von ihrer wirklichen internen IP-Adresse zu kommen (sagen wir 10.1.1.1), und Antworten werden scheinbar auch dorthin zurueckgehen.
Du kannst die Treffer-Erweiterungen fuer Zustaende verwenden, ohne die Paket- filter extra arbeiten zu lassen, da NAT sowieso 'connection tracking' erfordert. Um dem simplen Masquerading Beispiel im NAT-HOWTO zu verbieten, neue ankommende Verbindungen an der ppp0-Schnittstelle anzunehmen, wuerde folgendes reichen:
# Maskiere ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# Verbiete NEW und INVALID ankommende oder weitergeleitete
# Pakete von 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
# IP-Forwarding aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward