第 16章iptables

Red Hat Linuxにはネットワーク用の高度なツールパケットフィルタリング (カーネル内でネットワークスタックへネットワークパケットが進入、通過、退出するのを制御するプロセス)が インストールされています。バージョン2.4以前のカーネルはパケットフィルタリングの為に ipchainsに依存しており、フィルタリングプロセスの各ステップでパケットに適用される 規則の一覧を使用していました。バージョン2.4の到来により、iptables (ネットフィルタとも言います)が導入され、ipchainsと 似ていますが、ネットワークパケットのフィルタに利用出来る活動範囲及び制御を大幅に拡張します。

この章では、パケットフィルタリングの基礎に焦点を当て、ipchainsiptablesの 違いを明確にし、iptablesコマンドで使用できるさまざまなオプションを説明し、システムを次に リブートしてもフィルタリング規則を保持できる方法を示します。

iptablesの規則の作成とこれらの規則に基づくファイアウォールの設定については、 項16.5を参照してください。

警告警告
 

2.4カーネル下でデフォルトのファイアーウォール機能はiptablesです。しかし、ipchainsが既に起動しているなら、iptablesは使う事ができません。ipchainsがシステム起動時に存在すれば、カーネルはエラーを表示しiptablesの起動に失敗します。

これらのエラーメッセージはipchainsの機能に影響を与えるものではありません。

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

トラフィックは、パケットとしてネットワーク内を移動します。ネットワークパケットは 特定のサイズと形式のデータの集合体です。ファイルをネットワーク越しに転送する為に送信側のコンピュータは 利用するネットワークプロトコルの規則を使用し、ファイルをパケットに分割してネットワークで送信します。 各パケットにファイルデータの小片が格納されます。パケットを受信すると、受信側のコンピュータは パケットからファイルを再構築します。

各パケットには、ネットワーク内を移動して送信先に到達するための情報が含まれています。パケットが移動する 途中にあるコンピュータと送信先のマシンは、パケットの送信元、送信先、タイプなどの情報を知ることができます。 ほとんどのパケットはデータを伝送するように設計されていますが、特別な方法でパケットを使用するプロトコルもあります。 たとえば、「TPC(伝送制御プロトコル)」で使用されるSYNパケットは2つのシステム間の通信を開始するためのもので、 データは含まれていません。

Linuxカーネルにはパケットをフィルタリングするための機能が組み込まれているので、一部のパケットだけが システムに入ってくるようにすることができます。2.4カーネルのネットフィルタには3つの組込み型テーブル、 すなわち規則一覧が含まれています。それは以下のようなものです:

これらの各テーブルは順番に組込み型のチェーンのグループを持ち、これは ネットフィルタによってパケット上で実行されるアクションに相当するものです。

フィルタテーブル用の組込み型チェーンは以下のようになります:

natテーブル用の組込み型チェーンは以下のようになります:

mangleテーブルの組込み型チェーンは以下の様になります:

Linuxシステムから受信したり、Linuxシステムへ送信したりするネットワークパケットの 全ては、少なくとも1つのテーブルによって左右されます。

パケットは、チェーンの末尾に出てくる前に各テーブルの中で複数の規則に対してチェック されます。これらの規則の構成と目的は変化しますが、特定のプロトコルとネットワーク サービスを使用する時には通常、特定のIPアドレス、又はアドレスのセットから届く、あるいは そこへ向かうパケットを識別しようとします。

その目的地に関係なく、パケットがテーブルのある特定の規則に適合すると、あるターゲット、 すなわち、アクションがパケットに適用されます。規則が適合するパケットの為にACCEPTターゲットを 指定している場合、パケットは規則チェックの残りの部分をスキップして、その目的地に進むことを許可されます。 規則がDROPターゲットを指定している場合、パケットはシステムへのアクセスを拒否されて パケットを発信したホストには何も返信されません。規則がQUEUEターゲットを指定している場合、 パケットはユーザースペースへパスされることになります。規則がオプションのREJECTターゲットを 指定している場合、パケットはドロップされます。しかしエラーパケットがパケットの発信元へ送られます。

それぞれのチェーンはACCEPTDROPREJECTQUEUEのいずれかのデフォルトポリシーを持っています。このチェーン内の規則のどれも パケットに適応しない場合、パケットはデフォルトポリシーに従って扱われます。

iptablesコマンドはこれらのテーブルを設定するだけでなく、必要であれば、 新しいテーブルのセットアップもします。