ファイアウォール IP Filter 設定

ヒント
IP Filterとは?(IPF)Firewall FreeBSDに標準で準備されている高性能パケットフィルタリング機能です。 NetBSD,OpenBSD,SunOS,HP/UX,Solarisなど多くのOSで利用できるなど様々な特徴があります。 IP Filterは全てのルールを検査して最後にマッチしたルールが適用されます。(quickをつけると即座に適用)
iplモジュールをロード
[root@freebsd ~]# kldload ipl
[root@freebsd ~]# vi /boot/loader.conf
ipl_load="YES" ←追加(起動時に有効にする)
[root@freebsd ~]# kldstat Id Refs Address Size Name 1 3 0xc0400000 b6e0e0 kernel 2 1 0xc4bf8000 37000 ipl.ko ←確認
IP Filter有効化
[root@freebsd ~]# vi /etc/rc.conf
↓下記を追加
ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules"
ipfilter_flags=""
ipmon_enable="YES"
ipmon_flags="-D /var/log/ipflog"
ヒント
ipfilter_enable="YES" # IP Filterを有効にする ipfilter_rules="/etc/ipf.rules" # IP Filterのルール設定ファイルを指定 ipfilter_flags="" # IP Filter実行時オプションを指定 ipmon_enable="YES" # IP Filterのログ機能を有効にする ipmon_flags="-D /var/log/ipflog" # IP Filterログ機能の実行時オプションを指定
最小フィルタルールセットを生成
[root@freebsd ~]# perl /usr/share/examples/ipfilter/mkfilters | grep -v inet6 > /etc/ipf.rules.sample
[root@freebsd ~]# cat /etc/ipf.rules.sample
#
# The following routes should be configured, if not already:
#
# route add 192.168.1.10 localhost 0
#
block in log quick from any to any with ipopts
block in log quick proto tcp from any to any with short
pass out on bge0 all head 150
block out from 127.0.0.0/8 to any group 150
block out from any to 127.0.0.0/8 group 150
block out from any to 192.168.1.10/32 group 150
pass in on bge0 all head 100
block in from 127.0.0.0/8 to any group 100
block in from 192.168.1.10/32 to any group 100
ヒント
mkfilters は、ifconfig の出力を解析することによって ipfilter で使用され る、最小フィルタルールセットを生成する perl スクリプトです。 これを元にフィルタリングルールを設定します。
フィルタリングルールの設定
[root@freebsd ~]# vi /etc/ipf.rules
↓下記を記入
#
# The following routes should be configured, if not already:
#
# route add 192.168.1.10 localhost 0
#

# 不正なIPパケットをすべて拒否してログに記録
block in log quick from any to any with ipopts
block in log quick proto tcp from any to any with short

########################################################
# 外部からの入力(グループ 100)
pass in on bge0 all head 100

# アドレス偽装防止
block in from 127.0.0.0/8 to any group 100
block in from 192.168.1.10/32 to any group 100

# UDP パケットはデフォルトで拒否
block in proto udp all group 100

# 接続が確立されたパケットの通過を許可
pass in quick proto tcp all flags A/A group 100

# IDENT には答えない
block return-rst in quick proto tcp from any to any port = 113 group 100

# FTP
pass in quick proto tcp from any to any port = 20 flags S/SA keep state group 100
pass in quick proto tcp from any to any port = 21 flags S/SA keep state group 100

# SSH
pass in quick proto tcp from any to any port = 22 flags S/SA group 100

# SMTP
pass in quick proto tcp from any to any port = 25 flags S/SA group 100

# DNS (※ポート53を開放する場合はコメントを外す)
#pass in quick proto tcp from any to any port = 53 flags S/SA group 100
#pass in quick proto udp from any to any port = 53 group 100

# HTTP
pass in quick proto tcp from any to any port = 80 flags S/SA group 100

# POP3
pass in quick proto tcp from any to any port = 110 flags S/SA group 100

# IMAP
pass in quick proto tcp from any to any port = 143 flags S/SA group 100

# HTTPS
pass in quick proto tcp from any to any port = 443 flags S/SA group 100

# SMTPS
pass in quick proto tcp from any to any port = 465 flags S/SA group 100

# IMAPS
pass in quick proto tcp from any to any port = 993 flags S/SA group 100

# POP3S
pass in quick proto tcp from any to any port = 995 flags S/SA group 100

# FTP PASV
pass in quick proto tcp from any to any port 4000 >< 4029 flags S/SA keep state group 100

# それ以外の外部からの TCP 接続を拒否し、ログに残す
block in log quick proto tcp all flags S/SA group 100

# 外部の DNS に問い合わせた帰りのパケット
pass in proto udp from any port = 53 to any group 100

# 外部NTPサーバからの帰りは許可
pass in proto udp from any port = 123 to any group 100

# 内部から外部への ping は許可
block in log quick proto icmp all group 100
pass in log quick proto icmp all icmp-type 0 group 100

# RFC2979
pass in proto icmp all icmp-type 3 group 100

########################################################
# 内部からの出力(グループ 150)
pass out on bge0 all head 150
block out from 127.0.0.0/8 to any group 150
block out from any to 127.0.0.0/8 group 150
block out from any to 192.168.1.10/32 group 150

########################################################
# ループバックへのルール(グループ 0)
pass in quick on lo0 all
pass out quick on lo0 all
[root@freebsd ~]# ipf -Fa -Z -f /etc/ipf.rules ←設定を反映 [root@freebsd ~]# ipfstat -io ←ルールを確認
ルールを削除する場合
[root@freebsd ~]# ipf -Fa
Home PageTop