Zwykle używa się jednocześnie Translacji Adresów Sieciowych (NAT, zajrzyj do NAT HOWTO) i filtrowania pakietów. Dobra wiadomość jest taka że łączy się je bardzo dobrze.
Projektujesz swój filtr pakietów kompletnie ignorując NAT. Adresy źródłowe i przeznaczenia które będzie sprawdzał filtr pakietów będą 'prawdziwymi' adresami. Na przykład, jeśli prowadzisz DNAT i wysyłasz połączenia do 1.2.3.4 na port 80 przez 10.1.1.1 port 8080, filtr pakietów zobaczy pakiety podróżujące do 10.1.1.1 na port 8080 (prawdziwy adres przeznaczenia), a nie 1.2.3.4 na port 80. Podobnie, możesz zignorować masquerading (maskaradę): z punktu widzenia filtra pakietów pakiety będą nadchodziły z prawdziwych wewnętrznych adresów IP (powiedzmy 10.1.1.1) a odpowiedzi wracały gdzie powinny.
Możesz używać testu stanu ('state') bez dostarczania dodatkowej pracy filtrowi pakietów, ponieważ NAT wymaga i tak śledzenia połączeń (ang. connection tracking). By rozszerzyć prosty przykład maskarady z NAT HOWTO o zabronienie kreowaniu nowych połączeń z interfejsu ppp0, zrobiłbyś tak:
# 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 -m state --state NEW,INVALID -j DROP
# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward