DragonFly BSDでipfwとdivert socketを使えるようにする

1. カーネルを /usr 以下に展開する.ブートCDイメージの,/usr 以下にある,src-sys.tgzをコピーして展開するのが一番楽.

# cd /usr
# tar xzfv src-sys.tgz
# cd src


2. カーネルオプションに IPFIREWALL と IPDIVERT をつけ加えて.コンパイル.コンフィグはGENERICをコピーして,適当な名前にしておく(今回は GENERIC_IPFW とした).

# cd /usr/src/sys/config
# cp GENERIC GENERIC_IPFW
# vi GENERIC_IPFW

GENERIC_IPFW

options IPFIREWALL
options IPDIVERT

を追加.

お好みで,

options IPFIREWALL_VERBOSE           # ファイアウォールのログを有効にする
options IPFIREWALL_VERBOSE_LIMIT=100 # ログに上限を設ける
options IPFIREWALL_DEFAULT_TO_ACCEPT # デフォルトをallow ip from any to anyにする

も追加.デフォルトでは deny ip from any to any となり,全てのパケットがフィルタされるので,IPFIREWALL_DEFAULT_TO_ACCEPT を付けておいた方がいいかも.


3. コンパイル

# cd /usr/src
# make nativekernel KERNCONF=GENERIC_IPFW


4. インストール

# make installkernel KERNCONF=GENERIC_IPFW


5. 再起動

# reboot


6. 先に述べたようにデフォルトでは,deny ip from any to any なので,全てのパケットを通すように変更する.

# vi /etc/rc.conf

として,以下の行を追加

firewall_enable="YES"
firewall_type="open"


7. 再起動して,ipfwの状態を見てみる.

# reboot
...
# ipfw show
00100    12   1008 allow ip from any to any via lo0
00200     0      0 deny ip from any to 127.0.0.0/8
00300     0      0 deny ip from 127.0.0.0/8 to any
65000 14919 834003 allow ip from any to any
65535     6    641 deny ip from any to any