Linux カーネル 2.6.32 の場合、設定するとnet.ipv4.tcp_syncookies = 1
常に使用されるのでしょうか、それとも SYN フラッド攻撃時のみ使用されるのでしょうか?
反対のことを言っている情報源が 2 つ見つかりました。
1:
「ただし、SYN クッキーが使用されている場合、2 つの注意事項が適用されます。まず、サーバーは 3 ビットでエンコードできるのは 8 つの一意の MSS 値だけに制限されます。次に、サーバーはすべての TCP オプション (大きなウィンドウやタイムスタンプなど) を拒否する必要があります。これは、サーバーが、その情報が保存されるはずの SYN キュー エントリを破棄するためです。[1]
これらの制限は必然的に最適とは言えないエクスペリエンスをもたらしますが、攻撃を受けた場合にのみ適用されるため、クライアントがその影響に気付くことはほとんどありません。このような状況では、接続を維持するために TCP オプションを放棄することは、通常、妥当な妥協策であると考えられます。」
2:
「欠点は、すべての TCP データが 32 ビットのシーケンス番号フィールドに収まるわけではないため、高パフォーマンスに必要な一部の TCP オプションが無効になる可能性があることです。」つまり、サーバーが現在攻撃を受けていない場合でも、SYN クッキーをオンにすると、選択的 ACK や TCP ウィンドウ スケーリングなどのオプションは機能しません。」
答え1
2番目の情報源
「これは、サーバーが現在攻撃を受けていない場合でも、SYN Cookie を有効にすると、選択的 ACK や TCP ウィンドウ スケーリングなどのオプションが機能しないことを意味します。」
それは単なるでたらめです、
「TCP: request_sock_TCP: ポート 53 で SYN フラッディングが発生している可能性があります。Cookie を送信しています。SNMP カウンターを確認してください」
無効になっているものは何もありません。
これは、iperf3 とパフォーマンスを比較し、「net.ipv4.tcp_syncookies = 1」を有効のままにして、「net.ipv4.tcp_sack」と「net.ipv4.tcp_window_scaling」を有効/無効にすることで簡単に証明できます。
なぜ公式の情報ではなくランダムな情報源を読むのですか? https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
tcp_syncookies - BOOLEAN
Only valid when the kernel was compiled with CONFIG_SYN_COOKIES
Send out syncookies when the syn backlog queue of a socket
overflows. This is to prevent against the common 'SYN flood attack'
Default: 1
Note, that syncookies is fallback facility.
It MUST NOT be used to help highly loaded servers to stand
against legal connection rate. If you see SYN flood warnings
in your logs, but investigation shows that they occur
because of overload with legal connections, you should tune
another parameters until this warning disappear.
See: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.
syncookies seriously violate TCP protocol, do not allow
to use TCP extensions, can result in serious degradation
of some services (f.e. SMTP relaying), visible not by you,
but your clients and relays, contacting you. While you see
SYN flood warnings in logs not being really flooded, your server
is seriously misconfigured.