2.8.9. IPTables

Red Hat Enterprise Linux には、ネットワークパケットフィルタリングの高度なツールが含まれています。パケットフィルタリングとは、ネットワークパケットがカーネル内のネットワークスタックに入る、移動する、または出るときに、これらを制御するプロセスです。カーネルの 2.4 より前のバージョンはパケットフィルタリングに ipchains を使用して、パケットに適用されるルールのリストがフィルタリングプロセスの各ステップで使われていました iptables (netfilter とも呼ばれる) は、カーネル 2.4 から導入されました。これは、ipchains と似ていますが、ネットワークパケットのフィルタリングに利用できる範囲と制御が大幅に拡大されました。
本章は、パケットフィルタリングの基礎に焦点を当て、 iptables コマンドで選択できるさまざまなオプションや、フィルタリングルールがシステム再起動時にどのように保持存されるかを説明します。

重要

カーネル 2.4 以降におけるデフォルトのファイアウォールメカニズムは iptables です。しかし、 ipchains がすでに実行されている場合は iptables を使用できません。 ipchains が起動時に存在していると、カーネルがエラーを起こし、iptables を起動することができません。
ipchains の機能自体には、これらのエラーによる影響はありません。

2.8.9.1. パケットフィルタリング

Linux カーネルは、パケットのフィルタリングに Netfilter 機能を使用します。この機能を使うことで、一部のパケットをシステムから受け取ったり、通過させたりする一方で、他のパケットを停止させます。この機能は Linux カーネルに組み込まれ、以下の 5 つの組み込みテーブルまたはルールリストで構成されています。
  • filter — ネットワークパケットを処理するためのデフォルトテーブルです。
  • nat — 新規の接続を作成するパケット変換に使用され、ネットワークアドレス変換 (NAT: Network Address Translation) で使用されます。
  • mangle — 特定の種類のパケット変換に使用されます。
  • raw — NOTRACK ターゲットと組み合わせた接続追跡の適用除外を設定するために主に使用されます。
  • security — SECMARK や CONNSECMARK ターゲットで有効とされる強制アクセス制御 (MAC) のネットワークルールに使用されます。
各テーブルには、組み込みチェーンがグループ化されており、これらのチェーンは 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 サブシステムがパケットのフローを検査するプロセスの概要を示しています。
IPTables におけるパケットのフィルタリング

図2.6 IPTables におけるパケットのフィルタリング

重要

ファイアウォールのルールは、デフォルトで /etc/sysconfig/iptables または /etc/sysconfig/ip6tables ファイルに保存されます。
Linux システムのブート時に、iptables サービスは DNS 関連サービスの前に起動します。これは、ファイアウォールのルールが数値 IP アドレス (例: 192.168.0.1) のみを参照できることを意味しています。このようなルールにドメイン名 (例: host.example.com) が含まれると、エラーが発生します。
パケットがいずれかのテーブルにある特定のルールにマッチする場合、その宛先に関わらず、ターゲット またはアクションがそれらのパケットに適用されます。マッチしたパケットに対して ACCEPT ターゲットがルールで指定されていると、パケットの残りのルールチェックは省略され、宛先への送信が続行されます。ルールが DROPターゲットを指定していると、パケットのシステムへのアクセスは拒否され、パケットを送ったホストには何も通知されません。ルールが QUEUE ターゲットを指定していると、パケットはユーザースペースに渡されます。ルールがオプションの REJECT ターゲットを指定していると、パケットは破棄されますが、エラーパケットがパケットの送信者に送られます。
すべてのチェーンには、ACCEPTDROPREJECT または QUEUE のデフォルトポリシーが設定されます。チェーン内のいずれのルールもパケットに適用されない場合、パケットはデフォルトポリシーに従って処理されます。
iptables コマンドは前述のテーブルを設定し、必要に応じて新規のテーブルをセットアップします。

注記

デフォルトでは、netfilter モジュールは読み込まれません。このため、ユーザーは /proc/ ディレクトリーでは、これらのモジュールすべては確認できません。使用中のものまたは既に読み込み済みのものだけが表示されます。つまり、netfilter の使用前には、どの機能が利用可能かを確認する方法はないということになります。