如何判断服务器是否遭受 DDoS 攻击?
DDoS(分布式拒绝服务)攻击通常表现为服务器资源被大量无效请求占用,导致正常用户无法访问。以下是几种基本的判断方法。
1. 检查端口连接数
首先,可以检查特定端口(如 Web 服务常用的 80 端口)上的连接数。请注意,这里统计的是连接数,而非独立 IP 数,因为单个 IP 可能发起多个连接。
使用以下命令查看 80 端口的当前连接总数:
netstat -nat | grep -i "80" | wc -l
命令解释:
netstat -nat:显示所有 TCP 端口的连接状态。grep -i "80":筛选出包含“80”的行(-i 表示忽略大小写)。wc -l:统计行数,即连接数。
2. 分析每个 IP 的连接数
要更精确地定位可疑 IP,可以执行以下命令,它会列出每个 IP 地址建立的连接数,并按数量从小到大排序:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
命令解释:
netstat -ntu:显示 TCP 和 UDP 连接(-n 以数字形式显示地址和端口)。awk '{print $5}':提取输出结果的第 5 列,即远程地址和端口。cut -d: -f1:以冒号(:)为分隔符,取第一部分,即 IP 地址。sort:对 IP 地址进行排序,为下一步去重做准备。uniq -c:统计并输出每个唯一 IP 出现的次数(即连接数)。sort -n:将统计结果按数字大小(连接数)升序排序。
3. 如何解读结果
正常情况下,一个 IP 会有几个到几十个连接。如果发现某些 IP 的连接数异常偏高(例如成百上千),且持续不断,这很可能就是 DDoS 攻击的来源。
示例输出(异常情况):
1 180.97.35.21
1 180.97.35.36
1 66.249.79.58
1 Address
1 servers)
2 117.136.74.158
2 171.214.239.34
2 222.80.245.106
3 223.114.118.65
37 106.187.34.20
133 106.187.36.20
157 106.187.35.20
在此示例中,最后三个 IP(106.187.34.20, 106.187.36.20, 106.187.35.20)的连接数远高于其他 IP,极有可能是攻击源。
如何防御 DDoS 攻击?
针对不同规模的攻击,可以采取不同层次的防御措施。
1. 临时应急:使用 iptables 屏蔽 IP
对于明确的攻击源 IP,可以立即使用 iptables 防火墙规则将其屏蔽。
iptables -I INPUT -s 攻击源_IP_地址 -j DROP
例如:
iptables -I INPUT -s 106.187.35.20 -j DROP
注意:此方法可能误伤共享此公网 IP 的其他正常用户(例如使用同一出口 IP 的 NAT 用户),建议作为临时应急手段。
2. 使用自动化防御脚本
可以安装如 DDoS Deflate 这类工具,它能自动监测连接数,当某个 IP 的连接数超过阈值时,自动将其加入防火墙黑名单,并可通过邮件通知管理员。
3. 借助云服务或 CDN
- 小规模攻击:可以使用具备安全防护功能的 CDN 服务,如 Cloudflare、阿里云 CDN、腾讯云 CDN 等。它们能帮助过滤恶意流量,隐藏服务器真实 IP。
- 中大规模攻击:应考虑使用专门的 DDoS 高防服务,例如阿里云 DDoS 高防 IP、腾讯云大禹防护、华为云 Anti-DDoS 等。这些服务提供 TB 级别的流量清洗能力,但通常为付费服务。
重要提示:本文示例中的命令和截图基于较旧的环境(如 2015 年)。当前主流的 Linux 发行版中,netstat 命令可能已被 ss 命令取代。建议使用以下更现代的等效命令:
ss -ntu | awk '{print $6}' | cut -d: -f1 | sort | uniq -c | sort -n
防御 DDoS 是一个持续的过程,建议结合服务器监控、防火墙配置和专业防护服务,构建多层次的安全体系。
但是攻击之后机子就 down 了,连不上 ssh,只能重启,而重启后就看不到之前的记录了。。怎么才能知道哪个 IP 在攻击呢。
有记录,查查看,除非记录被人删除了