[block|pass] [in|out] [quick,log,on IF] [proto {tcp/udp|tcp|udp|icmp}] [IP-set]
|
まず、パケットは全てのルールを検査し、最後にマッチしたルールが適用されるように なっています。パケットを落したい場合であっても即座に落される訳ではなく、最後 まで検査して、他にマッチしたルールがない場合に落されることになるのです(quick をつけると例外的に即座に実行されます)。パケットを拒否する際には、block を 用いますが、あくまでもすぐに落される訳ではない点に注意して下さい。逆に、 パケットを通したい場合には、pass を用いますが、この場合も同様です。
次に、入ってくるパケットに対して適用するのか、出て行くパケットに対して適用する のかを区別するために、in と out を用います。
特別に、あるインターフェース上で検査したい場合には on IF を付けます。
ここで、IF は、ifconfig で表示されるインターフェース名で、例えばインターフェース
名が dc0 の場合は、on dc0 のように使います。一方、このルールに
マッチした場合についてログを取りたい場合には、log を付けます。また、
このルールを即座に適用し、以降のルールを検査したくない場合には quick を使い
ます(実は例外が一つだけあり、後述sる head を用いるとこの場合に当てはまり
ません)。一般に、IPFilter のルールは全てを検査するために冗長になりがちです。
これを回避するために、何も考えずにこれは通したいような場合には quick を使う
訳です。
それぞれのパケットのプロトコルを指定したい場合には、proto 識別子の後に プロトコルを指定します。利用できるのは以下の4つです。
| tcp/udp | TCP 及び UDPプロトコル |
| tcp | TCP プロトコルのみ |
| udp | UDP プロトコルのみ |
| icmp | icmp プロトコルのみ |
当然、全てのプロトコルについて指定したい場合には、proto 識別は必要ありません。
最後に、IP-set は基本的には、どこからどこに向かうのかという事を指定します。 例えば、202.11.97.17 から発信されている全ての送信先へのパケットを指定したい 場合には、
from 202.11.97.17 to any
|
from 10.0.0.0/8 to 192.168.0.0/16
|
from 10.0.0.0 mask 255.0.0.0 to 192.168.0.0 mask 255.255.0.0
|
from any to any
|
all を使うことも出来ます。
一方、あるWWWサーバへのアクセスを指定したいような場合には、ポートまで 含めて書く事もできます。
from any to 202.11.97.19 port = 80
|
>< を使う事が出来ます。
例えば、次の例は、Port 6000 から 6063 までの範囲を指定しています。
from any to 202.11.97.19 port 5999 >< 6064
|
> や、逆に小さい場合の指定
に <、あるポートに等しくない場合には != 、以上や以下を表す
ための >= や <= なども用意されています。
ルールには他にも更に様々なオプションがあり、中には重要なものもありますが、 とりあえずは以上のような書き方をすることを知っていれば、以下の具体例を 理解できるでしょうし、必要なものについてはその時に学習することにします。
より詳しく学ぶには、
http://www.obfuscation.org/ipf/ipf-howto.txtを参照して下さい。