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