5. ファイアウォールへのルールセット

ここであなたのシステム用のファイアウォールルールを定義します。 私たちが記述するルールセットは、大部分のダイアルアップユーザ向けの 一般的な雛型です。ユーザ毎の要求にぴったり合わないでしょうが、IPFW の動作について基本的な理解を得られ、要求に合わせて設定を変更する のは結構簡単なはずです。

まずは、閉鎖的なファイアウォールの基礎から始めましょう。閉鎖的な ファイアウォールは、設定がない場合はすべて拒否するという考えに 基づいています。それから、管理者は許可したい通信用のルールを明示的に 追加できます。通信用のルールは、許可が先でそれから拒否という 順番であるべきです。許可したいものすべてについてルールを追加して、 それ以外はすべて自動的に拒否されることを前提とします。

それでは、ファイアウォールのルールを保存するディレクトリを 作成しましょう。この例では、 /etc/firewall を用います。 ディレクトリをそこへ変更し、 rc.conf で規定した fwrules ファイルを編集します。 このファイル名を自分が望む任意のものに変更できるということに気をつけてください。 この手引きはあなたが使おうとするかもしれないファイル名の一例を 与えるだけです。

それでは、きちんと注釈が施されたファイアウォールファイルの 例を見てみましょう。

# (/etc/rc.firewall にあるように) 参照を簡単にするためにファイアウォールの
# コマンドを定義します。読みやすくするのに役立ちます。
fwcmd="/sbin/ipfw"

# 外向けインタフェースを定義します。ユーザーランド ppp では、
# 何も設定しないと tun0 になります。
oif="tun0"

# 内向けインタフェースを定義します。通常はネットワークカードに
# なります。これを必ずあなたのネットワークインタフェースに
# 合わせて変更するようにしてください。
iif="fxp0"

# ルールを再読込みする前に、現在のルールを強制的に消去します。
$fwcmd -f flush

# すべてのパケットの状態を確認します。
$fwcmd add check-state

# 外向けインタフェース側でなりすましを防ぎます。
$fwcmd add deny ip from any to any in via $oif not verrevpath

# 私たちが開始した接続はすべて許可し、状態を保存します。
# しかし、動的なルールを持たない確立した接続は拒否します。
$fwcmd add allow ip from me to any out via $oif keep-state
$fwcmd add deny tcp from any to any established in via $oif

# ネットワーク内の接続はすべて許可します。
$fwcmd add allow ip from any to any via $iif

# ローカルな通信をすべて許可します。
$fwcmd add allow all from any to any via lo0
$fwcmd add deny all from any to 127.0.0.0/8
$fwcmd add deny ip from 127.0.0.0/8 to any

# インターネット側のユーザに 22 番と 80 番ポートへ接続することを
# 許可します。この例では、sshd とウェブサーバへの接続を特に許可しています。
$fwcmd add allow tcp from any to me dst-port 22,80 in via $oif setup keep-state

# ICMP パケットを許可します。ホストを ping(8) に応答させたくなければ、
# icmptypes から 8 を削除してください。
$fwcmd add allow icmp from any to any via $oif icmptypes 0,3,8,11,12

# 残りのすべてを拒否して記録します。
$fwcmd add deny log ip from any to any

22 番と 80 番ポートへの接続のみを許可し、それ以外に試みられた 接続はすべて記録する、完全に機能するファイアウォールができました。 これで安全に再起動することができ、ファイアウォールが自動的に 起動してルールセットが読み込まれるはずです。 もしこれに何か間違いを見つけたり、何か問題に当たったり、 このページを改善する提案があるなら、 どうか私に電子メールを送って下さい。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。