對於 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 Cookie,選擇性 ACK 和 TCP 視窗縮放等選項將不起作用,即使您的伺服器目前沒有受到攻擊。
答案1
第二個來源
“這意味著如果您打開 SYN Cookie,選擇性 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.