文書の過去の版を表示しています。
FreeBSD 11のipfwでパケットフィルタリング
WIP
試した環境
- FreeBSD 11.2-RELEASE-p7
- ipfw自体は相当昔から搭載されているので、かなり前のバージョンでも殆ど一緒だと思われる。
手順
ipfwの有効化
おなじみ/etc/rc.confにfirewall_enableを追加する。firewall_typeには下表の値が指定可能。
| firewall_type | 意味 |
|---|---|
| open | 全てのトラフィックを通過 |
| client | 自ホストのみを保護 |
| simple | 自ネットワークを保護 |
| closed | ループバックインタフェース以外のIPトラフィックを全て無効化 |
| workstation | ステートフルルールで自ホストのみを保護 |
| UNKNOWN | ファイアウォールのルールを読み込まない |
| ファイルパス | ファイアウォールのルールファイルのフルパス |
これらデフォルトルールの設定は/etc/rc.firewallで処理される。client, simple, workstationの場合、自ネットワークなどの追加設定が必要だが、変数名なども全て同ファイル内に記載がある。
ここではひとまずopenとし全パケットを通過させる。
# echo 'firewall_enable="YES"' >> /etc/rc.conf # echo 'firewall_type="open"' >> /etc/rc.conf
ファイアウォールを起動する(もしくはマシンを再起動)。確実にfirewall_type=“open”であることを再度確認のこと。ipfwのデフォルト設定は全パケット拒否なので、特にリモートで操作している場合に大変残念なことになる…。
# service ipfw start
ipfw -a listでフィルタルールが表示されれば成功。
# ipfw -a list 00100 0 0 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 00400 0 0 deny ip from any to ::1 00500 0 0 deny ip from ::1 to any 00600 0 0 allow ipv6-icmp from :: to ff02::/16 00700 0 0 allow ipv6-icmp from fe80::/10 to fe80::/10 00800 0 0 allow ipv6-icmp from fe80::/10 to ff02::/16 00900 0 0 allow ipv6-icmp from any to any ip6 icmp6types 1 01000 3 216 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136 65000 399 39044 allow ip from any to any 65535 0 0 deny ip from any to any
設定ファイルからのルール読み込み
firewall_typeにファイルのフルパスを設定すると、ルールをファイルから読み込ませる事ができる。
firewall_typeとfirewall_scriptの違い
firewall_scriptは、rcスクリプトが処理するファイアウォール用スクリプトファイルを表す。デフォルトでは/etc/rc.firewall、すなわちipfw用のスクリプトが指定されている。
firewall_typeは/etc/rc.firewallスクリプトに影響する設定変数である。よってfirewall_scriptが独自のスクリプトの場合、特に意味のない値となる。とはいえ、ipfw自体がシステムに食い込んでいることもあり、デフォルト値UNKNOWNが設定されるようになっている。