ipfw
 natd & ipfw 設定手順
- 旧バージョンの FreeBSD ではカーネルを再構築する
# cd /usr/src/sys/i386/conf # cp GENERIC NEWKERNEL
以下のオプションを/usr/src/sys/i386/conf/NEWKERNELに追加.
options IPFIREWALL options IPFIREWALL_VERBOSE options IPDIVERT
カーネルを再構築する. ここで書いた手順は、旧バージョンの FreeBSD で の手順である.新しい FreeBSD では、この手順で行なわないこと。# /usr/sbin/config NEWKERNEL # cd /usr/src/sys/compile/NEWKERNEL # make depend # make # make install # sync # reboot
ゲートウェイとして働くようにする.
/etc/rc.confに以下の行を追加する.gateway_enable="YES" natd_enable="YES" natd_interface="外側インターフェース名"
- IPFWを有効にする.
/etc/rc.conf以下の行を追加するfirewall_enable="YES" firewall_script="/etc/rc.firewall" firewall_quiet="YES"
- IPFWの設定を行う
- 禁止されたパケットについてのログを録ること
- telnetでの外部への接続を禁止
- 192.168.33.*に向けての接続はtelnet以外すべて許可
- tcpで外部に接続するのはtelnet以外すべて許可
- udpで192.168.33.*以外への接続はDNS(port番号 53)のみ許可
- icmpはすべて許可
- 許可していないものはすべて禁止
############ # Only in rare cases do you want to change these rules # ${fwcmd} add 100 pass all from any to any via lo0 ${fwcmd} add 200 deny all from any to 127.0.0.0/8 # If you're using 'options BRIDGE', uncomment the following line to pass ARP #${fwcmd} add 300 pass udp from 0.0.0.0 2054 to 0.0.0.0
次のように書き直す${fwcmd} add deny log tcp from any to any 23 in via 外側インターフェース名 ${fwcmd} add deny log tcp from any to any 23 out via 外側インターフェース名 ${fwcmd} add deny log tcp from any to any 23 in via 内側インターフェース名 ${fwcmd} add allow ip from 192.168.33.0/24 to 外側IPアドレス in via 外側インターフェース名 ${fwcmd} add allow ip from 192.168.33.0/24 to 192.168.33.255/32 in via 外側インターフェース名 ${fwcmd} add allow ip from 192.168.33.0/24 to 192.168.40.0/24 in via 外側インターフェース名 ${fwcmd} add allow ip from 外側IPアドレス to 192.168.33.0/24 out via 外側インターフェース名 ${fwcmd} add allow ip from 192.168.40.0/24 to 192.168.33.0/24 out via 外側インターフェース名 ${fwcmd} add allow ip from 192.168.40.0/24 to 内側IPアドレス in via 内側インターフェース名 ${fwcmd} add allow ip from 192.168.40.0/24 to 192.168.40.255/32 in via 内側インターフェース名 ${fwcmd} add allow ip from 192.168.40.0/24 to 192.168.33.0/24 in via 内側インターフェース名 ${fwcmd} add allow ip from 内側IPアドレス to 192.168.40.0/24 out via 内側インターフェース名 ${fwcmd} add allow ip from 192.168.33.0/24 to 192.168.40.0/24 out via 内側インターフェース名 ${fwcmd} add allow tcp from any to 外側IPアドレス in via 外側インターフェース名 ${fwcmd} add allow tcp from any to 192.168.40.0/24 in via 外側インターフェース名 ${fwcmd} add allow tcp from 外側IPアドレス to any out via 外側インターフェース名 ${fwcmd} add allow tcp from 192.168.40.0/24 to any out via 外側インターフェース名 ${fwcmd} add allow tcp from 192.168.40.0/24 to any in via 内側インターフェース名 ${fwcmd} add allow tcp from any to 192.168.40.0/24 out via 内側インターフェース名 ${fwcmd} add allow udp from any 53 to 外側IPアドレス in via 外側インターフェース名 ${fwcmd} add allow udp from any to 外側IPアドレス 53 in via 外側インターフェース名 ${fwcmd} add allow udp from 外側IPアドレス to any 53 out via 外側インターフェース名 ${fwcmd} add allow udp from 外側IPアドレス 53 to any out via 外側インターフェース名 ${fwcmd} add allow icmp from any to any ${fwcmd} add deny log ip from any to any
- 再起動する
# sync # reboot
- 確認
以下のコマンドでIPFWのルールリストを見る# ipfw list
IPFWのルール変更
この形式での使用法は:ipfw [-N] コマンド [index] アクション [log] プロトコル アドレス [ オプション ]-N
-
アドレスやサービス名を文字列に変換して表示する.
-
add
-
ファイアウォール / アカウンティングルールリストに エントリを追加する.
-
ファイアウォール / アカウンティングルールリストから エントリを削除する.
-
index が指定されていると,エントリはチェーン中の index で示される位置に置かれる.
index が指定されて いなければ,エントリは(65535 番のデフォルトルールである
パケット拒絶を別にして) 最後のチェーンエントリの index に
100 を足した 位置 (チェーンの最後) に置かれる.
-
カーネルが IPFIREWALL_VERBOSE つきでコンパイルされている場合,
マッチしたルールをシステムコンソールに出力させる.
-
reject
-
パケットを捨てる.
ICMP ホスト / ポート到達不能パケットを (適切な方を) 発信元へ送る.
-
通常通りパケットを通過させる.(別名: pass および accept)
-
パケットを捨てる.発信元は ICMP メッセージによる 通知を受けない
(そのためパケットが宛先に到達しなかったように見える).
-
マッチするパケットを port で指定されたポートにバインドされている
divert(4) ソケットに送ります.
-
このルールはパケットカウンタを更新するだけで, パケットを通過させたり拒絶したりしない.
検索は次のチェーンエントリから続けられます.
-
all
-
任意の IP パケットにマッチします.
-
ICMP パケットにマッチします.
-
TCP パケットにマッチします.
-
UDP パケットにマッチします.
from <address/mask>[port] to <address/mask>[port] [via <interface>]port はポートをサポートする プロトコル (UDP と TCP) の 場合にだけ指定可能.
via は必須ではなく, 特定のインターフェースを通ってきたパケット だけにマッチするように, IP アドレスまたはローカル IP インターフェースの ドメイン名, またはインターフェース名 (例えば ed0) を 指定することができる.
<address/mask> の指定は:
<address>または
<address>/mask-bitsまたは
<address>:mask-patternIP アドレスのかわりに有効なホスト名を指定することも可能です. mask-bits はアドレスマスクで上位何ビットを1にするべきかを 示す十 進数値です. 例えば次の指定,
192.216.222.1/24はクラス C のサブネット (この場合 192.216.222) の任意のアドレスにマッチする マスクを作成する. mask-pattern は与えられたアド レスと 論理 AND される IP アドレスです. キーワード any は「任意の IP アドレス」を指定するために 使用することができる.
IPFW ルールリストの表示
この形式での使用法は:ipfw [-atN] listこの形式で使用する際に有効なフラグは三つあります:
-
-a
-
リスト表示の際にカウンタの値も表示します. このオプションは アカウンティングカウンタの内容を見る唯一の手段です.
-
各チェーンエントリが最後にマッチした時刻を表示します. この時刻表示は ipfw(8)
ユーティリティで使用される入力形式と 互換
性がありません.
-
(可能であれば) アドレスやサービス名を文字列に変換して表示します.