我正在 Centos 上运行一个 2 GB 内存的站点。使用灯
每天有几个小时(大约 3 到 4 小时)apache 宕机。加载页面花费的时间太长,并且大部分时间显示请求超时。但是其他端口也可以,例如 ftp 和 7778,因为我使用的是 kloxo。
我不是服务器专家,但我用谷歌搜索并做了一些研究,我认为这是一种 ddos Syn 攻击。
我曾经netstat -n | grep :80 | grep SYN |wc -l
研究过同步连接
在攻击期间,它显示的数字超过 3000。但是当我的网站恢复正常时,它显示的数字约为 100。
所以请帮助我。并告诉我如何阻止这真的让我很生气。
首先要做的是确定发生了什么。目前您所知道的只是 Apache 有时没有响应,并且在这些时候,您有很多半开的 TCP 连接。您不知道 TCP 连接是问题的原因还是只是一个症状。
您是否有任何性能监控系统,例如 Cacti、Munin、Zabbix、Observium 或该领域的任何其他选项?如果没有,请立即获取其中之一。将它们配置为绘制所有正常情况,例如内存使用情况、平均负载、CPU 使用情况、可用磁盘空间、IOPS、网络使用情况等,但也可能值得添加自定义指标,例如每分钟请求数或 TCP 状态。还要添加与您正在使用的服务相匹配的任何模板,例如 Apache、MySQL、memcached 等。
通过分析这些工具生成的图表,您应该能够找到在这些停机期间达到 100% 的资源。从那里,您可以将因果链追溯到导致问题的初始触发器。可能正在耗尽的资源没有由您衡量,甚至可能不在您的控制之下。
猜测一下,如果您的连接处于该SYN_SENT
状态,则您可能正在通过 HTTP 使用其他人的 API,并且他们已关闭或暂时阻止了您。如果它们处于SYN_RECV
状态,则可能存在防火墙问题,阻止SYN-ACK
客户端接收响应或您接收来自客户端的响应。它也可能是您建议的 SYN-flood。
在真正的 SYN 泛滥期间,您会看到带宽和每秒的数据包数量显着增加。在 iptables 中使用tcpdump -w packet-capture-file.cap
或-j LOG
来记录这些数据包,看看是否可以发现模式。也许源地址总是相同的,也许总是在一个小范围内,也许设置了一个奇怪的TCP标志(例如URG或PSH)。如果失败,请查看所涉及的 IP 地址是否进行了多次连接尝试。如果有,您可以将它们添加到DROP
防火墙的规则中,这样您的操作系统就不必处理它们。根据有多少不同的 IP 地址,您可能需要将规则拆分为多个表,以减少 iptables 必须扫描的列表的大小。
DDoS 可能足够大,以至于它实际上耗尽了您的托管服务提供商的带宽。如果是这种情况,他们或您可能需要求助于专门的 DDoS 缓解公司。这些家伙使用 DNS 或 BGP 将您的流量路由到他们,过滤掉 DDoS 流量并将其余的发送给您。它们通常不便宜,您必须权衡停机成本与缓解服务成本。还有像 CloudFlare 这样的服务可以防止 DDoS 攻击达到一定的限制,并且有更实惠的定价计划。