IPCHAINS(8) | IPCHAINS(8) |
名前
ipchains - IP ファイアウォール管理書式
ipchains -[ADC] チェインルールの詳細 [オプション]説明
ipchains は Linux カーネル中の IP ファイアウォールのルールを設定し、保守し、検査するためのものである。これらのルールは、4 つのカテゴリに分類できる - IP input (入力) チェイン、IP output (出力) チェイン、 IP forward (転送) チェイン、そしてユーザ定義チェインである。ターゲット
ファイアウォールルールでは、パケットの判定基準とターゲットを指定する。対象パケットがマッチしないと、チェイン中の次のルールが検査される。ルールに一致する場合、次のルールはターゲットの値によって指定される。ターゲットの値はユーザ定義チェインの名前か、または特別な値である ACCEPT, DENY, REJECT, MASQ, REDIRECT, RETURN のうちの 1 つである。オプション
ipchains が認識するオプションは、幾つかのグループに分類できる。コマンド
これらのオプションは実行する特定の機能を指定する - 以下に特別に指定のない限り、コマンドラインではこれらのオプションのうちいずれか一つしか指定することができない。ロングバージョンのコマンドやオプション名は、必ずしも完全な形の名前で指定する必要はなく、 ipchains が他のオプションと識別することができるだけの長さがあれば十分である。【訳注: 例えば、 --append の場合、 --a で始まるオプション名は他にないので、 --app でも可である。】- -A, --append
- 選択したチェインの末尾に 1 つ以上のルールを追加する。名前解決の結果、発信元アドレスと宛先アドレスの両方またはいずれかの名前が 1 つ以上の IP アドレスを持つ場合、ルールは各々の可能なアドレスの組合せ毎に追加される。
- -D, --delete
- 選択したチェインから、1 つ以上のルールを削除する。このコマンドには 2 つのバージョンがある - ルールは (最初のルールを 1 として数え始めて) チェイン中の番号で指定されるか、一致するルールにて指定される。
- -R, --replace
- 選択したチェインのルールを置き換える。名前解決の結果、発信元と宛先の両方またはいずれかの名前が複数の IP アドレスを持つ場合、コマンドの実行は失敗する。ルールには 1 から始まる番号が振られる。
- -I, --insert
- 選択したチェインへ、 1 つ以上のルールを指定のルール番号で挿入する。従って、ルール番号に 1 を指定すると、そのルールはチェインの先頭に挿入される。
- -L, --list
- 選択したチェインに含まれる全てのルールを一覧表示する。チェインを指定しないと、全てのチェインが一覧表示される。チェインを指定しない時に、 -Z (ゼロ) オプションとの組み合わせは有効である。正確な出力は他の引数の指定によって行われる。
- -F, --flush
- 選択したチェインの内容を一気に消去する。これは全てのルールを一つずつ削除することと等価である。
- -Z, --zero
- 全てのチェインのパケットカウンタとバイトカウンタをゼロに初期化する。カウンタがクリアされる直前にその値を見たい時の為に、 -L, --list (リスト) オプションとの組み合わせは有効である - カウンタのクリアを行う際、特定のチェインを指定することは出来ない。 ( 全ての チェインが表示されると共にクリアされる)
- -N, --new-chain
- 指定した名前のユーザ定義チェインを新たに作成する。既存のターゲットと同じ名前は使用できない。
- -X, --delete-chain
- 指定したユーザ定義チェインを削除する。削除対象チェインへの参照が存在してはならない (参照されている場合は、そのチェインを削除する前に、参照元のルールを削除するか、或は他のチェインへ移動しなければならない)。引数が与えられなかった場合、 ipchains は組み込み済みチェインを除く全てのユーザ定義チェインを削除しようとする。
- -P, --policy
- チェインのポリシーを指定したターゲットに設定する。正しいターゲットについては、 ターゲット の項を参照。ポリシーを持つことができるのはユーザ定義ではないチェインだけであり、組み込み済みチェインもユーザ定義チェインもポリシーのターゲットとはなり得ない。
- -M, --masquerading
- このオプションは、( -L オプションと組み合わせて) 現在マスカレードされている接続を閲覧したり、( -S オプションと組み合わせて) カーネルにマスカレードの値を設定する。
- -S, --set tcp tcpfin udp
- IP マスカレードに使用するタイムアウト値を変更する。このコマンドは常に 3 つのパラメータを取り、それぞれ、TCP セッション、 FIN パケット受信後の TCP セッション、UDP パケットに対するタイムアウト値 (秒) を表す。タイムアウト値 0 は、対応する項目の現在のタイムアウト値が保持されることを意味する。このオプションは、 -M フラグとの組み合わせの時のみ使用できる。
- -C, --check
- 選択したチェインで与えられたパケットを照合する。このパケットを、ネットワークから来た "本物の"パケットのように扱わせることでカーネルルーチンのテストに使える。組み込み済みチェインやユーザ定義チェインをチェックするのにも使える。ファイアウォールのルールを規定した引数は、テスト用パケットを構築するのにも使える。特に、 -s (発信元)、 -d (宛先)、 -p (プロトコル)、 -i (インターフェース) フラグは必ず指定する。
- -h, --help
- コマンドの書式に関する (今のところは非常に簡単な) 説明を表示する。オプションに icmp を指定すると、ICMP 名の一覧を表示する。
- -V, --version
- 単に ipchains のバージョン番号を表示する。
引数
下記に示すパラメータは (追加 (append), 削除 (delete), 置換(replace), 挿入 (insert) 及びチェック (check) の各コマンドにて用いられる) ルールの指定を補う。- -p, --protocol [!] protocol
- チェック対象となるルールまたはパケットのプロトコル。プロトコルには tcp, udp, icmp, all, のどれか一つを指定する。またはこれらのプロトコルに対応したプロトコル番号や、これらのプロトコルに対応していない番号を指定できる。また、 /etc/protocols にあるプロトコル名での指定も許される。プロトコル指定の前に "!"を置くと、そのプロトコルを指定しないことになる。数値 0 は all と等価である。プロトコル all は全てのプロトコルと一致し、このオプションが省略された場合のデフォルト値である。 all は check コマンドと組み合わせてはならない。
- -s, --source, --src [!] address[/ mask] [!] [ port[:port]]
-
発信元の指定。
address は、ホスト名・ネットワーク名・素の IP アドレスのいずれでもよい。
mask は、ネットマスク・単なる数 (ネットマスクの左側から数えた 1 の個数) のいずれでもよい。したがって、
24 という mask の値は、
255.255.255.0 と等価である。アドレス指定の前に "!"を置くと、そのアドレスを指定しないことになる。
ipchains -h icmp
- --source-port [!] [ port[:port]]
- 発信元ポートまたは発信元ポート範囲の、個別指定を可能とする。詳細については、前出の -s フラグに関する解説を参照のこと。フラグ --sport は、このオプションの別名である。
- -d, --destination, --dst [!] address[/ mask] [!] [ port[:port]]
- 宛先指定。構文についての詳細な説明は、 -s (source) フラグの解説を参照のこと。ポートを持たない ICMP に対しては、"宛先ポート"は数字の ICMP コードを表す。
- --destination-port [!] [ port[:port]]
- ポートの個別指定を可能とする。詳細については、 -s フラグの解説を参照のこと。フラグ --dport は、このオプションの別名である。
- --icmp-type [!] typename
- ICMP タイプの指定を可能にする (正しい ICMP タイプ名を確認するには、 -h icmp オプションを使用する)。宛先指定に ICMP タイプを付加するよりも、これを利用するほうがより便利な場合が多い。
- -j, --jump target
- これはルールのターゲットを指定する - すなわち、ルールにマッチしたパケットの行く末である。ターゲットはユーザ定義チェイン (但し、当該ルールが含まれているものを除く) か、パケットの運命を直接決定する特定のターゲットのうちの一つが指定可能である。ルール中でこのオプションが省略された場合には、パケットの運命には全く影響しないが、ルールのカウンタの値は増加する。
- -i, --interface [!] name
- (input チェインにおいては) 受信したパケットが通過するインターフェース名、 (forward 及び output チェインにおいては) 送信されるパケットが通過するインターフェース名を指定する。このオプションが省略された場合は空文字列と見なされ、全てのインターフェース名を指定することと同じ意味になる。インタフェース名の前に "!"が置かれると、そのインターフェースを指定しないという意味になる。インタフェース名の末尾の "+"は前方一致を示し、"+"の直前までの文字列で始まるインタフェースの全てにマッチする。
- [!] -f, --fragment
- 寸断された (fragment: フラグメント) パケットのうち 2 番目以降のフラグメントだけを参照するルールであることを意味する。そのようなパケット (または ICMP タイプ) の発信元ポートや宛先ポートを識別する方法は無いので、この類のパケットはあらゆるルールとマッチしない。 "-f"フラグの前に "!"があると、2番目以降のフラグメントを参照しない。
その他のオプション
以下のオプションを追加することができる -- -b, --bidirectional
- 双方向モード。ルールは IP パケットに対し双方向にマッチする - これは発信元と宛先を交換してルールを繰り返して記述することと同じ効果をもたらす。 TCP syn パケットの送出を許可する設定に -b ルールを適応すると、TCP syn パケットでないパケットの受け取りを許可する設定にはならない。【訳注: -b フラグが反対を意味するからといって、"TCP synパケット"の反対の意味で "非SYNパケット"という対応になったり、 "パケットの送出"の反対の意味で "パケットの受けとり"という対応にはならない。意味が反対になるのは発信元アドレスと宛先アドレスの交換によるパケットの方向だけであり、 "SYN パケット"が"非SYNパケット"にはならないし、 input チェインから output チェインに扱いが変わる訳でもない。】つまり、-b フラグは使わずに、きちんと一つずつルールを指定したほうがよい。
- -v, --verbose
- 詳細表示。このオプションは、コマンドのインターフェースアドレス・(もしあれば) ルールのオプション・TOS マスク・パケットとバイトのカウンタを一覧表にして表示する。カウンタ表示の後の 'K', 'M', 'G' は各々、 1000, 1,000,000, 1,000,000,000 倍を意味する。 (但し、 -x フラグはこの表示方法を変更する。) -M と組み合わせて使うと、デルタシーケンス番号 (delta sequence numbers) に関連する情報も表示される。追加、挿入、削除、置換にこのオプションを適用すると、ルールの詳細情報が表示されるようになる。
- -n, --numeric
- 数値での出力。 IP アドレスとポート番号が数値形式で出力される。デフォルトでは、 ipchains はそれらをホスト名、ネットワーク名、或はサービス名で(出来るだけ)表示しようと試みる。
- -l, --log
- マッチしたパケットをカーネルのログに記録する。ルールにこのオプションが設定される時、 Linux カーネルは printk() 関数を通じて、マッチしたパケット全ての(多くは IP ヘッダフィールドに関する) 情報を出力する。
- -o, --output [maxsize]
- マッチしたパケットをユーザ空間のデバイスへコピーする。これは現在主にユーザ空間でファイアウォールの効果を使って何かしたい開発者が使用する。オプション引数の最大サイズはコピーされるパケットの最大数を制限する為に使われる。このオプションはカーネルを CONFIG_IP_FIREWALL_NETLINK を設定してコンパイルした時のみ有効である。
- -m, --mark markvalue
- マッチしたパケットに印を付ける。パケットには 32 ビットの符号無しの数値で印が付けられ、その値によって (そのうち) そのパケットが内部でどのように扱われるかが変更できるようになるだろう。あなたがカーネルハッカーでなければ、このオプションは気にしなくて良い。 マーク値 が + 或は - から始まる際には、 (ゼロから始まる) 現在のマーク値からその値を加算或は減算する。
- -t, --TOS andmask xormask
- IP ヘッダ内の TOS フィールドを変更する為に使用されるマスク。パケットがルールにマッチする時、その TOS フィールドは 1 番目のマスクでビット単位の論理積が行われ、その結果は 2 番目のマスクでビット単位の排他的論理和が行われる。マスク値は 16 進の 8 ビット値で指定する。 TOS フィールドの LSB は不変でなければならない (RFC 1349) 。これを変更しようとすると、拒絶される。すなわち、 TOS ビットが 1 つ以上設定されているものがこれに該当する。パケットに複数の TOS ビットを設定しようとすると、(標準出力を通じて) ワーニングメッセージを出す。そのような TOS 値を持つパケットが当該ルールに到達することはあり得ないとわかっているなら、ワーニングメッセージは無視できる。勿論、 TOS の操作はルールのターゲットが DENY 或は REJECT の場合には無意味である。
- -x, --exact
- 番号表示の拡張。パケット及びバイトカウンタの値を K (1000倍)、 M (1000K倍) 或は G (1000M倍)で丸めた値でなく、正確な値で表示する。このオプションは -L コマンドでのみ有効である。
- [!] -y, --syn
- TCP パケットの内、SYN ビットがセットされ ACK ビットと FIN ビットがクリアされたパケットにのみマッチする。そのようなパケットは、TCP 接続の開始要求に使用される。例えば、あるインターフェースへ到着するそのようなパケットを遮断すると、内向きの TCP 接続を防止するが、外向きの TCP 接続は影響を受けない。このオプションは、プロトコルの種類が TCP に設定されている場合にのみ意味を持つ。 "-y"の前に "!"フラグがあると、このオプションの判定結果が否定される。【訳注: -y の場合、各々のビットの条件は "SYN=1 and ACK=0 and FIN=0"の組合せにのみマッチする。 "! -y"はこの否定なので、各ビットの組合せが上記以外の全てのパケットがマッチする。すなわち、 "SYN=0 or ACK=1 or FIN=1"という条件になる。 SYN ビットが 0 であれば良いのは言うまでもなく、例えば "SYN=1 and ACK=1 and FIN=0"という組合せでもマッチする。】
- --line-numbers
- ルールを一覧表示する際、各ルールの先頭にそのルールのチェイン中での位置に対応する行番号を追加する。
- --no-warnings
- 全ての警告を無効にする。
ファイル
/proc/net/ip_fwchains返り値
各種エラーメッセージは標準エラー出力に出力される。正常動作時の終了コードは 0 である。無効な、或は誤ったコマンド行パラメータに起因すると思われるエラーは、終了コード 2 を発生する。その他のエラーでの終了コードは 1 である。バグ
ターミナルからの入力により forward チェインへルールが挿入または追加されたときに IP 転送機能が有効になっていない場合で --no-warnings を指定していなければ、誤りを修正するまで IP 転送が行われないことを警告するメッセージが標準出力へ表示される。これは、(2.0 カーネルには存在しなかった) 必要条件に気付かないユーザを助けるためのものである。パケットカウンタとバイトカウンタを 1 つのチェインの分だけリセットする方法は無い。これはカーネルの制限である。
ループの検知は ipchains では行われない。ループ状態にあるパケットは破棄されログに記録されるが、うっかりループを作ってしまうことを考慮して、ログから見つけ出すことが必要である。
新しい 2.1 カーネルのパケットスケジューリングのルーチンを詳述する文書がリリースされる迄、パケットのマーキングの効果に関する説明は意図的に曖昧にしている。
(組み込み済みチェインの) ポリシーカウンタを 0 にする方法は無い。
注意
ipchains は、新しい IP ファイアウォールツリーを利用するという点で、Jos Vos 作の ipfwadm とは大きく異なっている。 ipchains の機能は ipfwadm のスーパーセットであり、コマンドはほぼ 1 対 1 で対応付けることができる。新しいコマンド名は、より理に適ったものであると思う。とはいえ、注意すべき変更点もいくつか存在する。フラグメントの扱いが異なる。従来は、2 番目以降のフラグメントを全て通過させていた (通常、これは安全である)。現在では、これらをフィルタすることができる。すなわち、 ipfwadm からルールを変換する際には、フラグメントを許可するルールを明示しなければならない。同様に、送信元及び宛先ポートに 0xFFFF (ICMP では 0xFF) を指定してチェックする、古い統計 (accounting)ルールを探す必要がある。これはフラグメントの統計を取る古い方法である。
統計 (accounting) ルールは、現在は input チェインと output チェインへ統合されている。以前の挙動と同じようにするには以下のようにすればよい -
ipchains -N acctin
ipchains -N acctout
ipchains -N acctio
ipchains -I input -j acctio
ipchains -I input -j acctin
ipchains -I output -j acctio
ipchains -I output -j acctout
これは 3 つのユーザ定義チェイン、 acctin, acctout , acctio, を生成する。これらはあらゆる統計ルールを含められる。 (これらのルールは -j フラグを使わず指定するべきである。そうすれば、パケットはこれらのチェインを単に無傷のまま通過する。)
カーネルが MASQ ターゲットや REDIRECT ターゲットが不適切なところにある (つまり、 forward ルール以外に MASQ があったり、入力ルール以外に REDIRECT がある等) のを見つけると、syslog にメッセージを記録し、そのパケットは破棄される。
SYN 及び ACK に合致する際の古い挙動 (従来、非 TCP パケットに対しては無視されていた) が変更された。非 TCP パケット固有のルールに対する SYN オプションは誤りである。
ACK マッチングオプション ( -k フラグ) は、もはやサポートされない。 ! と -y との組み合わせがこれに相当する)。
現在では、TOS の最下位ビットを設定・変更する TOS マスクを明記するのはエラーになる - 以前の TOS マスクの場合、そのような試みはカーネル内部で黙って変更されていた。
現在、 -b フラグは単に送信元及び宛先の指定を反転させるルールの組合せを挿入或は削除する為だけになった。
インターフェースをアドレスで指定する方法は無い。インターフェース名を使うこと。
関連項目
ipfw(4)著者
Rusty Russell <rusty@linuxcare.com>。細かな点まで校正してくれた Hans Persson にお礼が言いたい。今後私が書く文書は、全部彼に読んでもらいたい!翻訳者
大神淳 <ati@ff.iij4u.or.jp>日本語版校正
白方健太郎 <argrath@ub32.org>February 8, 1998 |