9.2. テーブル

-t オプションは操作の対象テーブルを指定する。デフォルトでは filter テーブルが使用される。 -t オプションで指定できるテーブルは下記。これはチャプター テーブルとチェーンの道のり の内容を手短に要約したものだ。

Table 9-1. テーブル

テーブル説明
nat

nat テーブルは主としてネットワークアドレス変換 (Network Address Translation) に使用する。"NAT" されたパケットは、ルールに従って IPアドレスが変更される。どのパケットも、ストリーム中で一度だけこのテーブルを通る。つまり、そのストリームの先頭パケットだけがこのテーブルの通行を許されるのだということを心しておかなければならない。ストリームの残りのパケットは、自動的に "NAT" あるいはマスカレード (Masquerade) され、先頭パケットの行動に追従する。言い換えれば、後続パケットは二度とこのテーブルは通らないし、先頭パケットと同じ処方さえ受けないのだ。後でくどいほど説明するが、このテーブルでは一切のフィルタリングを行うべきでないという理由がここにある。ファイヤーウォールに入ってすぐにパケットを変換するには PREROUTING チェーンを使用する。ローカル (つまりファイヤーウォール) で発生したパケットをルーティング判断前に変換するには、OUTPUT チェーンを使用する。そして、パケットがファイヤーウォールを離れる直前に変換を行うためには POSTROUTING チェーンが用意されている。

mangle

このテーブルは主にパケットの改変 (mangle) に利用する。主な利用法は、様々なパケットの内容やヘッダを書き換えること。例えば TTLTOSMARK の変更だ。 MARK は厳密にはパケットの変更ではないが、カーネル領域でパケットへのマークが設定される。このマークは、ファイヤーウォール上での以降のフィルタリングにおいて、他のルールやプログラムから利用できるばかりでなく、例えば tc などの高度ルーティングにも利用可能だ。 mangle テーブルは PREROUTINGPOSTROUTINGOUTPUTINPUTFORWARD という 5 つの組み込み済みチェーンを持つ。 PREROUTING は、パケットを、ファイヤーウォールへの進入直後、且つルーティング判断前の時点で改変するのに用いる。 POSTROUTING は、すべてのルーティング判断が行われた後に改変を行う。ローカル (つまりファイヤーウォール) で発生したパケットをルーティング判断の後で変換するには OUTPUT チェーンを使用する。 INPUT は、パケットがローカルコンピュータ自体へ誘導された後で、且つデータがユーザ空間アプリケーションに相まみえる前の改変に使う。 FORWARD は、ルーティングの第一判断の後、なお且つ最終ルーティング判断の前にパケットを改変するのに使用する。 mangle は、いかなるネットワークアドレス変換にもマスカレードにも利用できないという点に注意。そうした処理を意図して作られているのは nat テーブルだ。

filter

filter テーブルこそ、まさにパケットフィルタリングを精力的に行う場所だ。例えば、他のテーブルでも可能な DROPLOGACCEPTREJECT のいずれの処理も、ここでは何の問題なく行える。 filter テーブルは 3 つのチェーンを内蔵している。最初のチェーンは FORWARD で、発生源がローカルでなく、宛先もローカルホスト (つまりファイヤーウォール) 宛でないパケットに対して使用する。 INPUT はローカルホスト (ファイヤーウォール) を宛先とするすべてのパケットに、そして OUTPUT はローカルで発生したパケットすべてに使用する。

raw

raw テーブルとその中のチェーンは、 netfilter にあるどのテーブルよりも先に適用される。これは NOTRACK ターゲットを利用するために考案されたテーブルだ。登場してまだ日が浅く、2.6 後期カーネル以降で、なお且つ、それを使うようにコンパイルされていなければ使用できない。raw テーブルは 2つのチェーンを内包している。PREROUTINGOUTPUT チェーンがそれで、この 2つのチェーンはパケットがどの netfilter サブシステムに触れるよりも前にパケットを処理する。 PREROUTING チェーンは当マシンへ入ってきたパケットとフォワードされたパケットに対して使用することができ、もう一方の OUTPUT チェーンは、ローカルで発生したパケットに他のどの netfilter サブシステムよりも早い段階で変更を加えたい時に使うことができる。

上の説明で、利用可能な 4 つのテーブルの概念が分かったことと思う。テーブルはそれぞれ、まったく別々の目的に利用するもので、各々の内蔵チェーンの使い分けを知っておかなければならない。使い方を誤れば、あなたはファイヤーウォールに墓穴を穿ち、ほどなく誰かがそれを発見して何かを潜り込ませ、あなたは自ら掘った穴に落ち込むことになるだろう。前提となるテーブルとチェーンについては、前のチャプター テーブルとチェーンの道のりで説明した。もし理解が完全でないなら、ぜひ、そのチャプターに戻りもう一度通読することをお勧めする。