7.3. ユーザ空間でのステート

これまで見てきた通り、カーネルの内部では、パケットはそのプロトコルに応じていくつかの異なったステートを採り得る。しかし、カーネルの外に用意されているのは、前述した 4 つのステートだけだ。ステートは、主に state マッチと組み合わせて、コネクション追跡上での現在のステートを調べることを通じて利用する。利用可能なステートは、NEW, ESTABLISHED, RELATED, INVALID, UNTRACKED だ。下の表に、各ステートの採り得る状態を簡潔にまとめた。

Table 7-1. ユーザ空間でのステート

State説明
NEWNEW ステートは、それが初めて観測したパケットであることを表す。つまり、或る特定のコネクションの中で conntrack モジュールが初めて検出したパケットがこれに合致する。例えば、SYN パケットが検出されたとして、それがあるコネクションで最初のパケットならマッチする。ただし、必ずしも SYN パケットであるとは限らず、 SYN でなくても NEW と判定される。状況によってはこの点が何らかの問題につながる場合もあるが、よそのファイヤーウォールからの接続を見失ってしまったり、コネクションはタイムアウトしているが接続自体はクローズされていないなどといった局面で、非常に有用な面が多い。
ESTABLISHEDESTABLISHED ステートの場合、既に双方向のトラフィックが検出されている。それからさらにパケットがやりとりされても、マッチの判定は変わらない。 ESTABLISHED なコネクションは比較的理解が楽だ。 ESTABLISHED ステートに判定されるための必要条件は単純。一方のホストがパケットを送信し、別のホストから返答が来れば、即ち ESTABLISHED だ。 NEW ステートにある接続は、直接あるいはファイヤーウォール越しに返答パケットを受け取った途端、 ESTABLISHED ステートになる。こちらから送ったパケットが送信先にお返しの ICMP メッセージを発生させた場合には、 ICMP 応答も ESTABLISHED と判断される。
RELATEDRELATED ステートは他よりかなりややこしい。あるコネクションが、既に ESTABLISHED な別のコネクションに関係している場合、それが RELATED だ。つまり、接続が RELATED になるためには、前提条件として、既に ESTABLISHED として判定済みの、別の接続が必要なのだ。そこで、 ESTABLISHED コネクションが、自分の主接続の他にもコネクションを発生させる。 conntrack モジュールに RELATED と認められれば、この新たに発生した接続が RELATED だ。 RELATED と判定される幾つかの典型を挙げよう。 FTP-data コネクションは FTP コントロール ポートに RELATED している。 IRC で開かれる DCC コネクションもそうだ。このステートは、ファイヤーウォール越しの ICMP 回答や、 FTP 転送、 DCC を成立させるのに利用される。この仕組みを利用すれば、 ICMP エラーメッセージや、 FTPDCC によるデータ輸送を、ファイヤーウォール越しでもきちんと機能させることができる。気を付けなければならないのは、こうしたメカニズムに依存するほとんどの TCP プロトコルと一部の UDP プロトコルは、非常に複雑で、 TCP または UDP データセグメントのペイロードを使って接続情報をやりとりしているため、正しく解釈するには特別なヘルパーモジュールを必要とするという点だ。
INVALIDINVALID ステートは、パケットが判定できないか、他のどのステートにも当てはまらない場合だ。こうなる要因は幾つか考えられる。例えば、システムがメモリーを使い果たした場合や、どの既知の接続にも関連しない ICMP エラーメッセージを受け取った場合などだ。おしなべて、このステートに当てはまるものは全部 DROP してしまうのが妥当だ。
UNTRACKEDこれは UNTRACKED ステート。簡潔に言えば、 raw テーブルで NOTRACK ターゲットを使ってマークされたパケットが、ステート機構上に UNTRACKED なものとして挙がる。これはつまり、 RELATED なコネクションが捉えられないことにもなるので、UNTRACKED なコネクションの取り扱いには注意が必要だ。例えば、関連した ICMP メッセージなどがステート機構で捕捉できなくなるからだ。

ステートを利用するには、 --state マッチを使う。それでコネクション追跡ステートに基づいたパケットマッチが行えるようになる。これが、ステート機構がファイヤーウォールにとって恐ろしく強力で効果的たる所以だ。ローカルネットワークへの返答を受け取るために、以前はよく、1024 から上のポートを全部開け放つ必要に迫られたものだ。だが、ステート機構がそれに取って代わった今、そんなことはもう必要ない。雑多なトラフィックを通すことなく、返答のトラフィックに的を絞ってファイヤーウォールを開けられるのだ。