IP6TABLES(8)

名前
ip6tables - IPv6 パケットフィルタを管理する

書式
ip6tables [-t テーブル] -[AD] チェイン ルールの詳細 [オプション]
ip6tables [-t テーブル] -I チェイン [ルール番号] ルールの詳細 [オプション]
ip6tables [-t テーブル] -R チェイン ルール番号 ルールの詳細 [オプション]
ip6tables [-t テーブル] -D チェイン ルール番号 [オプション]
ip6tables [-t テーブル] -[LFZ] [チェイン] [オプション]
ip6tables [-t テーブル] -N チェイン
ip6tables [-t テーブル] -X [チェイン]
ip6tables [-t テーブル] -P チェイン ターゲット [オプション]
ip6tables [-t テーブル] -E 旧チェイン名 新チェイン名

説明
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 ページを元にしている。