ネットワーク環境でLinuxを使用する場合は常に、ネットワークパケットを操作するカーネル機能を使用して内部ネットワークと外部ネットワークを隔離できます。Linuxのnetfilterフレームワークは、複数のネットワークを隔離する効果的なファイアウォールを構築する手段を提供します。ルールセットを定義する汎用的なテーブル構造体であるiptablesを使用すれば、ネットワークインタフェースを通すパケットを詳細に制御することが可能です。このようなパケットフィルタは、SuSEfirewall2および対応するYaSTモジュールを使用して簡単にセットアップできます。
netfilterコンポーネントおよびiptablesコンポーネントは、ネットワークアドレス変換(NAT)に加え、ネットワークパケットのフィルタリングと操作の機能を備えています。フィルタ条件およびそれに関連付けられたアクションはルールセットとして格納され、受信したネットワークパケットに対して1つずつ個別に照合されます。使用されるフィルタ条件とアクシ㏍唐フセットはテーブルに格納されます。これらのテーブルおよびルールセットに変更を加えるには、iptablesコマンドを使用します。
Linuxカーネルは、以下の3つのテーブルを管理します。各テーブルは、パケットフィルタの特定の機能カテゴリに対応しています。
このテーブルは、狭い意味での「パケットフィルタリング」メカニズムを実装するもので、フィルタルールの大半を含んでいます。たとえば、パケットを通すか(ACCEPT)破棄するか(DROP)を判定します。
このテーブルは、パケットの送信元アドレスと宛先アドレスに対する変更内容を定義します。これらの機能を使用して、「マスカレード」を実装できます。マスカレードは、プライベートネットワークとインターネットをリンクするNATの一種です。
このテーブルのルールを使用して、IPヘッダ内の値(サービスタイプなど)を操作できます。
これらのテーブルには、パケットと照合される次のような複数の事前定義ルールセットが含まれています。
このルールセットは、着信パケットに適用されます。
このルールセットは、システムの内部プロセス宛てのパケットに適用されます。
このルールセットは、システムを通過するだけのパケットに適用されます。
このルールセットは、このシステム自身が送信元であるパケットに適用されます。
このルールセットは、すべての発信パケットに適用されます。
あるシステムにおけるネットワークパケットの伝送経路を図 43.1. 「iptables:パケットの可能な経路」に示します。簡略化するために、この図ではテーブルをルールセットの一部として示してありますが、実際にはこれらのルールセットはテーブル自体に格納されています。
最も単純なケースとして、システム宛の着信パケットがeth0インタフェースに届いた場合を考えてみます。このパケットははじめに mangleテーブルのPREROUTINGルールセットと照合され、次にnatテーブルのPREROUTINGルールセットと照合されます。パケットのルーティングに関する次のステップでは、パケットの実際の宛先がシステム自身のプロセスであることが確認されます。mangleテーブルおよびfilterテーブルのINPUTルールセットを経た後、このパケットは、filterテーブルのルールに実際に適合していれば、最終的に宛先に届きます。