緩慢的 SYN 洪水:防止 SYN 放大?
我為低容量網站管理的(Linux)網路伺服器(在 VPS 上)剛剛在埠 80 上受到大約 5 次 SYN 請求/秒,沒有來自遠端主機的其他流量。它更像是滴水而不是洪水,但在我第一次注意到它之後,它持續了大約一個小時。我不知道這是否是放大攻擊。
我不想成為那種事情的一部分,而且無論如何,所有那些阻塞 netstat 的半開連接都很煩人,即使沒有造成真正的傷害。(啟用了 SYN cookie,連結距離飽和還有很長的路要走,而且 apache 正在應對,儘管我認為記憶體使用量增加了,響應速度比正常慢一些。)
所以,這個,我通過手動阻止欺騙/實際的原始 IP 地址來“緩解”,然後用 tcpdump 密切關注它,這就是我知道他們已經放棄的方式。我想要一個自動解決方案…
因為它是一個面向公眾的網路伺服器,所以應該有連接!有些頁面上有很多圖片/CSS文件等。因此,我完全預計真正的使用者將遠遠超過每秒 5 個“攻擊”請求,因此像
iptables -A INPUT -m state –state NEW -m limit –limit 4/second –limit-burst 20 ….
只會抓住真正的使用者,但幾乎沒有抓住攻擊,如果有的話。
除了像腳本這樣粗略地計算 netstat 輸出中的 SYN_RCVD 條目,然後將結果輸入到日誌中以供 fail2ban 響應之外,如果半開連接的累積總數來自給定的 IP 超過了某個數字?我在 iptables 中看不到任何東西,但也許我遺漏了一些東西。
編輯:忘了說,VPS 是基於 openVZ 的(建立在 RHEL6 上),所以我現在堅持使用的核心是 2.6.32。適用於古代核心的答案會很棒!
EDIT2:Conntrack 超時,根據要求:
net.netfilter.nf_conntrack_generic_timeout = 120 net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 30 net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 15 net.netfilter.nf_conntrack_tcp_timeout_established = 86400 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 30 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 15 net.netfilter.nf_conntrack_tcp_timeout_last_ack = 10 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30 net.netfilter.nf_conntrack_tcp_timeout_close = 5 net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 60 net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 60 net.netfilter.nf_conntrack_udp_timeout = 10 net.netfilter.nf_conntrack_udp_timeout_stream = 60 net.netfilter.nf_conntrack_icmpv6_timeout = 30 net.netfilter.nf_conntrack_icmp_timeout = 10 net.netfilter.nf_conntrack_events_retry_timeout = 15 net.ipv6.nf_conntrack_frag6_timeout = 4194
但正如我在上面所寫的,我對對伺服器的影響(到目前為止它是最小的)並不像阻止腳本小子等那樣感興趣,就像他們試圖查看我是否有 phpmyAdmin,一個 dlink -路由器,(等)這是我收到的最後一個數據包。
是的,您可以結合 iptables 限制和 SYNPROXY 進行核心設置(例如通過 conntrack 模組設置超時)。
基本上,synproxy 所做的是檢查是否建立了完整的 TLS 連接,如果沒有則丟棄請求。它比之前的其他解決方案(雜湊限制等)具有更好的性能。
你是對的,每秒 4 個連接的限制會阻止很多合法連接,大約 60-80/s 更現實。對於您的案例,synproxy 絕對是要走的路。
今年早些時候,在使用內置 Linux 工具玩 DDoS 保護時,我在這裡找到了一個很棒的反 DoS 指南:https ://javapipe.com/ddos/blog/iptables-ddos-protection/
本指南基本上是我上面提到的所有內容的指南。它解釋了每條規則的作用,為什麼你應該或不應該實施它,它是如何工作的,它如何影響性能並告訴你它是否是可選的,一個非常好的指南。