9.3. コマンド

このセクションでは、いろいろなコマンドとその使用目的を取り扱う。コマンドは、パーサに読み込まれたルールの後続部分をどう処すべきかを、 iptables に伝える。通常、テーブルなどに対して何かを追加あるいは削除する操作を指令する。 iptables では以下のコマンドが利用可能だ:

Table 9-2. コマンド

コマンド-A, --append
iptables -A INPUT ...
説明チェーンの最後尾にルールを追加する。つまり、このコマンドでは必ずルールセットの最後尾にそのルールが追加され、さらにルールを追加しない限り、テストの順位も最後となる。
コマンド-D, --delete
iptables -D INPUT --dport 80 -j DROP, iptables -D INPUT 1
説明ひとつのルールをチェーンから削除する。これには書き方が 2種類ある。合致すべきルールの全文を示す (最初の例) か、ルールナンバーで指定するかだ。前者を使用する場合、記述する定義と、チェーンにおけるエントリは、正確に一致していなくてはならない。後者では、削除したいルールのナンバーを一致させればよい。ルールのナンバーはチェーン毎に頭から振られ、1 から始まる。
コマンド-R, --replace
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
説明指定した行にある既存のルールを置き換える。 --delete コマンドと同じ動作を行うが、ただ単にそのエントリを削除するだけでなく、それを新たなエントリで置き換える。 iptables の組み立てを思考錯誤している最中に利用する機会が多いだろう。
コマンド-I, --insert
iptables -I INPUT 1 --dport 80 -j ACCEPT
説明チェーンの中途にルールを挿入する。ルールはナンバーで指定した箇所に割り込む。つまり、上記の例は INPUT チェーンの 1 番目にルールを挿入し、結果としてそのルールがチェーンの最初のルールとなる。
コマンド-L, --list
iptables -L INPUT
説明このコマンドは指定したチェーンのすべてのエントリをリストアップする。上記の場合 INPUT チェーンのエントリすべてを列挙する。チェーンをまったく指定しないやり方も反則ではなく、この場合には、所定のテーブル内にあるすべてのチェーンの内容をリストアップする (テーブルの指定方法は テーブル セクションを参照)。出力の詳細はパーサに与える -n-v などといったオプションによって変わる。
コマンド-F, --flush
iptables -F INPUT
説明このコマンドは指定したチェーンからすべてのルールをフラッシングする。ルールをひとつずつ削除していくのと意味は同じだが、こちらのほうがてきめんに迅速だ。このコマンドにオプションは必要なく、所定のテーブル内に存在するチェーンの全ルールがを削除される。
コマンド-Z, --zero
iptables -Z INPUT
説明このコマンドは指定したチェーンまたは全チェーンにおける、全カウンタをゼロに戻すよう iptables に命令する。 -L コマンドで -v オプションを使うと各フィールドの頭にパケットカウンタがつくのを憶えているだろう。このパケットカウンタをゼロリセットしたいときに使うのが -Z だ。 -Z はルールのリストアップこそしないが、 -L と同様の動作を行う。 -L-Z を同時に用いた場合 (これも反則ではない)、まずチェーンがリストアップされ、その後パケットカウンタがゼロリセットされる。
コマンド-N, --new-chain
iptables -N allowed
説明このコマンドは、指定したテーブルに指定した名称の新しいチェーンを作成するよう、カーネルに指令する。上の例では allowed という名のチェーンを作成している。既に同名のチェーンやターゲットが存在してはならないという点に注意しなければならない。
コマンド-X, --delete-chain
iptables -X allowed
説明指定したチェーンをテーブルから削除する。このコマンドが成功するには、削除対象になるチェーンを参照しているルールが存在してはならない。つまり、チェーンを削除するには、前もって、そのチェーンを参照しているルールすべてを置換または削除しておく必要がある。このコマンドをオプションなしで使用した時には、対象のテーブルにあるビルトイン以外のチェーンがすべて削除される。
コマンド-P, --policy
iptables -P INPUT DROP
説明このコマンドは、或るチェーンに対してのデフォルトターゲットつまりポリシーを設定するよう、カーネルに指示する。どのルールにもマッチしなかったパケットは、チェーンに設定されたポリシーに従わせられる。指定可能なターゲットは DROPACCEPT だ (他にもあるかもしれない -- 見つけたらメールしてほしい)。
コマンド-E, --rename-chain
iptables -E allowed disallowed
説明-E コマンドは、第1引数の名前を持つチェーンを、第2引数の名前に改名する。つまり上の例では、チェーンの名前を allowed から disallowed に変えていることになる。これは当該テーブルの振舞いを実質的に変ているわけではない。つまり、テーブルに対する見た目上の変更に過ぎないということに気を付けてほしい。

コマンドラインは必ず、最後まで 1 行で入力しなければならない。でなければ、 iptables のビルトインヘルプかコマンドのバージョンを見せられることになるだろう。バージョンを表示させたいのなら -v オプションがあるし、ヘルプメッセージを出すには -h オプションがある。つまり、とりわけ iptables に限ったオプションではない。次に、コマンド毎に異なるいくつかのオプションを挙げておこう。下記では、どのオプションがどのコマンドで有効で、どう作用するかを解説している。なお、ここで挙げているのは、ルールやマッチに影響しないオプションだけだ。マッチとターゲットについては、このセクションの後半に預けることにしよう。

Table 9-3. オプション

オプション-v, --verbose
利用対象コマンド--list, --append, --insert, --delete, --replace
説明このコマンドは出力を冗長 (verbose) にするために使用され、よく --list コマンドと併用する。 --list コマンドと一緒に使用した場合、インターフェースアドレス、ルールオプション、 TOSマスクも表示される。 --verbose オプション付きの --list コマンドはまた、ルール毎のバイトおよびパケットカウンタも表示する。カウンタには、 K (x 1,000), M (x 1,000,000), G (x 1,000,000,000) の単位記号が適宜使用される。これを避けるには、下記に述べる -x オプションを使う。 --verbose オプションを --append, --insert, --delete, --replace コマンドに使用すると、指示したルールがどう解釈されたかの内容と、挿入などが正常に行われたかどうかといった事柄が表示される。
オプション-x, --exact
利用対象コマンド--list
説明このオプションは数字を展開して見せる。つまり、 --list の出力は K, M, G の単位記号を含まなくなる。問題とするルールにマッチした累計パケット数とバイト数のカウンタ値が、文字通りの数字で表されるのだ。このコマンドは --list コマンドでのみ利用可能で、それ以外どのコマンドにもまったく効き目がないことに注意してほしい。
オプション-n, --numeric
利用対象コマンド--list
説明このオプションは、値を数字で表示するよう iptables に指示する。 IPアドレスとポートナンバーは、ホスト名、ネットワーク名、アプリケーション名などでなく、数字で表現される。これは --list コマンドでのみ有効。デフォルトでは数字とホストは可能な限りリゾルブされるが、それを抑止するのがこのオプションだ。
オプション--line-numbers
利用対象コマンド--list
説明--list コマンドとともに使用し、出力に行番号を表示させる。このオプションを使うと、各ルールが行番号付きで出力される。ルールの挿入時には、ルールのナンバーが分かるとありがたいものだ。このオプションは --list コマンドでしか機能しない。
オプション-c, --set-counters
利用対象コマンド--insert, --append, --replace
説明このオプションは、何らかの形でルールを作成や変更する場面で用いる。その際に、パケットとバイトのカウンタ値を指定の値へと変更できる。書式は --set-counters 20 4000 のようになり、この場合、パケットカウンタを 20 に、バイトカウンタを 4000 にセットするよう、カーネルに指示していることになる。
オプション--modprobe
利用対象コマンドすべて
説明--modprobe オプションは、カーネルに対して、モジュールの探索 (probe) が必要になった時にどのモジュールを使うべきか伝えるのに利用する。これは、 modprobe コマンドがサーチパス外にある場合に活用するとよい。そうしたケースでは、このオプションを使って、必要なモジュールがロードされていない場合にどうすべきかをプログラムに教えてやる必要があるからだ。このオプションはすべてのコマンドで利用可能だ。