服务器流量突增进程难查?Linux下用tcpdump抓包搞定

检测维修 0 92

服务器流量突增,进程查不到来源,最后靠它搞定了。

前几天,公司内部网络之中,一台服务器突然间流量急剧飙升,监控该系统,报警声持续不断。之后我上去查看一番,发现CPU以及内存均处于正常状态,然而网卡收发的数据却极为迅猛。这般情况便不太正常了,通常来讲,这种问题若无是遭受DDoS攻击,那便是内部存在程序在暗自传输数据。可是对top、htop、ps全部查看了一回,并未发现有可疑的进程。莫不是真有黑客侵入了?心里不禁有些慌乱,然而却还是得继续查找啊。

后来才想到,想要直接查看系统资源却找不到源头,那么就只能通过抓包来查看网络流量究竟是谁在进行通信了。Linux环境下最常被使用的抓包工具是tcpdump,虽说之前使用的次数并不多, 但在这个时候也只能鼓起勇气去使用了。先确定一下是否安装了这个命令,输入`tcpdump -h`, 之后发现能够显示出帮助说明,还好系统是自带的。

首先要做的是查看全都有什么样的网卡能够予以使用,输入`tcpdump -D`,将当前机器的尽数网络接口罗列了出来,像ens192、lo诸如此类,我们所提供的服务是运行在ens192之上的,因而接下来就要紧紧盯着这个接口,缘于为了不被dns解析给阻碍住,还必须添加`-n`参数,不然的话每抓取一个包都要去反向查询ip地址,速度不仅迟缓还极有可能扰乱结果。

然后就试着去抓一下全部的流量,其命令是`sudo tcpdump -i ens192 -n`。屏幕之上刷拉拉地向外跳数据,一大串的IP以及端口号来回进行通信。根本就显不出重点之所在。这个时候就必须得依靠过滤条件。比如说我想瞧瞧是不是有人在扫描端口,能够添加个`port 22`或者`port 80`来把范围予以缩小。但此次的问题在于流量巨大,估计是进行批量传输,或许是udp或者某个特定的协议在作祟。

尝试着先抓icmp包,以此来查看是否有人在进行ping flood,命令是`tcpdump -i ens192 -n icmp`,运行了十秒,并没有发现什么异常情况。再试着抓udp包,命令是`tcpdump -i ens192 udp `,结果一下子出现了好多包,源IP是我们内网中的另一台开发机,目标端口是53,这难道不就是DNS查询呀?

沿着这条线索持续深入挖掘。开发机竟然不应当朝着生产服务器发送如此多的DNS请求呀。于是乎更换使用更为详尽的命令:`tcpdump -i ens192 -nn -c 20 udp port 53`抓取20个包瞧瞧内容。果真如此,全部都是源自那台开发机发送来的域名解析请求,询问的居然全是些杂乱无章的域名,比如ads.google.com、tracking-api.com这类的。

大体上能够判定,是开发的那一边运行了一个程序,在开展批量爬虫或者广告追踪之类的工作任务,然而结果却是配置错误了DNS服务器,进而把请求统统发送到了我们的这一台生产机器上。这台机器刚好开启了dnsmasq来进行内网解析,于是就一声不吭地承受下了所有的请求,最终致使负载有所上升。

在找到缘由之后,事情就变得易于处理了。与开发方面的同事进行联系,对配置做出了修改,使DNS成功地指向了正确无误的测试服务器。接着持续观察好几分钟,流量迅速地就回归到了正常的状态。整个流程从察觉到问题一直到精准定位,用时不过一个小时的时间,在此过程当中,tcpdump立是下了卓著的功劳。

linux中的常用内存问题检测工具_服务器流量突增 tcpdump抓包分析 内部程序异常流量排查

实际上,这工具具备挺多的功能性哩。比如说,你能够仅仅以抓取某个单一IP的数据包,其对应的命令乃是`host 172.16.1.100`;又能够去抓取特定的端口,就例如`port 80`便是属于HTTP那种流量;并且还能够对条件进行组合,像那种“源自某个IP同时目标端口为443”的数据包:`src host 172.16.1.100 and dst port 443`。要是打算把数据包保存下来以便后续慢慢去分析,那般就采用`-w 文件名.pcap`,在这之后拿wireshark将其打开来查看也是可行的。

一次我曾用它抓取过HTTP里的Cookie ,那个命令稍微复杂一些 ,是这样的 :`tcpdump -i ens192 -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'` ,如此便能实时看到哪些请求携带了Cookie信息 ,虽说如今大部分都是HTTPS了 ,无法看到明文 ,但在调试内部系统时依旧是十分有用的 。

还有一回针对排查邮件发送碰到的失败状况,采用了`port 25`去抓取SMTP包,借助`grep 'MAIL FROM'`,直接看见了应用发送出来的邮件指令,迅速察觉到是认证字段拼写有误。倘若未曾靠着抓包,仅仅依靠查看日志,根本就没办法查验出来。

这物件并非打从一开始就能够运用自如的。起初之际,我时常会遗漏添加`-n`,进而致使在抓包期间,因自身引发的dns请求诱发了全新的数据包,数据包越抓数量越浩繁,险些将自己陷入混乱之中。随后方才明白,于实际操作里最为关键的并非是知悉诸多的参数,而是要晓得怎样循序渐进地缩减范围,从数量庞大的数据里寻觅到关键的线索 。

它具备检测端口扫描行为的能力,举例来说,当有人运用nmap对你展开扫描时,你会察觉到有大量的SYN包朝着不同端口发送过去,此时,运用`tcpdump -i any 'tcp == tcp - syn'`便能够捕获到这类扫描行为。尽管真正意义上的安全防护无法仅仅依赖于此,然而,至少能够在第一时间知晓有人正在对你进行试探 。

存在着这样一个技巧,它是最为实用的,那便是抓包并且保存文件。有时,问题并非能够即刻就被解决,所以就得先将数据留存下来。这只需`-w /tmp/debug.pcap`这几句话所涉及的操作就行,后续随时能够运用`-r /tmp/debug.pcap`进行回放并展开分析。与wireshark图形界面相互配合,就连产品经理也能够看得懂 。

使用久了之后便会觉得,这般事物仿若网络领域的行车记录仪,平常的时候感受不到它的存在,一旦真的出现问题了,它能够告知你究竟发生了何事,不像某些监控仅仅给出一个数字,tcpdump直接给予你可看的原始证据 。

然而也需郑重提醒一番,进行抓包操作之时务必谨慎留意权限以及范围。默认情况下所监听的网卡或许并不准确,某些时候必须指定`-i any`方可实现抓包全面完整。并且普通用户无法直接执行该操作,必须借助sudo,不然便会提示权限不足问题。除此之外,长时间抓包所形成的文件规模会很大,最好添加`-C`依据大小进行切分,或者添加`-G`按照时长进行轮转。

曾有一回,我忘掉控制限定的数据量额度,径直让`tcpdump -w log.pcap`于后台处运行,不经意间致使磁盘彻底被填满。好在那是用于测试用途的机器,不然可就会引发诸多棘手的状况了。就此缘故,当下已然养成了一种习惯,即要么增添`-c`来对数据包具体数量予以限定,要么添加`-s0`用以把控单个数据包的尺寸大小,以此防止系统运行遭受严重拖沓至崩溃 。

相关推荐: