48.9. iptables
Red Hat Enterprise Linux には、ネットワーク パケットフィルターリング の高度なツールが含まれています。これは、カーネル内のネットワークスタックの開始、移動、終了時にネットワークパケットを制御するプロセスです。2.4 より前のバージョンは、パケットのフィルターリングと、フィルターリングプロセスの各ステップでパケットに適用されるルールの一覧を ipchains に依存していました。2.4 カーネルには、ipchains と似た iptables ( netfilterとも呼ばれる)が導入されましたが、ネットワークパケットのフィルターリングに使用できる範囲と制御が大幅に拡張されました。
本章では、パケットフィルターリングの基本について重点を置いて、ipchains と iptables の違いを定義します。また、iptables コマンドで使用できるさまざまなオプションについて説明し、システムの再起動後もフィルターリングルールを保持する方法を説明します。
iptables ルールを作成し、これらのルールに基づいてファイアウォールを設定する方法については、「関連情報」 を参照してください。
Warning
2.4 以降のカーネルのデフォルトのファイアウォールメカニズムは iptables ですが、ipchains がすでに実行されている場合は iptables を使用することはできません。起動時に ipchains が存在する場合は、カーネルがエラーを発行し、iptables の起動に失敗します。
ipchains の機能は、これらのエラーによる影響を受けません。
48.9.1. パケットフィルターリング
Linux カーネルは kcontext 機能 を 使用してパケットをフィルターリングし、システムで受信または通過できるようにします。この機能は Linux カーネルに組み込まれており、以下のように 3 つの組み込み テーブル または ルールリスト があります。
filter
: ネットワークパケットを処理するデフォルトのテーブル。NAT
- 新しい接続を作成し、ネットワークアドレス変換 (NAT)に使用されるパケットを変更するために使用されます。mangle
- 特定のタイプのパケット変更に使用されます。
各テーブルには、netfilter によってパケット で 実行されるアクションに対応する組み込みチェーン のグループがあります。
filter
テーブルの組み込みチェーンは次のとおりです。
- INPUT: ホストの対象となるネットワークパケットに適用されます。
- OUTPUT: ローカルで生成されたネットワークパケットに適用されます。
- FORWARD: ホスト経由でルーティングされるネットワークパケットに適用されます。
nat
テーブルの組み込みチェーンは以下のとおりです。
- PREROUTING - ネットワークパケットが到達するとそのパケットを変更します。
- OUTPUT: ローカルで生成されたネットワークパケットが送信される前に変更します。
- POSTROUTING - ネットワークパケットが送信される前に変更します。
mangle
テーブルの組み込みチェーンは次のとおりです。
- INPUT: ホストの対象となるネットワークパケットを変更します。
- OUTPUT: ローカルで生成されたネットワークパケットが送信される前に変更します。
- FORWARD - ホストを介してルーティングされるネットワークパケットを変更します。
- PREROUTING - 着信ネットワークパケットがルーティングされる前に、それらを変更します。
- POSTROUTING - ネットワークパケットが送信される前に変更します。
Linux システムによって受信または送信されたすべてのネットワークパケットは、少なくとも 1 つのテーブルの対象となります。ただし、パケットはチェーンの最後に検出される前に、各テーブル内の複数のルールの対象となる場合があります。これらのルールの構造や目的は異なる場合がありますが、特定のプロトコルやネットワークサービスを使用する場合、通常は特定の IP アドレスまたは特定の IP アドレス、または一連のアドレスから送信されるパケットを特定したいと思われます。
注記
デフォルトでは、ファイアウォールルールは
/etc/sysconfig/iptables
ファイルまたは /etc/sysconfig/ip6tables
ファイルに保存されます。
iptables サービスは、Linux システムの起動時に DNS 関連のサービスの前に起動します。つまり、ファイアウォールルールは数値の IP アドレス(例:192.168.0.1)のみを参照できます。このようなルールのドメイン名(例:host.example.com)はエラーを生成します。
宛先に関係なく、パケットがテーブルの 1 つにある特定のルールに一致すると、ターゲット またはアクションが適用されます。ルールが一致するパケットに ACCEPT ターゲットを指定する場合、パケットは残りのルールチェックをスキップし、宛先に進むことができます。ルールが DROP ターゲットを指定する場合、そのパケットはシステムへのアクセスを拒否し、パケットを送信したホストに返送されません。ルールで QUEUE ターゲットが指定されている場合、パケットはユーザー空間に渡されます。ルールでオプションの REJECT ターゲットが指定されている場合、パケットは破棄されますが、エラーパケットがパケットの送信元に送信されます。
すべてのチェーンには、ACCEPT、DROP、REJECT、または QUEUE のデフォルトポリシーがあります。チェーン内のどのルールもパケットに適用されない場合、パケットはデフォルトのポリシーに従って処理されます。
iptables コマンドはこれらのテーブルを設定し、必要に応じて新しいテーブルを設定します。