排查Linux是否遭遇DOS攻击

计算操作系统技术服务知识库
问题描述

当怀疑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攻击。 如果您有其他问题,欢迎您联系火山引擎技术支持服务

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论