IPCHAINS(8) IPCHAINS(8)
名前
ipchains - IP ファイアウォール管理
書式
ipchains -[ADC] チェイン ルールの詳細 [オプション]
ipchains -[RI] チェイン ルール番号 ルールの詳細 [オプション]
ipchains -D チェイン ルール番号 [オプション]
ipchains -[LFZNX] [チェイン] [オプション]
ipchains -P チェイン ターゲット [オプション]
ipchains -M [ -L | -S ] [オプション]
説明
ipchains は Linux カーネル中の IP ファイアウォールのルールを設定し、保
守し、検査するためのものである。これらのルールは、4 つのカテゴリに分 類
で きる - IP input (入力) チェイン、IP output (出力) チェイン、 IP for-
ward (転送) チェイン、そしてユーザ定義チェインである。
これら各々のカテゴリ毎に、ルールの一覧表【訳注: table/テーブル】が用 意
さ れる。これらルールはユーザ定義チェインのどれか一つを参照することもあ
る。詳細については ipfw(4) を参照のこと。
ターゲット
ファイアウォールルールでは、パケットの判定基準とターゲットを指定する 。
対 象パケットがマッチしないと、チェイン中の次のルールが検査される。ルー
ルに一致する場合、次のルールはターゲットの値によって指定される。ター ゲ
ッ ト の 値 は ユーザ定義チェインの名前か、または特別な値である ACCEPT,
DENY, REJECT, MASQ, REDIRECT, RETURN のうちの 1 つである。
ACCEPT は、対象パケットを通過させる。 DENY は、対象パケットを床へ落とし
、 捨て去る。 REJECT は、対象パケットを捨て去るという点では DENY と同じ
だが、 DENY よりも礼儀正しく、デバッグし易くなっている。何故なら、パ ケ
ッ トを捨てる際に対象パケットを捨てたことを示す ICMP メッセージを送信元
に返信するからである。 ( DENY と REJECT は、 ICMP パケットに関しては 動
作が同じであることに注意されたい。)
MASQ は forward チェインとユーザ定義チェインに対してのみ有効であり、且
つカーネルが CONFIG_IP_MASQUERADE 付きでコンパイルされている場合にだ け
使 用できる。これにより、パケットはあたかもローカルホストから発信された
かのようにマスカレードされる。更に、受信されるパケットは先にマスカレ ー
ド されたホストに対する返答として認識されると共に、自動的にマスカレード
外し (demasquerade) が行われ、 forward チェインのチェックから外される。
REDIRECT は input チェインとユーザ定義チェインに対してのみ有効であり、
カーネルが CONFIG_IP_TRANSPARENT_PROXY 付きでコンパイルされている場合に
だ け使用できる。このターゲットにより、リモートホスト宛に送信されたパケ
ットであってもローカルのソケットへ振り向けられる。リダイレクト先のポ ー
トにデフォルト値である 0 が指定されていると、そのパケットの宛先ポートが
リダイレクト先のポートとして使用される。このターゲットを用いる時は、 オ
プションの引数としてポート番号が指定できる。
ユ ーザ定義チェインの終りに達するか、またはターゲット RETURN を持つルー
ルにマッチした場合、以前の (呼び出し元の) チェイン中の次のルールが評 価
さ れる。組み込み済みチェインの終りに達するか、または組み込み済みチェイ
ンのルールのターゲットとして RETURN にマッチした場合、チェインに指定 さ
れたポリシーがそのパケットの運命を決定する。
オプション
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 と等価である。アドレス指定
の前に "!" を置くと、そのアドレスを指定しないことになる。
発信元にはポート指定または ICMP タイプを含めてもよい。これはサー
ビス名、ポート番号、ICMP タイプの数値、あるいは
ipchains -h icmp
コマンドで表示される ICMP タイプ名のいずれかでよい。
これら ICMP 名の多くはタイプとコードの両方を参照することに注意さ
れたい。よって、 -d フラグの後の ICMP コードの指定は誤りである。
この節の残りの部分では、 port はポート指定または ICMP タイプのい
ず れかを意味する。対象とするポートの範囲を port:port という書式
で指定することもできる。最初のポートを省略すると、"0" とみなされ
る。最後のポートを省略すると、"65535" とみなされる。
ポートは、 tcp, udp, icmp プロトコルとの組み合わせでのみ指定可能
である。ポート指定の前に "!" を置くと、そのポートを指定しない こ
とになる。 check コマンドが指定された場合、厳密に 1 つのポートが
必要である。 -f (fragment) フラグが指定された場合、ポートの指 定
は許されない。
--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]
マッチしたパケットをユーザ空間のデバイスへコピーする。これは現在
主にユーザ空間でファイアウォールの効果を使って何かしたい開発者が
使用する。オプション引数の最大サイズはコピーされるパケットの最大
数 を 制 限 す る 為 に使われる。このオプションはカーネルを CON-
FIG_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
/proc/net/ip_masquerade
返り値
各種エラーメッセージは標準エラー出力に出力される。正常動作時の終了コ ー
ドは 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 があったり、入力ルール以外に REDI-
RECT がある等) のを見つけると、syslog にメッセージを記録し、そのパケッ
トは破棄される。
SYN 及び ACK に合致する際の古い挙動 (従来、非 TCP パケットに対しては 無
視 されていた) が変更された。非 TCP パケット固有のルールに対する SYN オ
プションは誤りである。
ACK マッチングオプション ( -k フラグ) は、もはやサポートされな い 。 !
と -y との組み合わせがこれに相当する)。
現在では、TOS の最下位ビットを設定・変更する TOS マスクを明記するのはエ
ラーになる - 以前の TOS マスクの場合、そのような試みはカーネル内部で 黙
って変更されていた。
現 在、 -b フラグは単に送信元及び宛先の指定を反転させるルールの組合せを
挿入或は削除する為だけになった。
インターフェースをアドレスで指定する方法は無い。インターフェース名を 使
うこと。
関連項目
ipfw(4)
著者
Rusty Russell
Copyright(C) linux-cmd.com All Rights Reserved. Author Takayuki Yukawa