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