OpenBSDを使用したPFでのNATおよびソースIPフィルタリング> = 4.7


8

私は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番目のルールは通過/ブロックに関する最後の決定であるため、パケットはブロックされます。正しい?

回答:


1

はい、それはあなたが尋ねたものは非常に理論的ですが、非常に興味深い質問です。

matchそれが最後のマッチングルールに作用している時にルールが適用されます。 matchルールはあなたが言ったように「粘着性」です。それらの主な目的は、NATルールのようなものを1度設定できるようにすることであり、発信トラフィックに関する一連のルールの最後に納豆を置く必要がないことです。

あなたの例では、パケットはドロップされます。コードを確認するか、Henning BrauerにドロップケースでNATチェックを完全にスキップするかどうかを確認するように依頼する必要がありますが、NAT アウトされません。

あなたのルール PFブック(第2版を入手しましたか?)でカバーされていると思いますが、マッチルールで明示されているとは思いません。


0

私が間違っていた場合は修正してください。10.0.0.0/ 24からのすべての発信パケットを渡したいが、10.0.0.23をブロックしたいですか?その場合は、ルールを次のように変更します。

match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
block drop out quick on $ext_if from 10.0.0.23
pass out on $ext_if from 10.0.0.0/24

quickファイアウォールがフィルタリングを継続しないようにするために使用します(break一部のプログラミング言語と同様)。

http://www.openbsd.org/faq/pf/filter.html#quick

簡単なキーワード

前述のように、各パケットはフィルタールールセットに対して上から下に評価されます。デフォルトでは、パケットは通過するようにマークされており、どのルールでも変更でき、フィルタールールの終了前に何度か前後に変更できます。最後に一致したルールが「勝ち」ます。これには例外があります。フィルタリングルールのクイックオプションには、それ以降のルール処理をキャンセルする効果があり、指定されたアクションが実行されます。いくつかの例を見てみましょう:

違う:

block in on fxp0 proto tcp to port ssh
pass  in all 

この場合、ブロック行は評価されますが、その後にすべてを通過する行が続くため、効果はありません。

より良い:

block in quick on fxp0 proto tcp to port ssh
pass  in all 

これらのルールの評価は少し異なります。クイックオプションにより、ブロック行が一致した場合、パケットはブロックされ、残りのルールセットは無視されます。


quickキーワードは知っていますが、あまり好きではありません-私は常にpfの評価順序を使用するようにしています;)ところで、OpenBSD FAQページで答えを見つけました: "NATは、オプションのnat-toパラメータとして指定されていますアウトバウンドパスルール。多くの場合、パスルールに直接設定されるのではなく、マッチルールが使用されます。マッチルールによってパケットが選択されると、そのルールのパラメータ(nat-toなど)が記憶され、パケットと一致するパスルールに到達したときのパケット。したがって、私のルールセットは問題を引き起こさず、正しく.23をブロックします
dermesser 2013

(2行目の一致ルールでは、すべてのルールを通過した後にパケットが通過し、NATが適用されます)
dermesser
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.