この記事は2005年頃に執筆した文書がもとになっている。
序
使用した OS は FreeBSD5.3-RELEASE。IP Filter のバージョンは 3.4.35。
有効化
カーネルを再構築しても良いが、最近のトレンドはモジュールをカーネルにロードする方法らしいので、手軽な方を選ぶ。kldstat で ipl.ko がなかったら、
# kldload ipl
起動時に組み込むには、
# vi /boot/locader.conf
ipl_load="YES"
# vi /etc/rc.conf
ipfilter_enable="YES" ipfilter_rules="/etc/ipf.rules" ipfilter_flags="" ipmon_enable="YES" ipmon_flags="-D /var/log/ipf_log"
ipmon
を指定する事でログを採取してもらえる。
設定
デフォルトの ipf.rules を作成。grep -v inet6 で IPv6 非使用。
# perl /usr/src/contrib/ipfilter/mkfilters | grep -v inet6 > /etc/ipf.rules
以下は ipf.rules の設定例。ローカルネットワークは 192.168.1.0/24、サーバのアドレスは、192.168.1.10/32、NIC は ed0、httpd・ftpd・sshd・ntpd・IRC 用の bot が走っていて、ルータから syslog を受け取っていると仮定する。
# # The following routes should be configured, if not already: # # block in log quick from any to any with ipopts block in log quick proto tcp from any to any with short # loop back pass out quick on lo0 all pass in quick on lo0 all # out pass out on ed0 all head 150 # IPspoofing block out log quick from any to 192.168.1.10/32 group 150 block out log from 127.0.0.0/8 to any group 150 block out log from any to 127.0.0.0/8 group 150 # in block in log quick on ed0 all head 100 # IPspoofing block in log quick from 10.0.0.0/8 to any group 100 block in log quick from 172.16.0.0/12 to any group 100 block in log quick from 0.0.0.0/8 to any group 100 block in log quick from 169.254.0.0/16 to any group 100 block in log quick from 224.0.0.0/4 to any group 100 block in log quick from 240.0.0.0/4 to any group 100 block in log quick from 192.168.1.10/32 to any group 100 block in log quick from 127.0.0.0/8 to any group 100 block in log quick from any to 127.0.0.0/8 group 100 # www server pass in quick proto tcp from any to 192.168.1.10/32 port = 80 flags S keep state group 100 # www client pass in quick proto tcp from any port = 80 to 192.168.1.10/32 flags A/A group 100 pass in quick proto tcp from any port = 443 to 192.168.1.10/32 flags A/A group 100 # NTP pass in quick proto udp from any to 192.168.1.10/32 port = 123 keep state group 100 # syslog pass in quick proto udp from 192.168.0.1/32 to 192.168.1.10/32 port = 514 keep state group 100 # DNS return pass in quick proto udp from 192.168.0.1/32 port = 53 to 192.168.1.10/32 group 100 # FTP pass in quick proto tcp from 192.168.1.0/24 to 192.168.1.10/32 port = 20 flags A/A group 100 pass in quick proto tcp from 192.168.1.0/24 to 192.168.1.10/32 port = 21 flags S keep state group 100 pass in quick proto tcp from any port = 20 to 192.168.1.10/32 flags S group 100 pass in quick proto tcp from any port = 21 to 192.168.1.10/32 flags S group 100 # SSH pass in quick proto tcp from 192.168.1.0/24 to 192.168.1.10/32 port = 22 flags S/SA keep state group 100 # IRC pass in quick proto tcp from any port = 6667 to 192.168.1.10/32 flags A/A group 100 # CVSup pass in quick proto tcp from any port = 5999 to 192.168.1.10/32 flags A/A group 100
ログをローテートする。
# vi /etc/newsyslog.conf
/var/log/ipf_log 640 10 * #M1D0 Z
起動
ルールを再読み込み。
# ipf -FA -Z -f /etc/ipf.rules
out と in の設定を確認するにはそれぞれ、
# ipfstat -o # ipfstat -i