動的フィルタリングの動作
ここでは、動的フィルタの動作について説明していきます。
静的フィルタは、行きと戻りの方向で、フィルタを書いておく必要があり、パケットが通るドアを常に開けておく必要がありました。
動的フィルタは、行きの方向のみ書いておけば、戻りのパケットは自動的に通るようになります。
パケットが通過するドアは、必要がない時は、閉じるようになっているので、静的フィルタリングと比べて外部からの攻撃を受けるリスクが低くなります。
動的フィルタでは、コネクションの最初のパケットがドアを開けるトリガとなり、関連するコネクションの通信を通過させる動的フィルタが自動的に追加するようになっています。
コネクションの内容を把握する
動的フィルタを定義するには、ドアを開けるためのトリガである最初のパケットがどんなパケットであるか、また、その向きを理解しておくことが重要になってきます。
例えば、Telnetのコネクションについて見てゆきます。

上図の場合、トリガとなるパケットは、宛先IPアドレスが端末BのIPアドレス、宛先ポート番号が23番、パケットの向きは「端末A→端末B」の方向となります。
パケットの向きは、端末Aから端末Bに接続要求を行うので「端末A→端末B」の方向となります。
しかし、アプリケーションによっては、複数のコネクションを使って通信を行うものもあります。例えば、FTPは、制御用のコネクションとデータ用のコネクションの2つを使って通信を行っています。

動的フィルタを定義するには、トリガとなるパケットを把握する必要があります。アプリケーションによっては、複数のコネクションを扱ったり、ポート番号が変化したり、アプリケーション固有の振る舞いを行うものもあります。
このようなアプリケーションの場合、動的フィルタを定義してゆくのは、難しい作業となります。
そこで、固有の振る舞いを行うアプリケーションのために、複雑な定義を行わなくて済むように事前に登録された処理を行う仕組みが用意されています。
登録されたアプリケーションには、FTP、TFTP、SMTP、POP3、HTTP、HTTPS、TELNET、NetMeetingなどがあります。
HTTPやTELNETなど特別な処理を必要としないアプリケーションも含まれますが、一般的によく利用されるアプリケーションには、簡単な定義で動的フィルタリングが定義できる手段が用意されています。
また、YAMAHAルータでは、アプリケーションではありませんが、アプリケーション名の代わりにTCPやUDPを指定できるようになっています。
TCP、UDPは、全般的なコネクションであり、アプリケーション固有の動作は行いませんが、簡単な定義だけで動的フィルタリングを利用できるようになっています。
静的フィルタと動的フィルタの関係
ここでは、静的フィルタと動的フィルタの関係について、説明します。
動的フィルタでは、コネクションの最初のパケットがトリガとなり、関連するコネクションの通信を通過させる動的フィルタが自動的に追加するようになっています。
その仕組みのため、動的フィルタでは、パケットを破棄するのではなく、パケットを通過させるように動作します。
したがって、動的フィルタリングでは、動的フィルタでパケットを通過させ、静的フィルタでパケットを破棄する運用が基本となります。
動的フィルタだけを設定した場合は、パケットを通過させる定義のみとなり、パケットが破棄されなくなるので注意が必要です。
静的フィルタと動的フィルタの適用順序
動的フィルタリングは、動的フィルタと静的フィルタを組み合わせて定義します。
動的フィルタリングを定義するには、まず、その仕組みを理解しておくことが大切です。
動的フィルタは、初めから存在するのではなく、コネクションの最初のパケットがトリガーとなり、その時に動的フィルタが作られます。
つまり、
トリガーとなるパケットを静的フィルタで捉える必要があるということです。
ここで、さらに、注意が必要です。
動的フィルタは、静的フィルタよりも優先されるということです。
動的フィルタは、静的フィルタよりも前に追加されます。一度、動的フィルタが作られると、パケットは、静的フィルタよりも前に動的フィルタと比較されることになります。
そして、動的フィルタを通過するパケットは、後続の静的フィルタと比較されることなく通過することとなります。
静的フィルタと動的フィルタの適用順序が、理解し難いかもしれません。
そこで、適用順を下図に示します。

以上まとめると、動的フィルタリングの定義は、以下のようになります。
- トリガーとなる静的フィルタを定義する。
- トリガーにより追加する動的フィルタを定義する。
通過したパケットの戻りのパケットに対する動的フィルタは自動的に作成され追加されるので、定義する必要はありません。