[BSD] PF nat és filter

Péchy Gáspár gpechy at ggg.hu
2012. Feb. 13., H, 17:22:29 CET


Szervusztok,
egy kis segítségre lenne szükségem tisztázandó néhány ellentmondást.
A PF műveletek végrehajtási sorrendjére több helyen is az alábbinak megfelelő infót kaptam:

'Filtering is performed before Network Address Translation (NAT) for transmitted datagrams, and 
after NAT for received datagrams. This allows you to filter on the "Actual LAN Address" as opposed 
to the "Apparent Gateway Address".'

Ez érthetőnek, s logikusnak tűnik, de ellentmodani látszik tapasztalatomnak:
A környezet:
Egy kábelen bejövő több IP, ami FreeBSD firewallra kapcsolódik, ami egy másik NIC-en at switchen 
keresztül szolgálja ki a szervereket.

Internet <-> em0(a.b.c.{xyz}) <-> Freebsd-Firewall <-> em1 <-> switch(10.0.0.{xyz})

a pf conf releváns része az alábbi:
==============================================
...
ext_ip1 = "a.b.c.x"
int_ip1 = "10.0.0.x"
ext_ip2 = "a.b.c.y"
int_ip2 = "10.0.0.y"
...
binat on em0 inet from $int_ip1 to any -> $ext_ip1
binat on em0 inet from $int_ip2 to any -> $ext_ip2
...
block all
....
================================================
Namármost:
pass out quick on em0 inet proto tcp from $_ext_ip2 to any flags S/SA keep state queue extq_a
kiengedi a forgalmat, míg a
pass out quick on em0 inet proto tcp from $_int_ip2 to any flags S/SA keep state queue extq_b
nem

Ergó, nem a belső, hanem a külső IP-n kell szűrnöm, ami ellentmondani látszik a papírformának.

Előre is köszönettel a felhomályosításért
Gazsi





További információk a(z) BSD levelezőlistáról