文章目录
背景介绍
有一个用户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
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论