当怀疑Linux机器遭受DOS攻击时,如何进行排查
DoS是通过计算机网络宽带攻击和连通性攻击等方法,使计算机或网络无法提供正常服务的攻击。 故当排查是否为DOS攻击时,可以从网络跟系统资源占用率等方面进行分析。
1、使用top查看机器整体监控,整体信息如下:
top - 19:46:48 up 14 days, 48 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 99 total, 1 running, 60 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 72.1 id, 0.2 wa, 0.0 hi, 27.6 si, 0.0 st
KiB Mem : 8164400 total, 5312100 free, 282372 used, 2569928 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7588096 avail Mem
可以发现如下信息:
- 平均负载全是 0,就绪队列里面只有一个进程(1 running)。
- CPU的使用率很低,72.1%处于idle。
但发现虽然CPU使用率不高,但大部分都处于软中断的消耗,27.6%用于软中断。 2、软中断有多种类型,接下来查看软中断的情况,查看哪种类型的软中断占用了CPU,是否为网络相关软中断。 要排查软中断情况,可以查看/proc/softirqs 文件的内容,如下:
root@iv-ybmpz656q12udbnkjbmr:~# watch -d cat /proc/softirqs
Every 2.0s: cat /proc/softirqs
CPU0 CPU1
HI: 0 3
TIMER: 6812675 17408000
NET_TX: 15 17
NET_RX: 39907392 29856600
BLOCK: 0 0
IRQ_POLL: 0 0
TASKLET: 84 53
SCHED: 6648409 17206354
HRTIMER: 0 0
RCU: 6260140 7767836
softirqs文件是统计系统运行以来的累积中断次数。如我们直接查看文件内容,得到的只是累积中断次数。我们想要判断哪中类型的中断频繁发生,我们观察的是中断次数的变化速率。所以我们使用watch -d 观察文件的变化。 通过观察我们发现,TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)等这几个软中断都在不停变化。并且NET_RX变化最快。 NET_RX为网络数据包接收软中断的变化速率,而其他几种类型的软中断,是保证 Linux 调度正常工作所必需的,所以我们判断是网络接收中断占用了软中断。 3、既然判断是网络中断导致,那接下来我们使用sar来查看网卡的收发情况,如下: 可以看到rxpck/s(即pps)为94173,rxKB/s(bps)为4966.17。pps很大,但是bps不是很大,简单进行计算:(4966*1024)/94173=54。 每个包大约为54byte,包很小,即为小包问题。 接下来,我们想查看包的具体信息,可以使用tcpdump进行抓包,然后进行查看,如下:
$ tcpdump -i eth0 -n tcp port 80
15:11:32.678966 IP 192.168.0.182.18238 > 192.168.128.128.80: Flags [S], seq 458303614, win 512, length 0
...
从 tcpdump 的输出中,我们可以发现:
- 192.168.0.182.18238 > 192.168.128.128.80 ,表示网络帧从 192.168.0.182 的 18238 端口发送到 192.168.128.128 的 80 端口,即从运行客户端 18238 端口发送网络帧,目的为服务端所在机器的 80 端口。
- Flags [S] 则表示这是一个 SYN 包。
且SYN包不断进行发送和接收。结合前面pps很高的情况下,bps很小的现象,我们判断此为SYN FLOOD攻击。 如果您有其他问题,欢迎您联系火山引擎技术支持服务