16.3. iptablesコマンドで使用するオプション

カーネルがパケットをフィルタできるようにする規則は、iptablesコマンドを 実行することで有効になります。iptablesコマンドを実行する時には以下のオプションを 指定します:

現行のiptables規則と共に使用されるオプションは、規則を有効にする為に 規則全体の目的と条件を元にして論理的にグループ化する必要があります。

16.3.1. テーブル

iptablesの強力な特徴として、複数のテーブルを使用して、特定のパケットの行方を決定できます。 iptablesの柔軟性のお蔭で、特定の目的に合わせてテーブルを作成して、それを /lib/modules/<kernel-version>/kernel/net/ipv4/netfilter/ ディレクトリの中に保存できます。この<kernel-version>とは カーネルのバージョン番号のことです。

デフォルトのテーブルはfilterという名前で、標準的なINPUT、OUTPUT、FORWARDの 各チェーンが組み込まれています。これは、ipchainsで使用する標準的なチェーンと 少し似ています。しかし、iptablesには、特別なパケットフィルタリング作業を行う 2つのテーブルがデフォルトで追加されています。natテーブルを使用するとパケットに 記録されている送信元と送信先のアドレスを変更することができ、mangleテーブルを使用すると 特別な方法でパケットを変更することができます。

各テーブルにはテーブルの目的に基づいて必要な作業を行うデフォルトのチェーンが含まれていますが、 どのテーブルにも新しいチェーンを追加することが出来ます。

16.3.2. 構造

多くのiptablesコマンドの構造は、次のようになります。

iptables [-t <table-name>] <command> <chain-name> <parameter-1> \
         <option-1> <parameter-n> <option-n>

この例では、<table-name>オプションによって デフォルトのfilterテーブル以外のテーブルを使用できます。 <command>オプションは、 <chain-name>オプションで指定される規則の追加あるいは削除など、実行する 特定の作業を指示します。<chain-name>以降にあるのは パラメータとオプションのペアで、パケットが規則に適合した場合に起こることを定義します。

iptablesコマンドの構造を見てみると、他の殆どのコマンドとは異なり、 iptablesコマンドの長さと複雑性はその目的に基づいて変更出来ることを 認識しておくことが大切です。チェーンから規則の1つを削除する簡単なコマンドは、とても 短くできますが、特定のサブネットから送信され特定のパラメータとオプションを使用する パケットをフィルタするように設計したコマンドは、かなり長くなります。iptables コマンドを作成する時、幾つかのパラメータとオプションは、さらに以前のオプションの 要求を指定するために、他のパラメータとオプションを必要とする可能性があることを認識して おくとよいでしょう。有効な規則を構成するには、他のオプションセットを要求するパラメータと オプションがすべて満足されるまで継続する必要があります。

iptables -hと入力すると、iptablesコマンドの構造の総合的な一覧が表示されます。

16.3.3. コマンド

コマンドでは、iptablesが行う特定の動作を指定します。1つの iptablesコマンド文字列について指定できるのは、1つのコマンドだけです。 ヘルプコマンドを除くすべてのコマンドは、大文字で入力します。

iptablesのコマンドには、次のようなものがあります:

16.3.4. パラメータ

特定のチェーンにおける規則の追加、削除、挿入、交換などの規則を含む一定のiptablesコマンドを 指定すると、パケットフィルタリング規則を構築するためのパラメータが必要になります。

16.3.5. 比較オプション

異なるネットワークプロトコルは、特別な比較オプションを用意して、 そのプロトコルを使用して特定のパケットと一致するように特殊な設定をします。 もちろん、このプロトコルは最初に、-p tcp <protocol-name>を使用して iptablesコマンドの中に指定しておき(ここで <protocol-name>はターゲット プロトコルです。)、そのプロトコル用のオプションを利用できるように する必要があります。

16.3.5.1. TCPプロトコル

TCPプロトコル(-p tcp)では、以下の比較オプションを使用できます。

  • --dport — パケットの送信先ポートを設定します。ネットワークサービス名 (wwwsmtpなど)、ポート番号、ポート番号の範囲のいずれかを 使用できます。ネットワークサービスの名前や、エイリアスとそのネットワークサービスが使用する ポート番号を閲覧するには、/etc/servicesファイルを参照してください。 --destination-portの比較オプションは、--dportと同義と なります。

    ポート番号の範囲を指定するには、-p tcp --dport 3000:3200のように2つの番号を コロン(:)で区切ります。最大の有効範囲は、0:65535です。

    また、--dportオプションの後で感嘆符(!)をフラグとして使用すると、 iptablesに対してそのネットワークサービスか、あるいはポートを使用しないすべての パケットを比較するように指定できます。

  • --sport--dportと同じオプションを使用して、パケットの 送信元ポートを設定します。--source-portの比較オプションは--sportと 同義です。

  • --syn—一般にSYNパケットと呼ばれる、通信を開始するよう設計された すべてのTCPパケットを規則の対象にします。データを伝送するパケットは影響を受けません。--syn オプションの後で感嘆符(!)をフラグとして使用すると、SYNパケット以外のすべてのパケットが対象になります。

  • --tcp-flags — 特定のビット(フラグ)を持つTCPパケットを規則と比較される様にします。 --tcp-flagsの比較オプションは2つのパラメータを受け付けます。1番目のパラメータはマスクで、 パケット内でフラグが検査できるようにします。2番目のパラメータでは、一致するように設定する必要のあるフラグを 指定します。

    使用できるフラグは以下のようになります:

    • ACK

    • FIN

    • PSH

    • RST

    • SYN

    • URG

    • ALL

    • NONE

    たとえば、-p tcp --tcp-flags ACK,FIN,SYN SYNと指定すると、SYNフラグが設定されていてACKフラグとFINフラグは設定されていないTCPパケットのみが規則を満たします。

    感嘆符(!)を--tcp-flagsの後で使用すると、比較オプションの 対応が逆転されます。

  • --tcp-option—特定のパケットで設定できるTCP特有のオプションを比較しようとします。感嘆符(!)を使用すると、意味を反対にすることができます。

16.3.5.2. UDPプロトコル

UDPプロトコル(-p udp)では、以下のオプションを使用できます。

  • --dport — サービス名、ポート番号、ポート番号の範囲のどれかを使用して、 UDPパケットの送信先ポートを指定します。--destination-portの比較オプションは --dportと同義となります。このオプションのさまざまな使用法については、 項16.3.5.1--dport比較オプションを 参照してください。

  • --sport — サービス名、ポート番号、ポート番号の範囲のどれかを使用して、 UDPパケットの送信元ポートを指定します。--source-portの比較オプションと同義です。 このオプションのさまざまな使用法については、項16.3.5.1--sport比較オプションを参照してください。

16.3.5.3. ICMPプロトコル

ICMP(Internet Control Message Protocol)を使用するパケットの場合(-p icmp)、 次のオプションを使用して比較を行うことができます:

  • --icmp-type—規則を満たすICMPタイプの番号か名前を設定します。有効なICMP名の一覧は、iptables -p icmp -hというコマンドを実行すると表示されます。

16.3.5.4. その他の比較オプションがあるモジュール

その他の比較オプションもiptablesコマンドによってロードされる モジュールで利用できます。比較オプションモジュールを使用するには、-m <module-name> などの-mオプションを 使用して、名前の指定でモジュールをロードする必要があります(<module-name>は モジュールの名前で入れ換えます)。

デフォルトで多数のモジュールを使用することができます。ユーザー独自のモジュールを作成して、 新しい比較オプションを使用することもできます。

多くのモジュールがありますが、ここではよく使用されるモジュールのみを説明します。

  • limitモジュール — この使用により特定の規則を満たすパケットの数を制限できます。 大量の一致パケットが同じメッセージでログを一杯にしたりシステムのリソースを無駄に使用することがないように して、規則の一致をログする時に特に便利です。

    limitモジュールは以下のようなオプションを有効にします:

    • --limit—特定の時間帯に比較する回数を設定します。<number>/<time>という形式で回数と時間を指定します。たとえば、--limit 5/hourと指定すると、1時間に5回だけ規則が比較されます。

      回数と時間を指定しない場合は、デフォルト値の3/hourが使用されます。

    • --limit-burst—同時に比較できるパケットの数を制限します。このオプションは、--limitオプションとともに使用してください。このオプションでは、同時に比較できるパケットの最大数を指定します。

      値を指定しない場合、5つのパケットだけが規則を満たすことができます。

  • stateモジュール — 接続状態について比較を有効にします。

    stateモジュールは以下のようなオプションを有効にします:

    • --state — 以下の接続状態についてパケットを比較します:

      • ESTABLISHED—確立された接続内にある他のパケットに関係があるパケットが規則を満たします。

      • INVALID—既知の接続に結び付けられないパケットが規則を満たします。

      • NEW—新しい接続を作成しているパケットか、あるいはそれまでになかった双方向接続の一部となっているパケットが規則を満たします。

      • RELATED—既存の接続と何らかの関係がある新しい接続を開始するパケットが規則を満たします。

      これらの接続状態を複数組み合わせて使用するには、-m state --state INVALID,NEWのようにカンマで区切ります。

  • macモジュール — ハードウェアMACアドレスの比較を有効にします。

    macモジュールは以下のようなモジュールを有効にします:

    • --mac-source — パケットの送信元であるネットワークインターフェイスカードの MACアドレスを比較します。この規則からMACアドレスを除外するには、--mac-source比較 オプションの後に感嘆符(!)を付けます。

他のモジュールで使用できる比較オプションを確認するには、 iptablesの manページを参照して下さい。

16.3.6. ターゲットオプション

パケットが特定の規則を満たすと、規則はそのパケットのさまざまな行方を決定し場合によっては追加動作を させることも可能です。各チェーンにはデフォルトのターゲットがあり、そのチェーンの規則を満たすパケットが ない場合か、あるいはパケットが満たした規則のいずれもがターゲットを指定していない場合に使用されます。

標準(デフォルト)のターゲットには以下のようなものがあります:

これらの標準ターゲットのほかに、「ターゲットモジュール」と呼ばれる拡張機能で各種のターゲットを使用できます。比較オプションモジュールの詳細については、項16.3.5.4を参照してください。

多くの拡張ターゲットモジュールがありますが、ほとんどは特定のテーブルか状況のみに適用されます。デフォルトでRed Hat Linuxに含まれているターゲットモジュールでよく使用されるものには、次のようなものがあります:

natテーブルを使用したIPマスカレード、又はmangleテーブルを使用した パケット変更で役にたつものなど、その他のターゲット拡張の幾つかは、iptablesの manページを参照してください。

16.3.7. リストオプション

デフォルトのリストコマンドiptables -Lは、デフォルトのフィルタテーブルの現在の チェーンについて非常に基本的な概要情報を提供します。追加のオプションは更に詳細情報を提供します: