動的フィルタリング

フィルタリングルールを

許可 ループバックインターフェースの通信
許可 ループバックアドレスの通信
拒否 インターネット側からやってくるローカルIPアドレスによる通信
拒否 最近はやりのワームやらのポートへの通信
許可 LAN-ファイアウォール間の通信
許可 establishedな通信
許可 LANからインターネットへの接続開始パケット
許可 インターネット向けに公開しているサーバ宛の該当ポートへの接続開始パケット
拒否 該当しなかったもの

というようなルールでいつも作って居たのだけど、今日、establishedを拒否して接続開始パケットをcheck-stateしてkeep-stateで通すというルールを書いている人を見かけた。
あれれ?なんでestablished使わないんだろうと、以前ipfilterでルールを作った時にもなんか同じような事で悩んだ気がしたので、ipfwのマニュアルを読んでみた。
man ipfwの使用例 動的ルールの項目に

にせの TCP パケットを含む怒涛の攻撃 (flood attack) からサイトを保護するために、次の動的ルールを用いた方が安全です。
ipfw add check-state
ipfw add deny tcp from any to any established
ipfw add allow tcp from my-net to any setup keep-state

と書いてあった。
・・・3WAYハンドシェイクせずにACKパケットを大量に投げつけられた時対策ということかな
でも、マニュアルの下の方に書いてあるけど、これだとSYN flood攻撃されたときにいらない動的ルールでいっぱいになる可能性がありそう。
だけど、昔ゲームのサーバ立ててた頃UDPで動的ルールを使い切っても止まらなかったし、変なパケットをファイアウォール内に入れてしまうよりマシなのか・・・と納得してルールを入れ替えてみた。

とりあえずestablishedを拒否した際にログをとることにしてみた。