![启用后 TCP SYN cookies 是否始终处于打开状态?](https://linux22.com/image/667840/%E5%90%AF%E7%94%A8%E5%90%8E%20TCP%20SYN%20cookies%20%E6%98%AF%E5%90%A6%E5%A7%8B%E7%BB%88%E5%A4%84%E4%BA%8E%E6%89%93%E5%BC%80%E7%8A%B6%E6%80%81%EF%BC%9F.png)
对于 Linux 内核 2.6.32,如果我设置了net.ipv4.tcp_syncookies = 1
它,会一直使用还是仅在 SYN 洪水攻击期间使用?
我找到了两个说法相反的来源。
1:
“但是,在使用 SYN cookie 时,有两个注意事项。首先,服务器仅限于 8 个唯一的 MSS 值,因为这是可以用 3 位进行编码的全部值。其次,服务器必须拒绝所有 TCP 选项(例如大窗口或时间戳),因为服务器会丢弃本来会存储该信息的 SYN 队列条目。[1]
虽然这些限制必然会导致体验不佳,但客户端很少会注意到它们的影响,因为它们仅在受到攻击时才会应用。在这种情况下,为了挽救连接而丢失 TCP 选项通常被认为是一种合理的妥协。
2:
“缺点是并非所有 TCP 数据都能放入 32 位序列号字段,因此高性能所需的某些 TCP 选项可能会被禁用。” 这意味着,如果您打开 SYN Cookies,选择性 ACK 和 TCP 窗口缩放等选项将不起作用,即使您的服务器当前没有受到攻击。”
答案1
第二个来源
“这意味着,如果您打开 SYN Cookies,选择性 ACK 和 TCP 窗口缩放等选项将不起作用,即使您的服务器当前没有受到攻击”
简直是胡说八道,直到
“TCP:request_sock_TCP:端口 53 上可能发生 SYN 泛洪。正在发送 cookie。检查 SNMP 计数器”
发生什么都没有被禁用。
通过将您的性能与 iperf3 进行比较并启用/禁用“net.ipv4.tcp_sack”和“net.ipv4.tcp_window_scaling”同时保持“net.ipv4.tcp_syncookies = 1”启用,可以轻松证明这一点。
为什么你要阅读随机资料而不是官方资料? 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.