web-dev-qa-db-ja.com

TCP LinuxカーネルのSYNフラッド検出方法

LinuxカーネルがSYNフラッドを検出すると、次のようなメッセージがログに記録されます。

possible SYN flooding on port 80. Sending cookies

カーネルがこれを検出するために使用する正確な方法を知っている人はいますか?

6
Kyle Brandt

Sysctl/tcpを正しく読み取っている場合、ACKされていないsyn要求の数がnet.ipv4.tcp_max_syn_backlogの値を超えると、トリップします。具体的には:

Tcp_max_syn_backlog変数は、3ウェイハンドシェイクで3番目のパケットをまだ取得していないメモリに保持するSYN要求の数をボックスに通知します。 tcp_max_syn_backlog変数は、tcp_syncookies変数によってオーバーライドされます。この変数を有効にするには、この変数をオンにする必要があります。サーバーがピーク時に過負荷になっている場合は、この値を少し増やすことをお勧めします。

単純だと思う理由は、tcp_syncookiesからのテキストです。

Tcp_syncookies変数は、特定のソケットのカーネルsynバックログキューがオーバーフローしたときに、いわゆるsyncookiesをホストに送信するために使用されます。これは、ホストが異なるホストからの複数のSYNパケットでいっぱいになると、synバックログキューがオーバーフローする可能性があることを意味します。したがって、この関数はCookieの送信を開始して、SYNパケットが本当に正当かどうかを確認します。

私には、tcp_max_syn_backlogの未処理の接続があるsynキューと同じくらい単純なように聞こえます。

6
jj33

この記事SYNCookieが役立つ場合があります。もちろん、 ソースを調べる することもできます。

1
larsks