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

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

私はPF(The Book Of PF、No Starch)に関する本を読んでいましたが、1つの質問に答えがありませんでした。

match2つのインターフェイス$ int_ifと$ ext_ifを使用するゲートウェイコンピュータがあり、NATが適用されたときにNATを使用して$ int_if:net(例:10.0.0.0/24)から$ ext_ifにパケットを変換するとどうなりますか?フィルタリングルールの前または後?

例:

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から来たことを確認する前に、10.0.0.23 NATから$ ext_ifアドレスにパケットの送信元IPを取得しますか?

この図はこの質問に対する回答には役に立たないようですが、それでも興味深いです。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-toを置かなくても、NATルールなどのエントリを一度だけ設定できることです。

あなたの例では、パケットは破棄されます。コードを表示するか、Henning BrauerにドロップケースからNATチェックを完全にスキップするかを確認するように依頼する必要がありますが、そうです。いいえNAT処理を行います。

私の考えでは、あなたのルールはいPF本でこれを扱っていますが(第2版はありますか?)、トーナメントルールではこれを明確に明らかにしていないようです。

おすすめ記事