ipfw
現在は ipfw はベースシステムに入っているはず。
特に何か思い入れがない限りは、これをファイアウォールとして選択することになる。
(firewall_enable="YES" としたら ipfw が使われる。)
現在のフィルタ状態を表示する。
$ ipfw list
起動していない場合
code:console
# ipfw list
ipfw: retrieving config failed: Protocol not available
無設定状態であれば、以下のようにすれば設定できる。
code:/etc/rc.conf.fragment.ipfw
firewall_enable="YES"
firewall_type="open"
firewall_script="/etc/rc.firewall"
/etc/rc.firewall に基本設定が書かれている。
それ以外の方式にしたい場合は自分でルールを書くことになる。
はっきり言ってどれもあまり良くない設定になっている。
table:firewall_type
open 明らかにおかしな通信以外はすべて開く
client クライアント向けの最小設定
simple ゲートウェイ向け設定?
closed ローカルループバック以外はすべて無効
workstation ステートフルファイアーウォール(外
UNKNOWN
デフォルトでは、以下のようになっている。
firewall_type="UNKNOWN"
単純に設定してどうなるかを確認した。
firewall_type="open"
firewall_type="client"
firewall_type="simple"
firewall_type="closed"
firewall_type="workstation"
firewall_type="UNKNOWN"
firewall_myservices でポート番号と必要であればプロトコル(TCPまたはUDP)を書く。
firewall_allowservices でサービスを許可するIPアドレスを指定する。
最も簡単な書き方でサーバーを管理するならば
code:/etc/rc.conf.fragment.ipfw
firewall_enable="YES"
firewall_type="workstation"
firewall_myservices="22 80 443"
firewall_allowservices="any"
ここまでの基本設定で気に入らない場合
firewall_type にファイルパスを書くと、そのファイルで ipfw の設定を行うようになる。
その場合には firewall_quiet="NO" も付けなければならない。
firewall_quiet は ipfw に "-q" オプションを付け、メッセージを抑制する。
自分で設定を書く場合には、それを考慮して書く必要がある。
さらに、firewall_script="/etc/rc.firewall" を自分のスクリプトにすれば、制御は完全に自分の物になる。
ipfw には、「設定ファイル」という概念がなく、すべて ipfw コマンドの呼び出しで設定を行う。
つまり、ipfw の設定ファイルは、実質的にシェルスクリプトである。
ipfw にファイルを渡した場合、そのファイルは ipfw に対するコマンド群として解釈される。
関連設定
table:rc.conf.firewall
firewall_enable
firewall_script
firewall_type
firewall_quiet