【记录】如何使用tcpdump实现24小时不间断抓包

背景介绍

有一个用户IP间歇性的受到攻击,我们为了机房稳定,netflow检测到攻击就会黑洞他,
然后业务断了,然后他炸了,然后他不服说我们检测机制有问题,和他讲不清楚,
建议他换ip,说可能已经暴露,他说IP没有业务,只和AWS跑隧道,他同时也怀疑ip有黑历史,
我们建议他换ip建隧道,同时做好双隧道做备份,每过两天又被打了,不得了,说ip都换了怎么还被打,是不是ip有问题,
我TM,你之前的ip怎么没被打了,你用什么IP,什么ip被打,你还没泄露,没办法,要拿数据给他,就有下面的事情

需求解析

   1:每个抓取的数据报文不能太大,一是太大不便于分析,二是太大不便于下载
    2:要完整抓取数据报文,我指定的是数据报文完整不被截断(tcpdump每个数据包默认只抓取68字节)
    3:归档处理,当发现故障时间点后,能快速找打对应时段的数据报文。
    4:为了防止,数据包占满磁盘,计划每天中午12点对,前天的数据进行删除,也就是说最多保存最近(24+24+12)小时的数据

实施过程

准备工作:配置交换机的端口镜像

第一步:创建归档目录,计划抓取保存一个月的数据,目录按照"年-月-日/时"进行递归创建

[root@localhost home]mkdir /home/2020-03-{01..31}/{00..23} -p
[root@localhost home]# ls
2020-03-01  2020-03-03  2020-03-05  2020-03-07  2020-03-09  2020-03-11  2020-03-13  2020-03-15  2020-03-17  2020-03-19  2020-03-21  2020-03-23  2020-03-25  2020-03-27  2020-03-29  2020-03-31
2020-03-02  2020-03-04  2020-03-06  2020-03-08  2020-03-10  2020-03-12  2020-03-14  2020-03-16  2020-03-18  2020-03-20  2020-03-22  2020-03-24  2020-03-26  2020-03-28  2020-03-30

第二步:编写抓取脚本,并联动定时任务让tcpdump实现24小时不间断抓包

#A:定义时间格式
[root@localhost ~]# date +"%Y-%m-%d"
2020-03-06
[root@localhost ~]# date +"%H"
21
[root@localhost ~]# date +"%Y-%m-%d_%H:%M:%S"
2020-03-06_21:10:46

#B:编写一个死循环,别被吓到,就是死循环,并赋予执行权限
[root@localhost ~]# cat ssyt-packets-monitor.sh 
#!/bin/bash
while true
do
    tcpdump  -G 60 -i enp2s0f1  -s 0 -w /home/`date +"%Y-%m-%d"`/`date +"%H"`/SJ-SSYT_%Y-%m-%d_%H:%M:%S.cap > /dev/null 2>&1
    #其实上面这行命令一旦开始执行不会停止,就相当于一直没有执行完成,就不会进行循环执行再执行一次该命令,
    #但是数据包的保存名字会随时间的变化而变化,我们指定的是 60s(-G 60) 保存成一个文件,但是并不能解决我们存放路径随时间变化而递归存储的需求,
    #所以我在 定时任务中,每隔一分钟强制杀死一次tcpdump 进程,我们这条命令就会被终止 ,并进行循环执行,再次回到起点,持续执行不会结束,直至下一分钟再次pkill tcpdump
done

#C:编写定时任务,让每分钟杀死一次 tcpdump进程
    crontab -e
* * * * *  pkill tcpdump

#D:重载crond服务
    systemctl reload crond

第三步:编写自动清理脚本,清除前天的数据,并指定每天中午12点执行

#E:编写清理脚本,并赋予执行权限
[root@localhost ~]# cat clean-ssyt-packets.sh 
#!/bin/bash
rm -rf /home/`date -d "2 day ago" +"%Y-%m-%d"`/*/*.cap

#F:编写定时任务
    crontab -e
* 12 * * * /root/clean-ssyt-packets.sh

#G:重载crond服务
    systemctl reload crond

#H:查看运行的进程
[root@localhost ~]# ps -ef | grep tcpdu
tcpdump  13012 11751  2 23:48 pts/0    00:00:00 tcpdump -G 60 -i enp2s0f1  -s 0 -w /home/2020-03-06/23/SJ-SSYT-156.238.160.50_%Y-%m-%d_%H:%M:%S.cap
root     13014 10176  0 23:48 pts/0    00:00:00 grep --color=auto tcpdu
[root@localhost ~]# ps -ef | grep ssy
root     11751 10176  0 21:17 pts/0    00:00:00 /bin/bash /root/ssyt-packets-monitor.sh
root     13016 10176  0 23:48 pts/0    00:00:00 grep --color=auto ssy

第四步:启动循环脚本

   nohup /root/ssyt-packets-monitor.sh
微信打赏微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2022/11/20作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???