2.8.9. iptables
Red Hat Enterprise Linux に含まれるのは、ネットワークパケットフィルタリングの高度なツールです。これは、カーネル内でネットワークスタックを入力、移動、および終了する際にネットワークパケット を制御するプロセスです。2.4 よりも前のバージョンのカーネルは、パケットフィルタリングに依存し、フィルタリングプロセスの各ステップで ipchains パケットに適用されるルールの一覧を使用していました。2.4 カーネルが導入された( netfilterと iptables も呼ばれます)。これはと似ています ipchains が、ネットワークパケットのフィルタリングに使用できる範囲と制御が大きくなります。
本章では、パケットフィルタリングの基本を説明します。また、iptables コマンドで利用可能なさまざまなオプションを説明します。また、システムの再起動間でルールをどのように保持できるかについて説明します。
重要
2.4 以降のカーネルにおけるデフォルトのファイアウォールメカニズムはですが iptables、がすでに実行している場合 ipchains は使用 iptables できません。システムの起動時に ipchains が存在する場合、カーネルはエラーを発行し、起動に失敗し iptablesます。
の機能はこれらのエラーの影響を受け ipchains ません。
2.8.9.1. パケットのフィルタリング
Linux カーネルは Netfilter 機能を使用してパケットをフィルターし、それらの一部はシステム上で受信または通過でき、その他の停止中にシステムを通過できます。この機能は Linux カーネルに構築され、以下のように 5 つの組み込み テーブル または ルール一覧 を持ちます。
filter
: ネットワークパケットを処理するデフォルトの表。nat
: 新しい接続を作成し、ネットワークアドレス変換 (NAT)に使用するパケットを変更するために使用されます。mangle
: 特定のタイプのパケット変更に使用されます。raw
: 主に NOTRACK ターゲットと組み合わせて接続追跡からの除外を設定するために使用されます。security
: SECMARK および CONNSECMARK ターゲットにより有効になっているなど、MAC(Mandatory Access Control)ネットワークルールに使用されます。
各テーブルには組み込みチェーンのグループがあり 、 これはでパケットで実行されるアクションに対応し netfilterます。
filter
テーブルの組み込みチェーンは以下のとおりです。
- INPUT - ホスト用のターゲットとなるネットワークパケットに適用されます。
- OUTPUT: ローカルに生成されるネットワークパケットに適用されます。
- FORWARD: ホスト経由でルーティングされるネットワークパケットに適用されます。
nat
テーブルの組み込みチェーンは以下のとおりです。
- PREROUTING: 受信時にネットワークパケットに適用されます。
- OUTPUT: ローカルに生成されるネットワークパケットの送信前に適用されます。
- POSTROUTING - 送信前にネットワークパケットに適用されます。
mangle
テーブルの組み込みチェーンは以下のとおりです。
- INPUT - ホストターゲットのネットワークパケットに適用されます。
- OUTPUT: ローカルに生成されるネットワークパケットの送信前に適用されます。
- FORWARD: ホスト経由でルーティングされるネットワークパケットに適用されます。
- PREROUTING: ルーティングの前に着信ネットワークパケットを適用します。
- POSTROUTING - 送信前にネットワークパケットに適用されます。
raw
テーブルの組み込みチェーンは以下のとおりです。
- OUTPUT: ローカルに生成されるネットワークパケットの送信前に適用されます。
- PREROUTING: ルーティングの前に着信ネットワークパケットを適用します。
security
テーブルの組み込みチェーンは以下のとおりです。
- INPUT - ホストターゲットのネットワークパケットに適用されます。
- OUTPUT: ローカルに生成されるネットワークパケットの送信前に適用されます。
- FORWARD: ホスト経由でルーティングされるネットワークパケットに適用されます。
Linux システムから送受信したネットワークパケットはすべて、少なくとも 1 つのテーブルを持ちます。ただし、パケットは、チェーンの最後で変わる前に、各テーブル内の複数のルールが適用される場合があります。これらのルールの構造と目的は異なる場合がありますが、特定のプロトコルとネットワークサービスを使用する場合に、通常は特定の IP アドレスまたはアドレスのセットから送信されるパケットの特定を試みます。以下の図は、iptables サブシステムによりパケットのフローがどのように調査されるかを示しています。
図2.6 IPTable でのパケットフィルタリング
[D]
重要
デフォルトでは、ファイアウォールルールは
/etc/sysconfig/iptables
または /etc/sysconfig/ip6tables
ファイルに保存されます。
この iptables サービスは、Linux システムが起動したときに DNS 関連のサービスの前に起動します。これは、ファイアウォールルールが数値の IP アドレスのみを参照できることを意味します(例: 192.168.0.1)。このようなルールのドメイン名(例: host.example.com)によりエラーが生じます。
あるテーブルでパケットが特定のルールと一致する場合、宛先に関係なく ターゲット またはアクションが適用されます。ルールが一致するパケットの ACCEPT ターゲットを指定する場合、パケットは残りのルールチェックを省略し、宛先の継続が許可されます。ルールが DROP ターゲットを指定した場合、そのパケットはシステムへのアクセスを拒否し、パケットを送信したホストに何も送信されません。ルールが QUEUE ターゲットを指定する場合、パケットはユーザー空間に渡されます。ルールがオプションの REJECT ターゲットを指定する場合、パケットは破棄されますが、エラーパケットはパケットのオリジンに送信されます。
すべてのチェーンには ACCEPT、、、DROP REJECT、またはのデフォルトポリシーがあり QUEUEます。チェーン内のルールがパケットに適用されない場合、パケットはデフォルトポリシーに従って処理されます。
iptables コマンドはこれらのテーブルを設定し、必要に応じて新しいテーブルを設定します。
注記
netfilter モジュールは、デフォルトではロードされません。したがって、すでに使用されているか、または読み込み済みのものだけを示すため、ユーザーは
/proc/
ディレクトリーを検索してそれらのすべてを表示しません。つまり、netfilter の機能の使用前に利用可能な機能を確認することはできません。