ファイアウォールの設置 - IPFW

今思えばずっとファイアウォールを設定していませんでした。
前段にルーターを構えてはいますが、簡易でもファイアウォールを設置した方がセキュリティとしては良いと思うのでそのメモです。
候補は IPFW と IPFilter がありますが、今回は IPFW を試してみます。


FreeBSD 6.0R には IPFW と IPFilter どちらもモジュールとして組み込まれているので、kldload ipfw とコマンドを打てばファイアウォールを使用する事が出来ます。
しかし、いきなり kldload ipfw なんてコマンドを打つと SSH で接続している場合、切断されてしまいます。
リモートで作業している方はまずルールの設定をテストしてから rc.conf なりに使用する記述をしてください。


まずはネットワーク構成の見直しです。
今回は下記の様な形で設定してみます。

機器名 IP アドレス
ネットワーク 192.168.1.0/24
ルーター 192.168.1.1
サーバ 192.168.1.10


次に ipfw のルールセットを記述したファイルを作成します。

$ vi /usr/local/etc/ipfw.rule


また、上記のネットワーク構成で作成した ipfw.rule を提示しておきますが、これをこのまま使用するのはお勧め出来ません。
各自セキュリティポリシーが違いますし、出来れば自分で考えて設定した方が良いと思います。
今回私が作成したファイアウォールは動作テストの意味合いが強いので・・・。

# Local Machine IP
ip="192.168.1.10"

# Local Network
net="192.168.1.0/24"

# Set ${fwcmd}
fwcmd="/sbin/ipfw -q"

# Drop Rules
${fwcmd} -f flush

# Local Netwok Allow
${fwcmd} add pass all from ${ip} to ${net}
${fwcmd} add pass all from ${net} to ${ip}

# Drop to Private IP Address and Multi Cast
${fwcmd} add deny all from 10.0.0.0/8 to any
${fwcmd} add deny all from 172.16.0.0/12 to any
${fwcmd} add deny all from 192.168.0.0/16 to any
${fwcmd} add deny all from 0.0.0.0/8 to any
${fwcmd} add deny all from 169.254.0.0/16 to any
${fwcmd} add deny all from 192.0.2.0/24 to any
${fwcmd} add deny all from 224.0.0.0/4 to any
${fwcmd} add deny all from 240.0.0.0/4 to any

# Loopback
${fwcmd} add pass all from any to any via lo0

# Allow TCP Connection
${fwcmd} add pass tcp from any to any established

# HTTP
${fwcmd} add pass tcp from any to ${ip} 80 setup

# HTTPS
${fwcmd} add pass tcp from any to ${ip} 443 setup

# SMTP
${fwcmd} add pass tcp from any to ${ip} 25 setup

# POP3
${fwcmd} add pass tcp from any to ${ip} 110 setup

# IMAP
${fwcmd} add pass tcp from any to ${ip} 143 setup

# FTP
${fwcmd} add pass tcp from any to ${ip} 20 setup

# FTP
${fwcmd} add pass tcp from any to ${ip} 21 setup

# SSH
${fwcmd} add pass tcp from any to ${ip} 22 setup

# Allow Start TCP Connection
${fwcmd} add pass tcp from ${ip} to any setup

# Drop Other TCP Connection
${fwcmd} add deny log tcp from any to any setup

# DNS
${fwcmd} add pass udp from any 53 to ${ip}
${fwcmd} add pass udp from ${ip} to any 53

# NTP
${fwcmd} add pass udp from any 123 to ${ip}
${fwcmd} add pass udp from ${ip} to any 123

# RFC2979
${fwcmd} add pass icmp from any to ${ip} icmptypes 3

# Drop Other Connection
${fwcmd} add deny log all from any to any


こんな感じでテストしてみました。
参考元のサイト様が少し古い内容 ( 2001 年 1 月 23 日のもの ) だったので少しコマンドが違ったりスマートな実装方法が他にもあるかもしれません。


参考元リンク
http://homepage2.nifty.com/hobbit/html/bsd.html#fw
Firewall/ipfw4c - Hiromi@tac
http://www.alib.jp/FreeBSD/ipfw.html
30.4. IPFW


TODO : 英語のハンドブックをなんとか読み解いて ipfw の詳細を調べる。
TODO2 : ネットワークに関する基本的な知識を収集する。