如何检查 Linux 服务器是否遭受 DDoS 攻击?
1. 写在前面
DDoS(Distributed Denial-of-Service)攻击是最常见的服务器安全威胁之一,攻击频率和强度逐年稳步上升。本文主要介绍如何通过资源监控和及时采取一些措施来缓解 DDos 攻击。
2. 什么是 DDoS 攻击?
这里仅简单说明。
DDoS 是一种恶意行为,攻击发起方通过向网络发出大量请求来耗尽目标服务器所有可用资源的攻击,与标准的 DoS(拒绝服务)攻击不同:
DDoS:
- 采用多个分布式的设备:通常情况下,设备已被黑客提前入侵并安装相关木马,设备所有者不知情;
- 攻击针对多种网络设备和协议,而不仅仅是网络端点;
以下是三种主要的 DDoS 攻击类型:
- 应用层 DDoS(OSI模型 第 7 层):重点攻击 Web 服务,如 Apache 和 Nginx 等;
- 协议攻击(OSI模型 第 3/4 层):针对重要网络设备上的操作系统和防火墙;
- 容量攻击(Volumetric attacks):产生大量流量,消耗服务器可用带宽和吞吐量;
3. 如何检查 Linux 服务器是否受到 DDoS 攻击?
恶意行为者(黑客)使用标准网络进行 DDoS 攻击。因此,通过监视网络流量是否存在异常连接来检测攻击通常是一种简单的方式。以下列出了检查服务器是否遭受 DDoS 攻击的一些简单方法。
3.1 检查服务器负载
使用 uptime
命令检查服务器的平均负载:
root@jpzhang-dev:~# uptime
00:28:32 up 12 days, 13:13, 2 users, load average: 0.13, 0.10, 0.04
显示三个值:分别代表一分钟、五分钟和十五分钟内的平均负载:
0.13, 0.10, 0.04
服务器可用线程数是服务器可接受负载的一个便捷参考。如果负载等于或大于线程数,则可能表明活动量过高。
root@jpzhang-dev:~# grep processor /proc/cpuinfo | wc -l
4
在本例中,服务器有 4 个可用线程。平均负载高于 4 表示服务器负载异常高。
3.2 检查网络负载
如果服务器只是速度慢,但仍可通过直接连接(如通过 IPMI)访问,可使用以下工具来检查网络负载。
(1). bmon
bmon
是一款带宽监控和速率估算工具,在 Linux 命令行可提供简单的数据可视化。
ubuntu 安装:sudo apt install bmon
启动: root@jpzhang-dev:~# bmon
使用键盘的向上或向下箭头指定到要检查的网络设备。
(2). nload
nload
工具实时监控网络流量和带宽使用情况。
ubuntu 安装:sudo apt install nload
启动: root@jpzhang-dev:~# nload
按向左或向右箭头指定到要监控网络接口,终端将会显示所选接口进出网络流量详情。
(3). vnStat
与 nload
类似,vnStat
也是一款流量监控工具。vnStat
的优势在于它能为指定接口保存每小时、每天和每月的网络流量日志。
ubuntu 安装:sudo apt install vnstat
默认列出所有可用网络接口:
root@jpzhang-dev:~# vnstat
------------------------------------------------------------------------------------
rx / tx / total / estimated
br-3c911bd828a7: Not enough data available yet.
br-921af635eb7e:
2024-01 1.02 KiB / 210 B / 1.22 KiB / --
today 1.02 KiB / 210 B / 1.22 KiB / 34 KiB
docker0: Not enough data available yet.
ens3:
2024-01 33.11 KiB / 39.63 KiB / 72.74 KiB / --
today 33.11 KiB / 39.63 KiB / 72.74 KiB / 1.97 MiB
veth15be175:
2024-01 2.23 MiB / 1.19 MiB / 3.41 MiB / --
today 2.23 MiB / 1.19 MiB / 3.41 MiB / 94.55 MiB
... ...
注意:如果刚刚安装了 vnStat
,它将给出以下消息“ens3:Not enough data available yet.”。等待一段时间,然后再次尝试该命令。
(4). iftop
iftop
以用户友好的格式显示网络连接列表和相关网络信息。默认情况下,列表按照带宽使用情况排序。
ubuntu 安装:sudo apt install iftop
启动: iftop
(5). ifstat
ifstat
命令输出网络接口统计数据。默认情况下,它会显示每个活动接口的进出网络流量数据。
ubuntu 安装:sudo apt install ifstat
启动: ifstat
3.3 检查连接到服务器的 IP 地址
列出当前连接到服务器的 IP 地址可帮助识别潜在威胁。
netstat
是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。
下面的命令使用带有 -n
、-t
和 -u
选项的 netstat
命令,用于创建包含 TCP 和 UDP 连接的输出,然后使用 awk
、cut
和 sort
命令对输出进行格式化。
root@jpzhang-dev:~# netstat -ntu|awk '{print $5}'|cut -d: -f1 -s|sort|uniq -c|sort -nk1 -r
--------------------------------------------------------------------------------------
1 10.20.0.6
显示已连接的 IP 地址。
负载高的服务器上,列表可能很长,难以阅读。可以过滤输出,在一行中显示同一子网中的所有连接。下面的示例合并了同一 255.255.0.0 子网掩码中的 IP 地址。
netstat -ntu|awk '{print $5}'|cut -d: -f1 -s |cut -f1,2 -d'.'|sed 's/$/.0.0/'|sort|uniq -c|sort -nk1 -r
现在输出只显示一行,10.20.0.6 前面的数字 1 表明有1个连接来自该 IP 地址。
4. 如何缓解 Linux 服务器的 DDoS 攻击?
一旦确认服务器遭受 DDoS 攻击,采取一些快速措施以减轻损失。
注:未受保护的服务器很容易成为 DDoS 攻击对象。具有 DDoS 保护功能的专用服务器可在不中断可用性的情况下继续工作。
使用路由命令阻止攻击者的 IP 地址:
sudo route add [ip-address] reject
注意:路由(route)命令是 net-tools
软件包的一部分。要在 Ubuntu 上安装:sudo apt install net-tools
或者使用 iptables
:
(1)阻止某个 IP 地址访问:
iptables -A INPUT 1 -s [ip-address] -j DROP/REJECT
(2)保存新策略规则:
service iptables save
(3)重新启动服务:
service iptables restart
(4)重新启动 Web 服务。例如,如果运行的是 Apache 网络服务器:
sudo systemctl restart apache2
现在,系统已被配置为拒绝来自可疑 IP 地址的流量。
5.结论
本文介绍了 DDoS 攻击,并提供了识别方法。此外,还介绍了一些快速反应技巧,以帮助缓解正在发生的 DDoS 攻击。