サービス不能になってしまうSYN FLODD攻撃を防ぎたい

 SYN FLOODは,インターネットサーバのサービスに負荷を掛けることでダウンさせてしまう攻撃名として有名だ。正常なTCP/IPのやり取りでは問題無いものの,セッション確立を無視したパケットが蓄積され続けると,事実上httpなどがダウンしてしまう。

 多くのディストリビューションでインストールされるinetd自体にも問題はあるものの,次のような設定でSYN FLOODに対する防御が可能だ。これには「Syncookie」(CONFIG_SYN_COOKIES)機能がカーネルビルドされていることが前提だが,最近のRed Hat Linuxなどでは標準インストールでサポートされている。

 しかしSyncookie機能そのものは無効になっていることがほとんどのため,有効にしておくとよいだろう。確認するには次のように指定すればよい。「0」と表示されれば,Syncookieは無効となっている。

# cat /proc/sys/net/ipv4/tcp_syncookies
0   ←無効になっている

 有効にする設定は極めて簡単だ。次のように入力するだけで有効になる。しかし,マシンの再起動後にはクリアされてしまうため,起動時に実行される/etc/rc.d/rc.localファイルに記述しておけばよいだろう。

# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

 上記の設定によって,蓄積キュー(SYN)があふれた場合には送信元にsyncookieが送信される。ただし,この機能によって一般的なソケット蓄積の概念が放棄されるため,正常なアクセスによってサーバが過負荷になった場合でも,アクセス側に正常なエラーメッセージが送信されない可能性があるのだ。

 現時点での根本的な解決には,tcpserverやxinetdなどの導入検討も必要だろう。