博客 / WordPress/ 如何判断与防御服务器 DDoS 攻击:从检测到应急响应

如何判断与防御服务器 DDoS 攻击:从检测到应急响应

如何判断与防御服务器 DDoS 攻击:从检测到应急响应

如何判断服务器是否遭受 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 是一个持续的过程,建议结合服务器监控、防火墙配置和专业防护服务,构建多层次的安全体系。

  1. 但是攻击之后机子就 down 了,连不上 ssh,只能重启,而重启后就看不到之前的记录了。。怎么才能知道哪个 IP 在攻击呢。

    1. 有记录,查查看,除非记录被人删除了

回复 kerry 取消回复

您的邮箱不会公开。必填项已用 * 标注。