我有一个运行Ngix的VPS,目前正在托pipe几个网站。 如您所知,VPS资源不足,安全措施应由客户完成。
我只注意到有很多压力工具可以导致Web服务器崩溃,或者服务器吃掉可能会挂起的所有资源。 我的Windows PC中有LoadUI。 甚至还有在线类似的服务,比如LoadImpact.com
它甚至不需要同时运行10个或数千个工具,即使只是一个小孩也可以在这些工具中input域名,并运行大量并发连接的testing,充分利用服务器带宽,硬件资源等..
我想知道如何防止这些洪水攻击? 这是否应该由Iptables处理? 还是Nginx?
你已经在运行nginx是一个很好的开始 – 基于事件的服务器对sloloristypes的攻击更有弹性。
尽pipe如此,防止DOS攻击尽可能远离您的应用程序是一个不错的主意。 下一步是iptables。
您需要考虑如何分辨攻击并将其与实际stream量区分开来 – 创build新连接的速度是非常好的指标 – 您可以configurationiptables来限制每个ip的新连接:
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent \ --update --seconds 30 --hitcount 80 -j DROP
(每30秒速率超过80时丢弃新的连接请求)
您可以限制每个ip地址的并发连接数量:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit \ --connlimit-above 20 -j REJECT --reject-with tcp-reset
限制带宽也是一个好主意,取决于您的stream量configuration文件,比如可用带宽的10% – 这是使用tc而不是iptables完成的。
然后,对于通过的连接,HTTP请求中可能会识别攻击(引用者,请求的URL,用户代理,接受语言….)的特征,不pipe你select什么特定的值对于刚刚这些 – 你只需要确保你已经有了一个机制,在攻击的第一个迹象就可以快速改变参数。 虽然你可以在Web服务器上处理请求,但更好的解决scheme是使用iptables阻止远程IP地址的访问 – fail2ban是将日志数据桥接到iptablesconfiguration的工具。
当然,对于大规模的DDOS来说,这并不能解决攻击者用你的服务器忽略的数据包填充你的互联网pipe道的问题,因为你需要和上游提供商交谈。
我build议考虑的两件事是iptables速率限制和fail2ban 。 Fail2ban会给你一些体面的自动阻塞的IP地址,你的服务器太多,并允许你自定义多久,你希望他们被禁止。 Iptables速率限制将允许您限制进入您的服务器的所有types的stream量。 我在这里find了一篇很好的文章。 但是,如果你做一个基本的谷歌search,你会看到更多。
编辑:虽然我没有与Nginx的个人经验,我看到它有一个HttpLimitReqModule ,你也应该看看。