[前に戻る: アドレスプールと負荷分散 (Load Balancing)] [目次] [次に進む: ログの取得]
pass in on $int_if all tag INTERNAL_NET keep state
INTERNAL_NET タグは、上記のルールにマッチするすべてのパケットに 追加されます。keep state の使用には注意が必要です。keep state (あるいは modulate state/synproxy state) は、パケットにタグを 付与する pass ルール中で使用すべきです。
タグ付けには以下のようなルールがあります。
例として以下のルールセットを見てみましょう。
(1) pass in on $int_if tag INT_NET keep state
(2) pass in quick on $int_if proto tcp to port 80 tag \
INT_NET_HTTP keep state
(3) pass in quick on $int_if from 192.168.1.5 keep state
フィルタルールでタグを適用するだけでなく、nat、rdr および binat 変換ルールの場合も tag キーワードを使用することにより パケットにタグを適用することもできます。
pass out on $ext_if tagged INT_NET keep state
$ext_if から送出されるパケットは、上記のルールにマッチするよう、 INT_NET タグでタグ付けされていなければなりません。以下のように ! 演算子を使用することによって、逆のマッチを行うこともできます。
pass out on $ext_if tagged ! WIFI_NET keep state
ファイアウォールを通過するすべてのトラフィックをポリシーがどのようにカバーしているのか ということに注目しましょう。 括弧内のアイテムは、そのポリシーのアイテム用に使用される タグを示しています。
まず、パケットをポリシーに分類するため、フィルタおよび変換ルールを 記述する必要があります。
rdr on $ext_if proto tcp from <spamd> to port smtp \
tag SPAMD -> 127.0.0.1 port 8025
block all
pass in on $int_if from $int_net tag LAN_INET keep state
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state
次にポリシーを定義したルールを設定します。
pass in quick on $ext_if tagged SPAMD keep state
pass out quick on $ext_if tagged LAN_INET keep state
pass out quick on $dmz_if tagged LAN_DMZ keep state
pass out quick on $dmz_if tagged INET_DMZ keep state
これですべてのルールセットが設定され、変更すべき点は せいぜい分類ルールの調整くらいとなります。 たとえば、POP3/SMTP サーバが DMZ に追加された場合、POP3 および SMTP のトラフィックに対する分類ルールを以下の例のように追加する必要が あるでしょう。
mail_server = "192.168.0.10"
...
pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \
tag INET_DMZ keep state
これで電子メールのトラフィックが、ポリシーエントリ INET_DMZ の一部として通過が許可されるようになります。
完全なルールセットは以下のとおりです。
# マクロ int_if = "dc0" dmz_if = "dc1" ext_if = "ep0" int_net = "10.0.0.0/24" dmz_net = "192.168.0.0/24" www_server = "192.168.0.5" mail_server = "192.168.0.10" table <spamd> persist file "/etc/spammers" # 分類 -- 定義されたファイアウォールポリシーに基づいて # パケットを分類します。 rdr on $ext_if proto tcp from <spamd> to port smtp \ tag SPAMD -> 127.0.0.1 port 8025 block all pass in on $int_if from $int_net tag LAN_INET keep state pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \ tag INET_DMZ keep state # ポリシーの適用 -- 定義されたファイアウォールポリシーに基づいて通過を許可/ブロックします。 pass in quick on $ext_if tagged SPAMD keep state pass out quick on $ext_if tagged LAN_INET keep state pass out quick on $dmz_if tagged LAN_DMZ keep state pass out quick on $dmz_if tagged INET_DMZ keep state |
# brconfig bridge0 rule pass in on fxp0 src 0:de:ad:be:ef:0 \
tag USER1
そして、pf.conf 中に以下の行を追加します。
pass in on fxp0 tagged USER1
[前に戻る: アドレスプールと負荷分散 (Load Balancing)] [目次] [次に進む: ログの取得]