关于Linux服务器中tcpdump每日自动保存24小时捕获流量为pcap文件的技术咨询
Linux服务器中tcpdump每日自动保存24小时捕获流量为pcap文件的技术咨询
当然可以搞定!这对蜜罐场景来说太实用了——毕竟按天归档流量数据,后续分析起来方便多了。我给你两种靠谱的实现方案,你按需选就行:
方案一:通过Cron定时启停tcpdump
这种方法逻辑简单直接,每天午夜自动启动新的tcpdump进程,同时关掉前一天的进程,保证每个pcap文件刚好记录24小时的流量。
- 写个启停脚本:创建一个脚本文件,比如
/usr/local/bin/tcpdump_rotate.sh,把下面内容复制进去:
#!/bin/bash # 终止我们启动的tcpdump进程(避免误杀其他进程) pkill -f "tcpdump -i any -w /var/log/tcpdump/traffic_*.pcap" # 创建流量保存目录(不存在就自动建) mkdir -p /var/log/tcpdump # 启动新的tcpdump,文件名带当天日期,比如traffic_2024-05-20.pcap tcpdump -i any -w /var/log/tcpdump/traffic_$(date +%Y-%m-%d).pcap &
给脚本加执行权限:
chmod +x /usr/local/bin/tcpdump_rotate.sh
- 配置定时任务:运行
crontab -e打开定时任务编辑器,添加这一行:
0 0 * * * /usr/local/bin/tcpdump_rotate.sh
这行的意思是每天午夜0点整执行脚本,切换新的pcap文件。
- 手动启动第一次:第一次得自己手动跑一遍脚本,让它开始捕获流量:
/usr/local/bin/tcpdump_rotate.sh
方案二:用tcpdump内置的滚动保存功能(更灵活)
如果你不想每天启停进程,tcpdump本身支持按时间自动切分文件,再配合cron清理旧文件就行,更省心:
- 启动带滚动规则的tcpdump:直接运行下面的命令,它会每24小时生成一个带日期的新pcap文件,不会覆盖之前的:
tcpdump -i any -G 86400 -w /var/log/tcpdump/traffic_%Y-%m-%d.pcap &
参数解释下:
-G 86400:每86400秒(也就是24小时)自动生成一个新文件-w ...:指定保存路径和文件名格式,%Y-%m-%d会自动替换成当天的年-月-日
如果想让文件名更精确(比如带时分秒),可以改成:
tcpdump -i any -G 86400 -w /var/log/tcpdump/traffic_%Y-%m-%d_%H-%M-%S.pcap &
- 可选:定时清理旧文件:蜜罐流量可能很大,怕磁盘被占满的话,加个定时任务清理30天前的文件。运行
crontab -e添加:
0 1 * * * find /var/log/tcpdump -name "traffic_*.pcap" -mtime +30 -delete
这会每天凌晨1点自动删除30天前的pcap文件。
几个重要提醒
- 权限问题:tcpdump需要抓包权限,要么用root用户运行,要么给tcpdump加特殊权限(普通用户也能跑):
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
- 磁盘监控:蜜罐的流量可能远超普通服务器,一定要定期检查磁盘空间,避免满盘影响服务器运行。
- 捕获接口:上面用的
-i any是抓所有接口的流量,如果你只需要特定接口(比如eth0),把-i any改成-i eth0就行。
备注:内容来源于stack exchange,提问作者Jan




