我有一个运行 Ngix 的 VPS,目前托管了几个网站。如您所知,VPS 资源不足,安全措施应由客户完成。
我刚刚注意到许多压力工具在那里可能会导致网络服务器崩溃或服务器吃掉可能最终挂起的全部资源。我的 Windows 电脑中有 LoadUI。甚至还有类似的在线服务,例如 LoadImpact.com
它甚至不需要同时运行10个或数千个工具,即使是一个孩子也可以在这些工具中输入域名并运行大量并发连接的测试,充分利用服务器带宽、硬件资源等..
我想知道我应该如何防止这些洪水攻击?它应该由 Iptables 处理吗?还是 Nginx?
你已经在运行 nginx 是一个好的开始——基于事件的服务器对 sloloris 类型的攻击更有弹性。
尽可能远离您的应用程序来防止 DOS 攻击仍然是一个好主意。下一步是 iptables。
您需要考虑如何对攻击进行分类并将它们与实际流量区分开来——创建新连接的速度是一个非常好的指标——您可以配置 iptables 以基于每个 ip 限制新连接:
(当速率每 30 秒上升到 80 以上时丢弃新的连接请求)
您可以限制每个 IP 地址的并发连接数:
限制带宽也是一个好主意,具体取决于您的流量配置文件,比如可用带宽的 10% - 这是使用 tc而不是 iptables 完成的。
然后,对于通过的连接,HTTP 请求中可能存在可以识别攻击的特征(引荐来源网址、请求的 URL、用户代理、接受语言......)你选择什么具体值并不重要对于现在的这些——你只需要确保你有合适的机器,你可以在攻击的第一个迹象时快速更改参数。虽然您可以在网络服务器上处理请求,但更好的解决方案是使用 iptables 阻止来自远程 IP 地址的访问——fail2ban 是将日志数据桥接到 iptables 配置的工具。
当然,对于大规模的 DDOS,这不会解决攻击者用您的服务器忽略的数据包填充您的互联网管道的问题——因为您需要与您的上游提供商联系。
我建议研究的两件事是 iptables 速率限制和fail2ban。Fail2ban 会给你一些像样的自动阻止 IP 的访问过多的服务器,并允许你自定义你希望它们被禁止的时间。Iptables 速率限制将允许您限制进入服务器的所有类型的流量。我在这里找到了一篇不错的文章。但是,如果您进行基本的 Google 搜索,您会看到更多。
编辑:虽然我没有使用 nginx 的个人经验,但我确实看到它有一个你也应该研究的HttpLimitReqModule 。