最近有客戶要定制路由器的默認防火墻等級,然后涉及到了DDos規則,對比客戶提供的規則發現我們現有的規則存在明顯的錯誤,在此記錄一下如何使用iptables防護DDoS攻擊
直接貼一下規則
#開啟TCP SYN Cookies 機制
sysctl -w net.ipv4.tcp_syncookies=1
#減少發送SYN-ACK包的重試次數,從而達到減少半連接的存活時間效果,盡快釋放隊列
sysctl -w net.ipv4.tcp_synack_retries=3
#擴大半連接隊列的容量
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
#每秒允許100個syn請求,且允許突發150個請求
iptables -w -I SYNFLOOD -p tcp -m tcp --syn -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -w -A SYNFLOOD -p tcp -m tcp --syn -j DROP
1.內核參數優化
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
當服務器收到大量 TCP SYN 包(三次握手的第一步)時,內核的半連接隊列(SYN Queue)可能被占滿,導致合法用戶無法建立連接,以此癱瘓服務器。啟用 tcp_syncookies 后,內核會在隊列滿時生成加密的 Cookie 值代替存儲連接信息,客戶端返回的 ACK 包會攜帶此 Cookie 進行驗證,從而?繞過半連接隊列限制,即使攻擊者發送百萬級 SYN 包,也不會耗盡隊列資源。
2.防火墻規則
iptables -w -I SYNFLOOD -p tcp -m tcp --syn -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -w -A SYNFLOOD -p tcp -m tcp --syn -j DROP
這一步主要是要注意將SYNFLOOD子鏈放在INPUT的第一個,如此即可達到限制syn連接數的同時又不影響到后續其他規則的生效。
需要注意DDos攻擊無法完全防御,如果需要更好的效果,可以使用鈔能力~