セキュリティ対策 - ファイアウォール IP Firewall - 基本設定


クラウディア 


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」を使用しているわけです。

earthcar(アースカー)
Amazonギフトカード
薬屋の独り言