[前に戻る: スクラブ (scrub: パケットの正規化)] [目次] [次に進む: パケットキューイングと優先順位付け]
サブルールセットはアンカーを使用して主ルールセットに連結されます。 anchor ルールには以下のように 4 種類あります。
たとえば、以下のようになります。
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor goodguys
このルールセット一式は、fxp0 上の着信ならびに送出トラフィックの両方のための デフォルトで拒絶するポリシーとなっています。トラフィックは状態を保存してわたされ、 goodguys という名前のアンカールールが生成されます。 以下のふたつの方法でアンカーにルールを関連付けられます。
load ルールは、テキストファイルからルールを読み込むことにより、 指定されたアンカーと名前付きルールセットとを関連付けるため、pfctl を呼び出すことになります。たとえば、以下のようになります。
load anchor goodguys:ssh from "/etc/anchor-goodguys-ssh"
主ルールセットがロードされた際に、ファイル /etc/anchor-goodguys-ssh にリストされたルールは、goodguys アンカーに連結された 名前付きルールセット ssh にロードされます。
pfctl を使用してルールをアンカーに追加するためには、 以下のようなコマンドを使用することができます。
# echo "pass in proto tcp from 192.0.2.3 to any port 22" \
| pfctl -a goodguys:ssh -f -
これは、goodguys アンカーに連結された ssh という名前のルールセットに pass ルールを追加します。 PF は主ルールセット中の anchor goodguys に達したときに、 このルール (および追加された他のすべてのフィルタルール) を評価します。
ルールはテキストファイルに保存し、ここからロードすることも可能です。
# cat >> /etc/anchor-goodguys-www
pass in proto tcp from 192.0.2.3 to any port 80
pass in proto tcp from 192.0.2.4 to any port { 80 443 }
# pfctl -a goodguys:www -f /etc/anchor-goodguys-www
これは /etc/anchor-goodguys-www ファイルから goodguys アンカー中の www という名前のルールセットにルールを読み込みます。
フィルタならびに変換ルールは、主ルールセットとしてロードされたルールと同様のシンタクス およびオプションを使用した名前付きルールセットとして読み込むことができます。 しかしながら、それは使用されているマクロも 名前付きルールセットの中に定義されていなければなりません。 主ルールセットの中で定義されているマクロは、 名前付きルールセットからは見えません。
それぞれの名前付きルールセットは、主ルールセットと同様、他のルールセットとは 独立に存在します。ルールのフラッシュのような、ひとつのルールセットの処理が終了が、 他のすべてのルールセットに影響を及ぼすことはありません。さらに、主ルールセットからの アンカーポイントを除去しても、そのアンカーに付随する、いかなる名前付きルールセットも 破壊されることはありません。名前付きルールセットは、 pfctl(8) を使用してすべてのルールをフラッシュしない限り、 破壊されることはありません。名前付きルールセットを持たないアンカーポイントが これに付随する場合、これもまた破壊されてしまいます。
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor ssh in on $ext_if proto tcp from any to any port 22
アンカー ssh 中のルールは、fxp0 に着信したポート 22 に向かう TCP パケットのために評価されます。そして、ルールが以下のように anchor に追加されます。
# echo "pass in from 192.0.2.10 to any" | pfctl -a ssh:allowed -f -
この場合、フィルタルールには、インターフェイス、プロトコルやポートが 指定されていないにも関わらず、ホスト 192.0.2.10 だけが anchor ルールの記述に従って、SSH を使用して接続することを許可されています。
ssh アンカーに連結された allowed ルールセット中のルールをすべてリストするには、以下のようにします。
# pfctl -a ssh:allowed -s rules
上記と同じルールセットからすべてのフィルタルールをフラッシュするには、以下のようにします。
# pfctl -a ssh:allowed -F rules
ルールセット名が省略されている場合には、アンカー中のすべてのルールに対して 動作が適用されます。
コマンドのすべてのリストについては、 pfctl(8) を参照してください。
[前に戻る: スクラブ (scrub: パケットの正規化)] [目次] [次に進む: パケットキューイングと優先順位付け]