鵜飼裕司のSecurity from USA : Windows XP/2003のTCP同時接続数制限とその回避は「同時接続数」ではないのでは?

"Windows XP Service Pack 2 セキュリティ強化機能搭載" での機能の変更点 ‐ 第 2 部 : ネットワーク保護技術
XP SP2/2003 SP1での変更で一気に接続を開こうとするようなアプリケーション―拡散するのが目的なウイルスなど―からコンピュータを守るため、
ある一定数を超える接続を開こうとした際に

TCP/IPで、同時TCP連続試行回数のセキュリティ制限値に達しました。

とイベントログにイベントID 4226として残し、接続を抑制する(制限)機能のことです。
P2Pファイル交換アプリケーションやFirefoxで接続周りをチューニングしているとこの制限にぶつかる場合があるかもしれません。

さて、id:yaneurao:20060818#p1を見ていて思い出したのですが、この件に関してどうも勘違いしてる人がそれなりにいるのではないかと思います。

この制限というのは、冒頭にもあるとおり

  • 外向きのコネクションで
  • コネクションを完全に確立するまで(多分SYN)

が同時に10個までなのであり、同時にコネクションを確立できる数が10ということではありません。netstat -a などと叩いてみればESTABLISHEDが10個以上でてくることで確認できます。あくまで「外向きの不完全な」接続に関してなのです。タイトルで誤解を招いています。

ですので、(詳しくは調べ切れていないのですが)外向きの制限なので内向きの接続には影響しないはずです。そうでなければすでにもっと大勢の人が文句をいい、というかサーバとして機能しません。もちろん外へ向かって自ら通信を発生しまくる様なサーバの場合には話は別ですが、Webサーバ、ファイルサーバのような場合には困らないでしょう。

本当にそうなのか?と思うのは当然のことですので、気休めにもならないような以下の簡易テストを実行してみました。

ab -n 15000 -c 100 http://wsvr2k3/
実行時に送り手(FreeBSD)にSYN_SENTが10個程度残っていても、サーバ(Windows Server 2003)側にはイベントは発生しませんでした。何とも参考にならないテストですが、たとえ真面目にテストしても同じ結果となるのではないでしょうか。(nmap -sSもおなじ)

外部からの(Half-openの)上限の設定はTcpMaxHalfOpenだと思われます。必要であればこちらを変更します。

タイトルの「TCP同時接続数制限」を真に受けて「Windows Server 2003では10接続までしか受け付けないのか!今すぐカーネルパッチツールを使おう!」などと考えるのは間違いというか、そもそも何処まで行ってもサードパーティカーネルパッチだということは覚えておかねばなりません。そんなものを安易に使うなと。

書くだけ書いてはみましたが、私はあまり詳しくはないので詳しい方がいらっしゃればツッコミを入れていただけると幸いです。