IP6TABLES(8) | IP6TABLES(8) |
名前
ip6tables - IPv6 パケットフィルタを管理する書式
ip6tables [-t テーブル] -[AD] チェインルールの詳細 [オプション]説明
ip6tables は Linux カーネルの IPv6 パケットフィルタルールのテーブルを設定・管理・検査するために使われる。複数の異なるテーブルが定義される可能性がある。各テーブルは組み込み済みチェインを含む。さらにユーザー定義のチェインを含むこともできる。ターゲット
ファイアウォールのルールは、パケットを判断する基準とターゲットを指定する。パケットがマッチしない場合、チェイン内の次のルールが評価される。パケットがマッチした場合、ターゲットの値によって次のルールが指定される。ターゲットの値は、ユーザー定義チェインの名前、または特別な値 ACCEPT, DROP, QUEUE, RETURN のうちの 1 つである。ACCEPT はパケットを通すという意味である。 DROP はパケットを床に落す (捨てる) という意味である。 QUEUE はパケットをユーザー空間に渡すという意味である (カーネルがサポートしていればであるが)。 RETURN は、このチェインを辿るのを中止して、前の (呼び出し元) チェインの次のルールから再開するという意味である。組み込み済みチェインの最後に到達した場合、または組み込み済みチェインでターゲット RETURN を持つルールにマッチした場合、チェインポリシーで指定されたターゲットがパケットの行方を決定する。
テーブル
現在のところ 2 つの独立なテーブルが存在する (どのテーブルがどの時点で現れるかは、カーネルの設定やどういったモジュールが存在するかに依存する)。 nat テーブルは、まだ実装されていない。- -t, --table table
-
このオプションは、このコマンドが操作するパケットマッチングテーブルを指定する。カーネルに自動モジュールローディングが設定されている場合、そのテーブルに対する適切なモジュールがまだロードされていなければ、そのモジュールがロードされる。
- filter:
- (-t オプションが指定されていない場合は) これがデフォルトのテーブルである。これには INPUT (マシン自体に入ってくるパケットに対するチェイン)・ FORWARD (マシンを経由するパケットに対するチェイン)・ OUTPUT (ローカルマシンで生成されたパケットに対するチェイン) という組み込み済みチェインが含まれる。
- mangle:
- このテーブルは特別なパケット変換に使われる。カーネル 2.4.17 までは、 PREROUTING (パケットが入ってきた場合、すぐにそのパケットを変換するためのチェイン)・ OUTPUT (ローカルで生成されたパケットをルーティングの前に変換するためのチェイン) という 2 つの組み込み済みチェインが含まれていた。カーネル 2.4.18 からは、これらの他に INPUT (マシン自体に入ってくるパケットに対するチェイン)・ FORWARD (マシンを経由するパケットに対するチェイン)・ POSTROUTING (パケットが出て行くときに変換するためのチェイン)・という 3 つの組み込み済みチェインもサポートされる。
オプション
ip6tables で使えるオプションは、いくつかのグループに分けられる。コマンド
これらのオプションは、実行する特定の動作を指定する。以下の説明で許可されていない限り、この中の 1 つしかコマンドラインで指定することができない。長いバージョンのコマンド名とオプション名は、 ip6tables が他のコマンド名やオプション名と区別できる範囲で (文字を省略して) 指定することもできる。- -A, --append chain rule-specification
- 選択されたチェインの最後に 1 つ以上のルールを追加する。送信元や送信先の名前の解決を行って、 1 つ以上のアドレスに展開された場合は、可能なアドレスの組合せそれぞれに対してルールが追加される。
- -D, --delete chain rule-specification
- -D, --delete chain rulenum
- 選択されたチェインから 1 つ以上のルールを削除する。このコマンドには 2 つの使い方がある: チェインの中の番号 (最初のルールを 1 とする) を指定する場合と、マッチするルールを指定する場合である。
- -I, --insert
- 選択されたチェインにルール番号を指定して 1 つ以上のルールを挿入する。ルール番号が 1 の場合、ルールはチェインの先頭に挿入される。これはルール番号が指定されない場合のデフォルトでもある。
- -R, --replace chain rulenum rule-specification
- 選択されたチェインにあるルールを置き換える。送信元や送信先の名前が 1 つ以上のアドレスに解決された場合は、このコマンドは失敗する。ルール番号は 1 からはじまる。
- -L, --list [ chain]
-
選択されたチェインにある全てのルールを一覧表示する。チェインが指定されない場合、全てのチェインにあるリストが一覧表示される。他の各 iptables コマンドと同様に、指定されたテーブル (デフォルトは filter) に対して作用する。よって mangle ルールを表示するには以下のようにする。
ip6tables -t mangle -n -L
DNS の逆引きを避けるために、よく -n オプションと共に使用される。 -Z (ゼロ化) オプションを同時に指定することもできる。この場合、チェインは要素毎にリストされて、 (訳註: パケットカウンタとバイトカウンタが) ゼロにされる。出力表示は同時に与えられた他の引き数に影響される。以下のように、 -v オプションを指定しない限り、実際のルールそのものは表示されない。
ip6tables -L -v
- -F, --flush [ chain]
- 選択されたチェイン (何も指定されなければテーブル内の全てのチェイン) の内容を全消去する。これは全てのルールを 1 個ずつ削除するのと同じである。
- -Z, --zero [ chain]
- すべてのチェインのパケットカウンタとバイトカウンタをゼロにする。クリアされる直前のカウンタを見るために、 -L, --list (一覧表示) オプションと同時に指定することもできる (上記を参照)。
- -N, --new-chain chain
- 指定した名前でユーザー定義チェインを作成する。同じ名前のターゲットが既に存在してはならない。
- -X, --delete-chain [ chain]
- 指定したユーザー定義チェインを削除する。そのチェインが参照されていてはならない。チェインを削除する前に、そのチェインを参照しているルールを削除するか置き換えるかしなければならない。引き数が与えられない場合、テーブルにあるチェインのうち組み込み済みチェインでないものを全て削除する。
- -P, --policy chain target
- チェインのポリシーを指定したターゲットに設定する。指定可能なターゲットは「 ターゲット」の章を参照すること。 (ユーザー定義ではない) 組み込み済みチェインにしかポリシーは設定できない。また、組み込み済みチェインもユーザー定義チェインもポリシーのターゲットに設定することはできない。
- -E, --rename-chain old-chain new-chain
- ユーザー定義チェインを指定した名前に変更する。これは見た目だけの変更なので、テーブルの構造には何も影響しない。
- -h
- ヘルプ。 (今のところはとても簡単な) コマンド書式の説明を表示する。
パラメータ
以下のパラメータは (add, delete, insert, replace, append コマンドで用いられて) ルールの仕様を決める。- -p, --protocol [!] protocol
- ルールで使われるプロトコル、またはチェックされるパケットのプロトコル。指定できるプロトコルは、 tcp, udp, ipv6-icmp|icmpv6, all のいずれか 1 つか、数値である。数値は、これらのプロトコルの 1 つ、もしくは別のプロトコルを表す。 /etc/protocols にあるプロトコル名も指定できる。プロトコルの前に "!"を置くと、そのプロトコルを指定しないという意味になる。数値 0 は all と等しい。プロトコル all は全てのプロトコルとマッチし、このオプションが省略された際のデフォルトである。
- -s, --source [!] address[/ mask]
- 送信元の指定。 address はホスト名 (DNS のようなリモートへの問い合わせで解決する名前を指定するのは非常に良くない)・ネットワーク IPv6 アドレス (/mask を指定する)・通常の IPv6 アドレス (今のところ、ネットワーク名はサポートされていない)、のいずれかである。 mask はネットワークマスクか、ネットワークマスクの左側にある 1 の数を指定する数値である。つまり、 64 という mask は ffff:ffff:ffff:ffff:0000:0000:0000:0000 に等しい。アドレス指定の前に "!"を置くと、そのアドレスを除外するという意味になる。フラグ --src は、このオプションの別名である。
- -d, --destination [!] address[/ mask]
- 送信先の指定。書式の詳しい説明については、 -s (送信元) フラグの説明を参照すること。フラグ --dst は、このオプションの別名である。
- -j, --jump target
- ルールのターゲット、つまり、パケットがマッチした場合にどうするかを指定する。ターゲットはユーザー定義チェイン (そのルール自身が入っているチェイン以外) でも、パケットの行方を即時に決定する特別な組み込み済みターゲットでも、拡張されたターゲット (以下の「 ターゲットの拡張」を参照) でもよい。このオプションがルールの中で省略された場合、ルールにマッチしてもパケットの行方に何も影響しないが、ルールのカウンタは 1 つ加算される。
- -i, --in-interface [!] name
- パケットを受信することになるインターフェース名 ( INPUT, FORWARD, PREROUTING チェインに入るパケットのみ)。インターフェース名の前に "!"を置くと、そのインターフェースを除外するという意味になる。インターフェース名が "+"で終っている場合、その名前で始まる任意のインターフェース名にマッチする。このオプションが省略された場合、任意のインターフェース名にマッチする。
- -o, --out-interface [!] name
- ( FORWARD, OUTPUT チェインに入る) パケットを送信するインターフェース名。インターフェース名の前に "!"を置くと、そのインターフェースを除外するという意味になる。インターフェース名が "+"で終っている場合、その名前で始まる任意のインターフェース名にマッチする。このオプションが省略された場合、任意のインターフェース名にマッチする。
- -c, --set-counters PKTS BYTES
- このオプションを使うと、 ( insert, append, replace 操作において) 管理者はパケットカウンタとバイトカウンタを初期化することができる。
その他のオプション
その他に以下のオプションを指定することができる:- -v, --verbose
- 詳細な出力を行う。 list コマンドの際に、インターフェース名・ (もしあれば) ルールのオプション・TOS マスクを表示させる。パケットとバイトカウンタも表示される。添字 'K', 'M', 'G' は、それぞれ 1000, 1,000,000, 1,000,000,000 倍を表す (これを変更する -x フラグも見よ)。このオプションを append, insert, delete, replace コマンドに適用すると、ルールについての詳細な情報を表示する。
- -n, --numeric
- 数値による出力を行う。 IP アドレスやポート番号を数値によるフォーマットで表示する。デフォルトでは、iptables は (可能であれば) これらの情報をホスト名・ネットワーク名・サービス名で表示しようとする。
- -x, --exact
- 厳密な数値で表示する。パケットカウンタとバイトカウンタを、 K (1000 の何倍か)・M (1000K の何倍か)・G (1000M の何倍か) ではなく、厳密な値で表示する。このオプションは、 -L コマンドとしか関係しない。
- --line-numbers
- ルールを一覧表示する際、そのルールがチェインのどの位置にあるかを表す行番号を各行の始めに付加する。
- --modprobe=command
- チェインにルールを追加または挿入する際に、 (ターゲットやマッチングの拡張などで) 必要なモジュールをロードするために使う command を指定する。
マッチングの拡張
ip6tables は拡張されたパケットマッチングモジュールを使うことができる。これらのモジュールは 2 種類の方法でロードされる: モジュールは、 -p または --protocol で暗黙のうちに指定されるか、 -m または --match の後にモジュール名を続けて指定される。これらのモジュールの後ろには、モジュールに応じて他のいろいろなコマンドラインオプションを指定することができる。複数の拡張マッチングモジュールを 1 行で指定することができる。また、モジュールに特有のヘルプを表示させるためには、モジュールを指定した後で -h または --help を指定すればよい。tcp
これらの拡張は `--protocol tcp' が指定され場合にロードされ、以下のオプションが提供される:- --source-port [!] port[: port]
- 送信元ポートまたはポート範囲の指定。サービス名またはポート番号を指定できる。 port: port という形式で、2 つの番号を含む範囲を指定することもできる。最初のポートを省略した場合、"0"を仮定する。最後のポートを省略した場合、"65535"を仮定する。最初のポートが最後のポートより大きい場合、2 つは入れ換えられる。フラグ --sport は、このオプションの便利な別名である。
- --destination-port [!] port[: port]
- 送信先ポートまたはポート範囲の指定。フラグ --dport は、このオプションの便利な別名である。
- --tcp-flags [!] mask comp
-
TCP フラグが指定されたものと等しい場合にマッチする。第 1 引き数は評価対象とするフラグで、コンマ区切りのリストである。第 2 引き数は必ず設定しなければならないフラグで、コンマ区切りのリストである。指定できるフラグは
SYN ACK FIN RST URG PSH ALL NONE である。よって、コマンド
ip6tables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
は、SYN フラグが設定され ACK, FIN, RST フラグが設定されていないパケットにのみマッチする。
- [!] --syn
- SYN ビットが設定され ACK と RST ビットがクリアされている TCP パケットにのみマッチする。このようなパケットは TCP 接続の開始要求に使われる。例えば、あるインターフェースに入ってくるこのようなパケットをブロックすれば、内側への TCP 接続は禁止されるが、外側への TCP 接続には影響しない。これは --tcp-flags SYN,RST,ACK SYN と等しい。 "--syn"の前に "!"フラグを置くと、 SYN ビットがクリアされ ACK と RST ビットが設定されている TCP パケットにのみマッチする。
- --tcp-option [!] number
- TCP オプションが設定されている場合にマッチする。
udp
これらの拡張は `--protocol udp' が指定された場合にロードされ、以下のオプションが提供される:- --source-port [!] port[: port]
- 送信元ポートまたはポート範囲の指定。詳細は TCP 拡張の --source-port オプションの説明を参照すること。
- --destination-port [!] port[: port]
- 送信先ポートまたはポート範囲の指定。詳細は TCP 拡張の --destination-port オプションの説明を参照すること。
ipv6-icmp
これらの拡張は `--protocol ipv6-icmp' または `--protocol icmpv6' が指定された場合にロードされ、以下のオプションが提供される:- --icmpv6-type [!] typename
-
ICMP タイプを指定できる。タイプ指定には、数値の IPv6-ICMP タイプ、または以下のコマンドで表示される IPv6-ICMP タイプ名を使用できる。
ip6tables -p ipv6-icmp -h
mac
- --mac-source [!] address
- 送信元 MAC アドレスにマッチする。 address は XX:XX:XX:XX:XX:XX という形式でなければならない。イーサーネットデバイスから入ってくるパケットで、 PREROUTING, FORWARD, INPUT チェインに入るパケットにしか意味がない。
limit
このモジュールは、トークンバケツフィルタを使い、単位時間あたり制限された回数だけマッチする。この拡張を使ったルールは、(`!' フラグが指定されない限り) 制限に達するまでマッチする。例えば、このモジュールはログ記録を制限するために LOG ターゲットと組み合わせて使うことができる。- --limit rate
- 単位時間あたりの平均マッチ回数の最大値。数値で指定され、添字 `/second', `/minute', `/hour', `/day' を付けることもできる。デフォルトは 3/hour である。
- --limit-burst number
- パケットがマッチする回数の最大初期値: 上のオプションで指定した制限に達しなければ、その度ごとに、この数値になるまで 1 個ずつ増やされる。デフォルトは 5 である。
multiport
このモジュールは送信元や送信先のポートの集合にマッチする。ポートは 15 個まで指定できる。このモジュールは -p tcp または -p udp と組み合わせて使うことしかできない。- --source-ports port[, port[, port...]]
- 送信元ポートが指定されたポートのうちのいずれかであればマッチする。フラグ --sports は、このオプションの便利な別名である。
- --destination-ports port[, port[, port...]]
- 宛先ポートが指定されたポートのうちのいずれかであればマッチする。フラグ --dports は、このオプションの便利な別名である。
- --ports port[, port[, port...]]
- 送信元ポートと宛先ポートが等しく、かつそのポートが指定されたポートのうちのいずれかであればマッチする。
mark
このモジュールはパケットに関連づけられた netfilter の mark フィールドにマッチする (このフィールドは、以下の MARK ターゲットで設定される)。- --mark value[/ mask]
- 指定された符号なし mark 値のパケットにマッチする (mask が指定されると、比較の前に mask との論理積 (AND) がとられる)。
owner
このモジュールは、ローカルで生成されたパケットに付いて、パケット生成者のいろいろな特性とのマッチングをとる。これは OUTPUT チェインのみでしか有効でない。また、(ICMP ping 応答のような) パケットは、所有者がいないので絶対にマッチしない。これは実験的なものという扱いである。- --uid-owner userid
- 指定された実効ユーザー ID のプロセスによりパケットが生成されている場合にマッチする。
- --gid-owner groupid
- 指定された実効グループ ID のプロセスによりパケットが生成されている場合にマッチする。
- --pid-owner processid
- 指定されたプロセス ID のプロセスによりパケットが生成されている場合にマッチする。
- --sid-owner sessionid
- 指定されたセッショングループのプロセスによりパケットが生成されている場合にマッチする。
ターゲットの拡張
iptables は拡張ターゲットモジュールを使うことができる: 以下のものが、標準的なディストリビューションに含まれている。LOG
マッチしたパケットをカーネルログに記録する。このオプションがルールに対して設定されると、 Linux カーネルはマッチしたパケットについての (IPv6 における大部分の IPv6 ヘッダフィールドのような) 何らかの情報をカーネルログに表示する (カーネルログは dmesg または syslogd(8) で見ることができる)。これは「非終了ターゲット」である。すなわち、ルールの検討は、次のルールへと継続される。よって、拒否するパケットをログ記録したければ、同じマッチング判断基準を持つ 2 つのルールを使用し、最初のルールで LOG ターゲットを、次のルールで DROP (または REJECT) ターゲットを指定する。- --log-level level
- ログ記録のレベル (数値て指定するか、(名前で指定する場合は) syslog.conf(5) を参照すること)。
- --log-prefix prefix
- 指定したプレフィックスをログメッセージの前に付ける。プレフィックスは 29 文字までの長さで、ログの中でメッセージを区別するのに役立つ。
- --log-tcp-sequence
- TCP シーケンス番号をログに記録する。ログがユーザーから読める場合、セキュリティ上の危険がある。
- --log-tcp-options
- TCP パケットヘッダのオプションをログに記録する。
- --log-ip-options
- IPv6 パケットヘッダのオプションをログに記録する。
MARK
パケットに関連づけられた netfilter の mark 値を指定する。 mangle テーブルのみで有効である。- --set-mark mark
REJECT
マッチしたパケットの応答としてエラーパケットを送信するために使われる。エラーパケットを送らなければ、 DROP と同じであり、TARGET を終了し、ルールの検討を終了する。このターゲットは、 INPUT, FORWARD, OUTPUT チェインと、これらのチェインから呼ばれるユーザー定義チェインだけで有効である。以下のオプションは、返されるエラーパケットの特性を制御する。- --reject-with type
-
type として指定可能なものは
icmp6-no-route
no-route
icmp6-adm-prohibited
adm-prohibited
icmp6-addr-unreachable
addr-unreach
icmp6-port-unreachable
port-unreach
であり、適切な IPv6-ICMP エラーメッセージを返す ( port-unreach がデフォルトである)。さらに、TCP プロトコルにのみマッチするルールに対して、オプション tcp-reset を使うことができる。このオプションを使うと、TCP RST パケットが送り返される。主として ident (113/tcp) による探査を阻止するのに役立つ。 ident による探査は、壊れている (メールを受け取らない) メールホストにメールが送られる場合に頻繁に起こる。
返り値
いろいろなエラーメッセージが標準エラーに表示される。正しく機能した場合、終了コードは 0 である。不正なコマンドラインパラメータによりエラーが発生した場合は、終了コード 2 が返される。その他のエラーの場合は、終了コード 1 が返される。バグ
バグ? バグって何? ;-) えーと…、sparc64 ではカウンター値が信頼できない。IPCHAINS との互換性
ip6tables は、Rusty Russell の ipchains と非常によく似ている。大きな違いは、チェイン INPUT と OUTPUT が、それぞれローカルホストに入ってくるパケットと、ローカルホストから出されるパケットのみしか調べないという点である。よって、全てのパケットは 3 つあるチェインのうち 1 つしか通らない (ループバックトラフィックは例外で、INPUT と OUTPUT チェインの両方を通る)。以前は (ipchains では)、フォワードされるパケットが 3 つのチェイン全てを通っていた。その他の大きな違いは、 -i で入力インターフェース、 -o で出力インターフェースを指定し、ともに FORWARD チェインに入るパケットに対して指定可能な点である。 ip6tables では、その他にもいくつかの変更がある。
関連項目
ip6tables-save(8), ip6tables-restore(8), iptables(8), iptables-save(8), iptables-restore(8).パケットフィルタリングについての詳細な iptables の使用法を説明している packet-filtering-HOWTO。 NAT について詳細に説明している NAT-HOWTO。標準的な配布には含まれない拡張の詳細を説明している netfilter-extensions-HOWTO。内部構造について詳細に説明している netfilter-hacking-HOWTO。
http://www.netfilter.org/ を参照。
作者
Rusty Russell は、初期の段階で Michael Neuling に相談して iptables を書いた。Marc Boucher は Rusty に iptables の一般的なパケット選択の考え方を勧めて、 ipnatctl を止めさせた。そして、mangle テーブル・所有者マッチング・ mark 機能を書き、いたるところで使われている素晴らしいコードを書いた。
James Morris が TOS ターゲットと tos マッチングを書いた。
Jozsef Kadlecsik が REJECT ターゲットを書いた。
Harald Welte が ULOG ターゲット・TTL マッチングと TTL ターゲット・ libipulog を書いた。
Netfilter コアチームは、Marc Boucher, Martin Josefsson, Jozsef Kadlecsik, James Morris, Harald Welte, Rusty Russell である。
ip6tables の man ページは、Andras Kis-Szabo によって作成された。これは Herve Eychenne <rv@wallfire.org>によって書かれた iptables の man ページを元にしている。
March 9, 2002 |