- 1. 概要
- 2. /etc/rc.conf 設定
- 3. タイプ
- 4. type ハ script ニ非ズ
1. 概要
前ページでカーネルの設定はできました。
「IP Firewall」自体の起動設定を行います。
本ページでは、設定を行う前のデフォルトの状態を記述していますが、デフォルトの状態は、「FreeBSD」のバージョンによって異なるかもしれません。
よって、環境により、下記の内容は異なるかもしれないので、悪しからずご了承ください。
2. /etc/rc.conf 設定
カーネルの構築までできたら、「/etc/rc.conf」を編集してファイアウォールを有効にし、念のため、タイプを設定します。
「root」ユーザ権限で。
sysrc firewall_enable=YES
sysrc firewall_type=/usr/local/etc/firewall.conf
これで、下記の2行が追加されます。
firewall_enable="YES"
firewall_type="/usr/local/etc/firewall.conf"
これで、起動時にファイアウォールが有効になり、デフォルトの動作を「allow」にします。
ここでいったんファイアウォールを起動してみます。
$ service ipfw start
Flushed all rules.
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00400 deny ip from any to ::1
00500 deny ip from ::1 to any
00600 allow ipv6-icmp from :: to ff02::/16
00700 allow ipv6-icmp from fe80::/10 to fe80::/10
00800 allow ipv6-icmp from fe80::/10 to ff02::/16
00900 allow ipv6-icmp from any to any ip6 icmp6types 1
01000 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
65000 allow ip from any to any
Firewall rules loaded.
3. タイプ
「/etc/rc.conf」の
firewall_enable="YES"
firewall_type="タイプ"
には、下記のものがあるようです(参考サイトのまま)。
設 定 値 | 意 味 | 備考 |
open | すべてのトラフィックを渡します | |
client | このマシンのみを保護します | |
simple | ネットワーク全体を保護します | |
closed | ループバックインターフェイスを除いて、IPトラフィックを完全に無効にします | |
workstation | ステートフルルール(なんじゃそれは?)を使用してこのマシンのみを保護します | |
UNKNOWN | ファイアウォールルールの読み込みを無効にします | ※1 |
filename | ファイアウォールルールセットを含むファイルのフルパス | |
※1 設定値を設定しない(デフォルト)場合はこれ(UNKNOWN)になるようです。
参考サイトでは、すべてのタイプを試してみているようですが・・・。
わたしは、「open」「closed」「UNKNOWN(設定なし)」を試してみました(コマンドの意味は後述)。
「open」
$ ipfw -aN 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 localhost
00500 0 0 deny ip from localhost 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 icmp6types 1
01000 0 0 allow ipv6-icmp from any to any icmp6types 2,135,136
65000 0 0 allow ip from any to any
65535 3144 492607 allow ip from any to any
「closed」
$ ipfw -aN 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 localhost
00500 0 0 deny ip from localhost 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 icmp6types 1
01000 0 0 allow ipv6-icmp from any to any icmp6types 2,135,136
65000 0 0 deny ip from any to any
65535 3144 492607 allow ip from any to any
「UNKNOWN(設定なし)」
$ ipfw -aN list
00100 2 160 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 localhost
00500 0 0 deny ip from localhost 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 icmp6types 1
01000 0 0 allow ipv6-icmp from any to any icmp6types 2,135,136
65535 1289 160589 allow ip from any to any
この時点で、「firewall_type」は、ルール「65000」に影響を与えていることがわかります。
カーネル構築時に設定した「IPFIREWALL_DEFAULT_TO_ACCEPT」は、ルール「65535」(最大の番号)に影響を与えていることがわかります。
フィルタのチェックは若い順にチェックします。
「deny」は、「200」~「500」しかないので、「500」まですり抜けてきたものは、最後の「65535」によって、判断されます。
基本的に、ループバックアドレスは、すべて通しています。
4. type ハ script ニ非ズ
さて、今回(2023年1月13日)、本章を書き直すにあたって、勘違いしかけたことがあります。
「/etc/rc.conf」に設定する項目に
firewall_type="..."
firewall_script="..."
ちゅうのがありまして。
以前のわたしの記述で
firewall_type="open"
firewall_type="/etc/firewall.conf"
と書いているのがあちこちにあります。
「わわ、これは」
firewall_type="open"
firewall_script="/etc/firewall.conf"
「と書き間違えていたか・・・」と思ったのですが。
さに非ず。
firewall_script="..."
ちゅうのは、「ipfw」起動時のスクリプトだそうでありまして。
省略している場合は
/etc/rc.firewall
を使用することになっています。
これは、「FreeBSD 12.4 RELEASE」であれば
/etc/rc.d/ipfw
の下記で見ることができます。
# set the firewall rules script if none was specified
[ -z "${firewall_script}" ] && firewall_script=/etc/rc.firewall
「/etc/rc.firewall」は、実行権限はないですが、シェバンがついていまして、なんかうまいことやってスクリプトとして実行しているようです。
これに対して
firewall_type="..."
は、前項で掲載しているもの以外の値が設定されている場合は、それをファイルとみなして、そのファイル内に記述してある、「ipfw」のコマンドを実行するのであります。
なので、
touch /usr/local/etc/firewall.conf
sysrc firewall_type=/usr/local/etc/firewall.conf
service ipfw restart
としてやれば、「firewall_type」設定なしの状態になります。
以降は、後述する内容で、設定したいルールを
/etc/rc.d/ipfw
に記述しては、「ipfw」を再起動してやればいいことになります。
以前に書いた記事で
firewall_type="open"
firewall_type="/usr/local/etc/firewall.conf"
と書いてあるような場合、「firewall_type」の設定が降着優先で書き変わって、「/usr/local/etc/firewall.conf」を使用しているわけです。
|