私はPF(The Book Of PF、No Starch)に関する本を読んでいましたが、1つの質問に答えがありませんでした。
match
2つのインターフェイス$ 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版はありますか?)、トーナメントルールではこれを明確に明らかにしていないようです。
答え2
私が間違っている場合は訂正してください。発信するすべてのパケットを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
クイックキーワード
前述のように、各パケットはフィルタルールセットに対して上から下に評価されます。パケットはデフォルトで通過したとマークされており、どのルールにも変更でき、フィルタリングルールの終了前に複数回前後に変更できます。最後の一致ルールは「勝利」です。 1つの例外があります。フィルタルールのクイックオプションは、追加のルール処理をキャンセルし、指定された操作を実行する効果があります。いくつかの例を見てみましょう。
無効:
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
これらの規則はわずかに異なって評価されます。ブロッキングラインが一致すると、高速オプションによりパケットがブロックされ、残りのルールセットは無視されます。