SYN Floodに対する防御なのだが、LinuxではSyn Cookiesという実装、*BSDでは Syn Cache というカーネルレベルの実装、FreeBSDだと両方のってるらしい。

  • Syn Cookies:
    • ステート?しりませんそんなの:D SYNいっぱいくるようならただ単にACK返すだけだよ:D
  • Syn Cache:
    • TCP構造体確保するタイミングを調整してSYNできる量を増やしましょう:D もちろんステートもきちんと保持します:D

デフォルト無効(これ有効にするとTCP の仕様を正しく実装できない(うにょら#1))

Syn Cookies:
サーバー側に状態を保持しないため、サーバ側が先に反応を返すプロトコルにおいては、クライアント側がハングする可能性があること。

http://ja.wikipedia.org/wiki/SYN_cookies

$ cat /proc/sys/net/ipv4/tcp_syncookies
0

Syn Cookies: デフォルト有効 (syncacheのlimitに達したらSyn Cookiesを使用する)
Syn Cache: デフォルト有効

freebsd % sysctl net.inet.tcp

net.inet.tcp.syncookies: 1
net.inet.tcp.syncache.bucketlimit: 30
net.inet.tcp.syncache.cachelimit: 15359
net.inet.tcp.syncache.count: 0
net.inet.tcp.syncache.hashsize: 512
net.inet.tcp.syncache.rexmtlimit: 3

Syn Cacheできない状態に陥ったら、Syn Cookieに切り替えて動作します。ってそんな状況になるのがまずい気がする(;ω;)

Syn Cookies: 無効 そんなセキュリティホールの原因は...ry
Syn Cache: デフォルト有効

openbsd % sysctl -a | grep syncache
net.inet.tcp.syncachelimit=10255

openbsd % vi /usr/src/sys/netinet/tcp_input.c:
tcp_input(struct mbuf *m, ...)
syn_cache_add
...

Syn Cacheできないなら放置プレイしようほととぎす。シンプル。

そういえば「SA:えっ?それOpenBSDでは既に治してますよ?」とか、「SA:そんなのOpenBSDでは起こらないよ」っていったリストが欲しいw

えっ?windowsってなんですか?