我刚刚读了一本关于 PF 的书(The Book Of PF, No Starch),但有一个问题没有得到解答。
如果我有一台使用两个接口 $int_if 和 $ext_if 的网关机器,并且我将来自 $int_if:net(假设为 10.0.0.0/24)的包使用match
NAT到 $ext_if ,当应用 NAT 时? 在过滤规则之前还是之后?
例子:
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
pass out on $ext_if from 10.0.0.0/24
block drop out on $ext_if from 10.0.0.23
Run Code Online (Sandbox Code Playgroud)
那样有用吗?或者在检查它是否来自 10.0.0.23 之前获取来自 10.0.0.23 NAT 的数据包的源 IP 到 $ext_if 的地址被评估?
我认为这个图对回答这个问题没有帮助,但它仍然很有趣:[ http://www.benzedrine.cx/pf_flow.png ]
如果您阅读 PF NAT FAQ [ http://www.openbsd.org/faq/pf/nat.html ],尤其是“配置 NAT”部分,您会看到以下句子:
当一个数据包被匹配规则选中时,该规则中的参数(例如 nat-to)会被记住,并在达到与该数据包匹配的传递规则时应用于该数据包。这允许通过单个匹配规则处理整类数据包,然后可以使用阻止和通过规则做出是否允许流量的具体决定。
我认为这听起来好像不像我在上面的段落中所说的那样,因此源 IP 会被“记住”,直到决定要对数据包执行的操作。如果做出决定,则应用 NATting。
你怎么认为?
PS:这是一个非常理论化的问题。如果你有点务实,你会这样做:
match out on $ext_if from 10.0.0.0/24 nat-to …
Run Code Online (Sandbox Code Playgroud)