首发于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