[OpenBSD]

[前に戻る: はじめに] [目次] [次に進む: テーブル]

PF: リストとマクロ


目次


リスト

リストは、ルールの中に同様の判断基準を複数記述することを許しています。 たとえば、複数のプロトコル、ポート番号、アドレスなどです。 ですので、ブロックする必要のある各 IP アドレス用にそれぞれ フィルタルールを書く代わりに、リスト中に複数の IP アドレスを 指定することで、ひとつのルールを書くことができます。リストは、 その要素を { } の中に記述することで定義されます。

pfctl(8) がルールセットをロード中にリストを見つけると、 これをひとつひとつがリストのそれぞれの要素に対応する、 複数のルールに展開します。たとえば、

block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any

は次のように展開されます。

block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any

ルール中に複数のリストを指定することが可能で、 また、以下の例のようにフィルタルールだけに限定されません。

rdr on fxp0 proto tcp from any to any port { 22 80 } -> \
   192.168.0.6
block out on fxp0 proto { tcp udp } from { 192.168.0.1, \
   10.5.32.6 } to any port { ssh telnet }

リストの要素の間のカンマはオプショナルであることに注意してください。

マクロ

マクロは、IP アドレス、ポート番号、インターフェイス名などを保持する、 ユーザ定義の変数です。マクロは PF のルール集合の複雑さを軽減し、 ルールセットをより簡単にメンテナンスすることができるようにしてくれるものです。

マクロ名は英文字から始まり、英数字とアンダースコアを含み得るものです。 マクロ名には passoutqueue のような 予約語を使用することはできません。

ext_if = "fxp0"

block in on $ext_if from any to any

上記は、ext_if という名前のマクロを生成します。マクロがその生成後に 参照されると、その名前の先頭に $ 文字が付与されます。

マクロは以下のようなリストに展開することもできます。

friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"

マクロは再帰的に定義することができます。クウォートで囲まれたマクロは 展開されませんので、次のようなシンタクスを使用する必要があります。

host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"

このマクロ $all_hosts 場合、192.168.1.1、192.168.1.2 に展開されます。

[前に戻る: はじめに] [目次] [次に進む: テーブル]


[back] www@openbsd.org
Originally [OpenBSD: macros.html,v 1.9 ]
$Translation: macros.html,v 1.7 2004/01/03 05:24:39 toshi Exp $
$OpenBSD: macros.html,v 1.8 2004/01/04 22:47:55 horacio Exp $