Red Hat Enterprise Linux にはネットワーク用の高度なツールパケットフィルタリングがインストールされています — カーネル内でネットワークスタックへネットワークパケットが進入、通過、退出するのを制御するプロセスです。 バージョン 2.4 以前のカーネルはパケットフィルタリングを ipchains に依存しており、フィルタリングプロセスの各ステップでパケットに適用される規則の一覧を使用していました。バージョン 2.4の到来により、iptables(ネットフィルタとも呼ばれる)が導入されました。これはipchainsと似ていますが、ネットワークパケットのフィルタリングに利用できる範囲や制御が大幅に拡張しています。
この章では、パケットフィルタリングの基礎に焦点をおき、ipchains と iptables の違いを明確にして、iptablesコマンドで使用できるさまざまなオプションを説明します。また、システムを再起動する際にフィルタリング規則を保持する方法を説明しています。
iptablesの規則の作成とこれらの規則に基づくファイアウォールの設定については、 項18.7を参照してください。
![]() | 警告 |
---|---|
2.4 カーネルと新しいカーネルの下でのデフォルトのファイアーウォール機能は iptables です。しかし、ipchains が既に起動している場合、iptables を使う事ができません。ipchains がシステム起動時に存在すると、カーネルはエラーを表示し iptables の起動に失敗します。 これらのエラーメッセージはipchainsの機能に影響を与えるものではありません。 |
Linux カーネルにはパケットをフィルタリングする機能が組み込まれているので、他のパケットが停止している時に一部のパケットだけがシステムに入ってくるようにすることができます。カーネルのネットフィルタには 3つの組込み型テーブル、すなわち規則一覧が含まれています。以下のようなものです:
filter — ネットワークパケットを処理する デフォルトのテーブル。
nat — 新規接続を作成するパケットの変更、 及びNetwork Address Translation (NAT)に使用。
mangle — パケット変更の特定のタイプに使用。
![]() | ヒント |
---|---|
これらテーブル内への組み込みの他にも、特別化したテーブルを /lib/modules/<kernel-version>/kernel/net/ipv4/netfilter/ のディレクトリ内に作成してから保存することができます (<kernel-version>は、バージョンカーネル番号になります)。 |
各テーブルは組込み型のチェーンのグループを持ち、それぞれがネットフィルタによってパケット上で実行されるアクションに相当 します。
フィルタテーブル用の組込み型チェーンは以下のようになります:
INPUT — ホスト用のターゲットとされているネットワークパケットに適用します。
OUTPUT — ローカル生成のネットワークパケットに適用します。
FORWARD — ホストを通ってルーティングしたネットワークパケットに適用します。
natテーブル用の組込み型チェーンは以下のようになります:
PREROUTING — ネットワークパケットが到着すると それを変更します。
OUTPUT — ローカル生成のネットワークパケットを送信される前に変更します。
POSTROUTING — ネットワークパケットが送信される前に それを変更します。
mangleテーブルの組込み型チェーンは以下の様になります:
INPUT — ホスト用にターゲットされているネットワーク パケットを変更します。
OUTPUT — ローカル生成のネットワークパケットを送信される前に変更します。
FORWARD — ホストを通してルーティングした ネットワークパケットを変更します。
PREROUTING — 着信のネットワークパケットを ルーティングされる前に変更します。
POSTROUTING — ネットワークパケットが送信される前に それを変更します。
Linux システムで受信/送信されたすべてのネットワークパケットは少くとも1つのテーブルに従います。しかし、チェーンの最後に現われる前に、パケットは各テーブル内の複数の規則に従うこともあります。これらの規則の構成や目的には相違がありますが、通常特定のプロトコール及びネットワークサービスを使用する時に、特定の IPアドレスまたは複数セットのIPアドレスに送受信するパケットを識別する為に使われます。
![]() | 注記 |
---|---|
完全修飾ドメイン名は、/etc/sysconfig/iptables や/etc/sysconfig/ip6tables ファイルに保存されているファイヤーウォール規則では使用しないで下さい。以下の例では、起動時にいずれかのDNS 関連サービスの前に iptablesサービスがスタートし、エラーとなるために iptables -A FORWARD -s example.com -i eth0 -j DROP example.comは無効となります。IP アドレスのみがファイヤーウォールの規則作成で有効です。 |
その目的地に関係なく、パケットがあるテーブルの特定の規則に適合すると、あるターゲット、すなわちアクションがパケットに適用されます。規則に適合するパケットに ACCEPT ターゲットを指定している場合、パケットは規則チェックの残りの部分をスキップして、その目的地に進むことを許可されます。規則が DROP ターゲットを指定している場合、パケットはシステムへのアクセスを拒否されてパケットを発信したホストには何も返信されません。規則がQUEUEターゲットを指定している場合、パケットはユーザースペースへパスされることになります。規則がオプションの REJECT ターゲットを指定している場合、パケットはドロップされますが、エラーパケットがパケットの発信元へ送られます。
それぞれのチェーンはACCEPT、 DROP、REJECT、 QUEUEのいずれかのデフォルトポリシーを持っています。このチェーン内の規則のどれも パケットに適応しない場合、パケットはデフォルトポリシーに従って扱われます。
iptablesコマンドはこれらのテーブルを設定するだけでなく、必要であれば、 新しいテーブルのセットアップもします。