FreeBSD ハンドブック : セキュリティ : ファイアウォール : IPFW の設定
Previous: FreeBSD で IPFW を有効にする
Next: ipfw に対するコマンドの例

6.4.4. IPFW の設定

IPFW ソフトウェアの設定は ipfw(8) ユーティリティを 通じておこないます. このコマンドの構文は非常に複雑に見えますが, 一旦その構造を理解すれば比較的単純です.

このユーティリティでは今のところ四つの異なるコマンドカテゴリが 使用されています: それは追加 / 削除, 表示, フラッシュ, およびクリアです. 追加 / 削除はパケットの受け入れ, 拒絶, ログ取りをどのようにおこなうか というルールを構築するのに使用します. 表示はルールリスト (またはチェーン) と (アカウンティング用) パケットカウンタの 内容を調べるのに使用します. フラッシュはチェーンからすべてのエントリを取り除くのに使用します. クリアは一つまたはそれ以上のアカウンティングエントリをゼロにするのに 使用します.

6.4.4.1. IPFW ルールの変更

この形式での使用法は:

ipfw [-N] コマンド [index] アクション [log] プロトコル アドレス [ オプション ]

この形式で使用する際に有効なフラグは一つだけです:

-N

アドレスやサービス名を文字列に変換して表示します.

コマンド は一意である限り短縮可能です. 有効な コマンド は:

add

ファイアウォール / アカウンティングルールリストに エントリを追加します.

delete

ファイアウォール / アカウンティングルールリストから エントリを削除します.

以前のバージョンの IPFW では, ファイアウォールエントリと パケットアカウンティングエントリが別々に利用されていました. 現在のバージョンでは, それぞれのファイアウォールエントリ毎に パケットアカウンティングエントリが備えられています.

index が指定されていると, エントリはチェーン中の index で示される位置に置かれます. index が指定されて いなければ, エントリは (65535 番のデフォルトルールである パケット拒絶を別にして) 最後のチェーンエントリの index に 100 を足した 位置 (チェーンの最後) に置かれます.

カーネルが IPFIREWALL_VERBOSE つきでコンパイルされている場合, log オプションはマッチしたルールをシステムコンソールに出力させます.

有効な アクション は:

reject

パケットを捨てます, ICMP ホスト / ポート到達不能パケットを (適切な方を) 発信元へ送ります.

allow

通常通りパケットを通過させます. (別名: pass および accept)

deny

パケットを捨てます. 発信元は ICMP メッセージによる 通知を受けません (そのためパケットが宛先に到達しなかったように見えます).

count

このルールはパケットカウンタを更新するだけで, パケットを 通過させたり拒絶したりしません. 検索は次のチェーンエントリから続けられます.

それぞれの アクション は一意な先頭部分だけでも認識されます.

指定可能な プロトコル は以下の通り:

all

任意の IP パケットにマッチします.

icmp

ICMP パケットにマッチします.

tcp

TCP パケットにマッチします.

udp

UDP パケットにマッチします.

アドレス の指定は:

from <address/mask>[port] to <address/mask>[port] [via <interface>]

port はポートをサポートする プロトコル (UDP と TCP) の 場合にだけ指定可能です.

via は必須ではなく, 特定のインターフェースを通ってきたパケット だけにマッチするように, IP アドレスまたはローカル IP インターフェースの ドメイン名, またはインターフェース名 (例えば ed0) を 指定することができます. インターフェースユニット番号はオプションで, ワイルドカードで指定することが できます. 例えば, ppp* はすべてのカーネル PPP インターフェースに マッチします.

<address/mask> の指定は:

<address>
または
<address>/mask-bits
または
<address>:mask-pattern

IP アドレスのかわりに有効なホスト名を指定することも可能です. mask-bits はアドレスマスクで上位何ビットを1にするべきかを 示す十進数値です. 例えば次の指定,

192.216.222.1/24
はクラス C のサブネット (この場合 192.216.222) の任意のアドレスにマッチする マスクを作成します. mask-pattern は与えられたアドレスと 論理 AND される IP アドレスです. キーワード any は「任意の IP アドレス」を指定するために 使用することができます.

ブロックするポート番号は以下のように指定します:

port[,port[,port[...]]]
のように単独のポートまたはポートのリストを指定します. または
port-port
のようにポートの範囲を指定します. 単独のポートとポートのリストを 組み合わせて指定することも可能ですが, その場合は常に範囲の方を 最初に指定しなければなりません.

使用可能な オプション は:

frag

データグラムの最初のフラグメントでなければマッチします.

in

入力途中のパケットであればマッチします.

out

出力途中のパケットであればマッチします.

ipoptions spec

IP ヘッダが spec に指定された カンマで区切られたオプションのリストを含んでいればマッチします. サポートされている IP オプションのリストは: ssrr (ストリクトソースルート), lsrr (ルーズソースルート), rr (レコードパケットルート), そして ts (タイムスタンプ) です. 特定のオプションを含まないことを指定するには '!' を先頭につけます.

established

パケットが既に確立されている TCP コネクションの一部であれば (つまり RST または ACK ビットがセットされていれば) マッチします. established ルールをチェーンの最初の方に置くことで, ファイアウォールのパフォーマンスを向上させることができます.

setup

パケットが TCP コネクションを確立しようとするものであれば (SYN ビットがセットされ ACK ビットはセットされていなければ) マッチします.

tcpflags flags

TCP ヘッダが flags に指定された カンマで区切られたフラグのリストを含んでいればマッチします. サポートされているフラグは, fin, syn, rst, psh, ackurg です. 特定のフラグを含まないことを指定するには '!' を先頭につけます.

icmptypes types

ICMP タイプが types リストに 存在していればマッチします. リストはタイプの範囲または個々のタイプを カンマで区切った任意の組合せで指定できます. 一般的に使用されている ICMP タイプは: 0 エコーリプライ (ping リプライ), 3 相手先到達不可能, 5 リダイレクト, 8 エコーリクエスト (ping リクエスト), そして 11 時間超過 (traceroute(8) で使用されているように, TTL 満了を示すのに使用されます) です.

6.4.4.2. IPFW ルールリストの表示

この形式での使用法は:

ipfw [-atN] l

この形式で使用する際に有効なフラグは三つあります:

-a

リスト表示の際にカウンタの値も表示します. このオプションは アカウンティングカウンタの内容を見る唯一の手段です.

-t

各チェーンエントリが最後にマッチした時刻を表示します. この時刻表示は ipfw(8) ユーティリティで使用される入力形式と 互換性がありません.

-N

(可能であれば) アドレスやサービス名を文字列に変換して表示します.

6.4.4.3. IPFW ルールのフラッシュ

チェーンをフラッシュするには:

ipfw flush

カーネルに固定されているデフォルトルール (インデックス 65535 番) 以外の, ファイアウォールチェーンの中のすべてのエントリを削除します. デフォルトではすべてのパケットが拒絶されるので, 一旦これを実行すると, パケットを許可するエントリがチェーンに追加されるまで, あなたのシステムがネットワークから切り放されてしまいます. そのため, ルールのフラッシュをおこなうときは注意が必要です.

6.4.4.4. IPFW パケットカウンタのクリア

一つまたはそれ以上のパケットカウンタをクリアするためには:

ipfw zero [index]

index が指定されていなければ, すべてのパケットカウンタが クリアされます. index が指定されていれば, 特定のチェーンエントリだけが クリアされます.


FreeBSD ハンドブック : セキュリティ : ファイアウォール : IPFW の設定
Previous: FreeBSD で IPFW を有効にする
Next: ipfw に対するコマンドの例