私はPF(The Book Of PF、No Starch)についての本を読んだだけですが、答えられていない質問が1つあります。
$ int_ifと$ ext_ifの2つのインターフェイスを使用するゲートウェイマシンmatch
があり、NATが適用されるときに$ int_if:net(たとえば、10.0.0.0 / 24)からのパッケージを$ 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
それは動作しますか?または、10.0.0.23からのパケットのソースIPを、10.0.0.23からのものかどうかのチェックが評価される前に$ ext_ifのアドレスにNAT変換しますか?
この図は、この質問に答えるのには役立たないと思いますが、それでも興味深いものです:[ 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 ($ext_if)
block drop from 10.0.0.23
# or, explicitly,
# block drop in on $int_if from 10.0.0.23
したがって、block
ルールは、パケットが$ int_ifに到着したときにすでに適用されています。
編集:別の可能性はもちろん、NATの前に決定することです:
pass from 10.0.0.0/24
block drop from 10.0.0.23
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
.23からのパケットが到着すると、最初のルールに一致し、次に2番目のルールと3番目の「ルール」に一致します。ただし、2番目のルールは通過/ブロックに関する最後の決定であるため、パケットはブロックされます。正しい?
quick
キーワードは知っていますが、あまり好きではありません-私は常にpfの評価順序を使用するようにしています;)ところで、OpenBSD FAQページで答えを見つけました: "NATは、オプションのnat-toパラメータとして指定されていますアウトバウンドパスルール。多くの場合、パスルールに直接設定されるのではなく、マッチルールが使用されます。マッチルールによってパケットが選択されると、そのルールのパラメータ(nat-toなど)が記憶され、パケットと一致するパスルールに到達したときのパケット。したがって、私のルールセットは問題を引き起こさず、正しく.23をブロックします