如何防止 DDOS syn 攻击

如何防止 DDOS syn 攻击

我在 CentOS 上运行一个有 2 GB RAM 的网站。使用 LAMP

每天有几个小时(大约 3 到 4 小时)apache 会宕机。加载页面需要很长时间,而且大多数时候会显示请求超时。但是其他端口都正常,比如 ftp 和 7778,因为我正在使用 kloxo。

我不是服务器专家,但我用 Google 进行了一些研究,我认为这是一次 ddos​​ syn 攻击。

我曾经netstat -n | grep :80 | grep SYN |wc -l研究过 syn 连接

在攻击期间,它显示的数字超过 3000。但当我的网站恢复正常时,它显示的数字在 100 左右。

所以请帮助我。告诉我如何阻止这种情况,这真的让我很生气。

答案1

首先要确定发生了什么。目前你所知道的是,Apache 有时没有响应,在此期间,你有很多半开的 TCP 连接。你不知道 TCP 连接是否是原因问题或只是一个症状

您是否拥有任何性能监控系统,例如 Cacti、Munin、Zabbix、Observium 或该领域的任何其他选项?如果没有,请立即获取其中之一。配置它们以绘制所有常规内容的图表,例如内存使用情况、平均负载、CPU 使用情况、可用磁盘空间、IOPS、网络使用情况等,但也可能值得添加自定义指标,例如每分钟请求数或 TCP 状态。还可以添加与您正在使用的服务相匹配的任何模板,例如 Apache、MySQL、memcached 等。

通过分析这些工具生成的图表,您应该能够找到在这些停机时间内达到 100% 的资源。从那里,您可以追溯因果链,直到导致问题的最初触发因素。可能您没有衡量正在耗尽的资源,甚至可能不在您的控制范围内。

我猜,如果您的连接处于这种SYN_SENT状态,您可能正在通过 HTTP 使用其他人的 API,而他们要么已关闭,要么暂时阻止了您。如果他们处于这种SYN_RECV状态,则可能是防火墙问题阻止了SYN-ACK客户端接收响应或您接收来自客户端的响应。也可能是您提到的 SYN 洪水。

在真正的 SYN 洪水期间,您将看到带宽和每秒数据包数量大幅增加。使用iptables 中的tcpdump -w packet-capture-file.cap-j LOG记录这些数据包,看看您是否能发现某种模式。也许源地址始终相同,也许始终在一个小范围内,也许设置了一个奇怪的 TCP 标志(例如 URG 或 PSH)。如果失败,请查看所涉及的 IP 地址是否进行了多次连接尝试。如果是,您可以将它们添加到DROP防火墙的规则中,这样您的操作系统就不必处理它们。根据有多少不同的 IP 地址,您可能需要将规则拆分为几个表以减少 iptables 必须扫描的列表的大小。

DDoS 攻击可能非常严重,以至于实际上耗尽了托管服务提供商的带宽。如果是这样,他们或您可能需要求助于专门的 DDoS 缓解公司。这些公司使用 DNS 或 BGP 将您的流量路由给他们,过滤掉 DDoS 流量,然后将其余流量发送给您。他们通常并不便宜,您必须权衡停机成本与缓解服务成本。还有像 CloudFlare 这样的服务,它们可以在一定限度内防止 DDoS 攻击,并且有更实惠的定价计划。

答案2

它们是分布式的还是来自单个 IP?无论哪种方式,我都会推荐使用防火墙,例如脑脊液用于限制 TCP syn 攻击。

答案3

一个快速而廉价的解决方案是:

  • 减少 syn 数据包超时时间

    编辑 /etc/sysctl.conf

net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30

  • 限制可以接收的 syn 数据包数量

创建新链

iptables -N syn-flood

限制传入数据包

iptables -A syn-flood -m limit --limit 10/second --limit-burst 50 -j RETURN

日志攻击

iptables -A syn-flood -j LOG --log-prefix "SYN flood: "

默默地放下剩下的

iptables -A syn-flood -j DROP

来源

答案4

谁在乎追踪 IP。90% 的 DoS/DDoS 攻击将通过代理进行!您需要根据“恶意流量”设置黑名单期限。

http://perishablepress.com/eight-ways-to-blacklist-with-apaches-mod_rewrite/

在 SYN 攻击中,您的系统会被一系列 SYN 数据包淹没(显然)。每个数据包都会导致您的系统发出 SYN-ACK 响应。您的系统等待 SYN+ACK(三次握手)之后的 ACK。由于攻击从不发回 ACK,因此您的系统资源会被消耗。一旦队列已满,您的系统将忽略来自合法用户的服务(http/mail 等)传入请求。因此,有必要使用 iptables、ipfw 等来阻止此攻击。

至于 iptables 规则:

iptables -A 输入 -p tcp !--syn -m 状态--状态 NEW -j DROP

相关内容