我有一个运行 Ngix 的 VPS,目前托管着几个网站。如你所知,VPS 资源不足,安全措施应该由客户来做。
我刚刚注意到有很多压力工具可能会导致网络服务器崩溃或服务器耗尽资源,最终导致挂起。我的 Windows PC 上有 LoadUI。甚至还有类似的在线服务,例如 LoadImpact.com
甚至不需要同时运行十个或者几千个工具,甚至一个小孩子就可以在这些工具中输入域名并以大量并发连接运行测试,充分利用服务器带宽、硬件资源等。
我想知道我应该如何防止这些洪水攻击?这应该由 Iptables 处理吗?还是 Nginx?
答案1
您已经在运行 nginx 是一个好的开始 - 基于事件的服务器对 sloloris 类型攻击的弹性更强。
无论如何,尽可能远离应用程序来防止 DOS 攻击仍是一个好主意。下一步是 iptables。
您需要考虑如何对攻击进行分类并将其与实际流量区分开来 - 创建新连接的速度是一个非常好的指标 - 并且您可以配置 iptables 以限制每个 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
根据您的流量状况,限制带宽也是一个好主意,比如说将可用带宽限制为 10% - 这是使用 tc 完成而不是 iptables。
然后,对于通过的连接,HTTP 请求中可能存在可识别攻击的特征(引用者、请求的 URL、用户代理、接受语言……)。您现在为这些值选择什么具体值并不重要 - 您只需要确保您已安装好机制,以便在出现攻击的第一个迹象时快速更改参数。虽然您可以在 Web 服务器上处理请求,但更好的解决方案是使用 iptables 阻止来自远程 IP 地址的访问 -fail2ban 是一个工具用于将您的日志数据桥接到您的 iptables 配置。
当然,对于大规模 DDOS 来说,这并不能解决攻击者用您的服务器忽略的数据包塞满您的互联网管道的问题 - 为此,您需要与您的上游提供商沟通。
答案2
我建议研究的 2 件事是 iptables 速率限制和失败2ban。Fail2ban 可以自动阻止访问服务器过多的 IP,并允许您自定义禁止的时间。Iptables 速率限制允许您限制进入服务器的所有类型的流量。我找到了一篇关于它的不错的文章这里。但是,如果您进行基本的 Google 搜索,您会看到更多内容。
编辑:虽然我没有亲自使用过 nginx,但我确实看到它有一个HttpLimitReq模块你也应该调查一下。