我想知道是否可以通过简单的IP表规则来防止小型(D)DoS攻击?
小到我的意思是说,他们正在泛滥我的networking服务器约400多个请求从一个或两个IP地址。 当我注意到他们已经开始点击我的networking服务器时,我可以放弃IP地址,但是通常需要花费几分钟的时间让IP表格反对这个IP,并且完全放弃它,这样它就不会影响该Web服务器。
我用以下命令删除IP:
iptables -I INPUT -s "IP HERE" -j DROP
然后显然保存它:
/etc/init.d/iptables save
我通常使用以下命令找出攻击的IP地址:
netstat -plan|grep :80|awk '{print $5}'|cut -d: -f 1|sort|uniq -c|sort -n
这样做的问题是,我必须在那里,这需要我采取行动。 是否有一个IP表规则,我可以用来删除一个IP地址后,达到150连接? 这样,我不必担心它压倒了Web服务器,我也不必在那里阻止它。
顺便说一下,如果有问题,我在CentOS上使用Apache。
感谢您的时间。
对于提供灵活性的东西,请查看最近(和限制)的模块。 最近将logging在一个给定的时间范围内IP所做的连接数量,并且可以用来触发一个特定的规则。 最近的模块(相对)CPU很重 – 但是与加载dynamic页面相比,这是相当可以接受的。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp -m multiport --dports 80,443 -m recent --update --seconds 3600 --name BANNED --rsource -j DROP -A INPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ATTK_CHECK -A ATTACKED -m limit --limit 5/min -j LOG --log-prefix "IPTABLES (Rule ATTACKED): " --log-level 7 -A ATTACKED -m recent --set --name BANNED --rsource -j DROP -A ATTK_CHECK -m recent --set --name ATTK –-rsource -A ATTK_CHECK -m recent --update --seconds 600 --hitcount 150 --name ATTK --rsource -j ATTACKED -A ATTK_CHECK -m recent --update --seconds 60 --hitcount 50 --name ATTK --rsource -j ATTACKED -A ATTK_CHECK -j ACCEPT
基本上,上述内容相当于:
有关更详细的解释,以及我使用的上述分层版本,请参阅本文
请记住,ipTables根本无助于networking拥塞,对于任何分布式攻击都是无效的 – 它的优势在于安全性和降低服务器的负载。
你可以使用iptables来阻止这样的滥用者,但是你必须小心,因为iptables是非常耗费CPU资源的。 每个数据包都会根据每个规则进行检查,因此添加规则可能会很快导致服务器耗尽周期。 我曾经有一个客户,每次他们想要阻止某人都会增加一个新的规则,然后有一天,他们的stream量略高于正常stream量,系统崩溃了。 表可以减less查看规则的数量,但是你不能仅仅在iptables中抛出很多规则。
另一种select是黑洞路由:
ip route add blackhole $IP_HERE ip route flush cache
路由表是散列表 (使用散列表 ),而iptables规则必须按顺序查看,效率要低得多。 这样,你可以有成千上万的路由没有问题,其中数以千计的iptables规则将成为问题,贯穿每一个请求。
至于你的第二个问题,你可以使用hashlimit模块为滥用者创build一个自动黑名单。 看到我的post关于防止DDoS攻击的更多细节,但简短的forms是:
iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 50/min \ --hashlimit-burst 500 --hashlimit-mode srcip --hashlimit-name http -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j DROP