首發於http://www.linux-ch.com/post-14.htmlhtml
遇到syn flooding(CC)時,不少狀況下內一個ip在短期內有可能並不會再次請求,也有可能在短期內瘋狂地發送syn請求,兩個都是極端.這個時候咱們能夠將第一個請求丟棄,過多請求直接屏蔽ip能夠取得不錯的效果.腳本以下:linux
先是修改ipt_recent的參數:
modprobe ipt_recent ip_list_tot=65535 ip_pkt_list_tot=50
記錄65535個ip,而後每一個ip記錄50筆記錄數據庫
iptables -N SYN-FLOODING
清空,創建一個SYN-FLOODING的鏈;重點是紅色的部份內容:bash
iptables -A INPUT -m state --state NEW -m tcp -p tcp --syn -m limit --limit 1/m --limit-burst 500 -m multiport --dports 22,80,8080 -j ACCEPT
當每分鐘向服務器的22,80,8080三個端口發起的syn請求小於每分鐘500次時,請求經過;服務器
iptables -A INPUT -m tcp -p tcp --syn -m multiport --dports 22,80,8080 -j SYN-FLOODING
當大於500次每分鐘時請求進入SYN-FLOODING鏈;tcp
iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --rcheck --second 120 --hitcount 10 -j DROP
檢測SYN-FLOODING數據庫,若是發如今120秒內有10次或以上請求直接DROP,沒有或小於則進入下一條;ide
iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --update --second 120 --hitcount 1 -j ACCEPT
檢測SYN-FLOODING數據庫,若是120秒內有1次或以上的請求經過,沒有記錄則進入下一條;post
iptables -A SYN-FLOODING -p tcp --syn -m multiport --dports 22,80,8080 -m recent --name SYN-FLOODING --set
iptables -A SYN-FLOODING -p tcp --syn -j DROP
若是數據是第一次進入的,更新SYN-FLOODING數據庫;最後丟棄該請求.spa