IP Firewall


必要があって、IP フィルタを使うことがあったので、設定方法など。

FreeBSD では /sbin/ipfw というコマンドを使用して、パケットのフィル タリングを行います。このコマンドの使い方は FreeBSD のバージョンによっ て結構違ったりするらしいので、ご注意を。ちなみに僕の環境は FreeBSD 2.2.7-RELEASE です。

ipfw を使うためには kernel を作り直さなければいけません。kernel の 再構築については、以前書いた「kernel の再構築 」を参照してください。
で、以下のオプションを指定して、kernel の再構築をします。

options         IPFIREWALL
options         IPFIREWALL_VERBOSE

この記述を /usr/src/sys/pc98/conf/ 配下のコンフィギュレーションファイ ルに追加してやります。サンプルは /usr/src/sys/i386/conf/LINT にありま す。kernel のコンフィギュレーションファイルが用意できたら、kernel の再 構築をします。

で、リブートする前に、/etc/rc.conf の設定を変更してやる方が良いでしょ う。/etc/rc.conf で

firewall_enable="YES"
firewall_type="open"
firewall_quiet="NO"

を設定します。firewall_enable はデフォルトで NO になっています。こ れを YES に変更することで、IP フィルタが有効になります。フィルタの設定 は /etc/rc.firewall を読み込みます。ここに firewall_type が定義してあ り、デフォルトでは open、client、simple、UNKNOWN、filename が設定され ていますので、/etc/rc.conf の firewall_type には open を指定してやりま す。open の場合は、フィルタは全てのパケットを通す設定になっていますの で、実質フィルタがないのと同じことになります。その後 ipfw コマンドを使っ てフィルタを追加してやれば良いわけです。

準備ができたら、リブートします。これで ipfw コマンドが使える状態に なっていますので、ipfw -a list を実行してみます。現在のフィルタ状況が 表示されます。

# ipfw -a list
00100         44       3408 allow ip from any to any via lo0
00200          0          0 deny ip from any to 127.0.0.0/8
65000        133      24059 allow ip from any to any
65535          0          0 deny ip from any to any

なにも設定していないとこんな感じ。第一フィールドがそのフィルタに与 えられた番号です。番号が小さい方から有効になります。一番最後の 65535 で全てのパケットを拒否する設定がされていますが、その前の 65000 で全て のパケットを受け入れる設定がされていますので、問題なく通信ができるわけ です。
フィルタを追加したい場合は、この 65000 番より前の番号を指定してフィル タを作成します。例えば、

# ipfw add 00005 deny tcp from foo.bar.com to myhost.bar.com 80

とすれば、この設定が 00005 番として登録されます。内容は見ればわかる と思いますが、foo.bar.com から myhost.bar.com への 80 番ポートへの TCP でのアクセスを拒否する、という意味です。80 番ポートは、ご存知の通り、 httpd ですね。

この設定を無効にしたければ、

# ipfw delete 00005

という風に、番号を指定して delete すれば良いです。

いちいちコマンドを叩くのが面倒という場合は /etc/rc.firewall に記述 してやれば良いでしょう。/etc/rc.firewall で firewall_type が open の場 合、

ipfw add 65000 pass all from any to any

が実行されるようになっています。これは /etc/rc.firewall を読めばす ぐわかると思います( sh スクリプトです)。これと同じ場所に、他のフィルタ の設定を追加して記述してやれば、起動時に実行されますので、そのフィルタ が常に有効になります。

僕の場合、ファイアウォールの内側にいるので、あまり使わないのですが、 外部から直接 IP リーチャブルな環境の方には ipfw は必須ですね。


[FreeBSD] | [TetsuoSTREAMS]