网络接口重启后Zeek (Bro)崩溃,如何实现zeekctl进程自动重启?
Zeek eth0重启后进程崩溃自动恢复方案
报错原因是Zeek进程捕获数据包时绑定的eth0接口下线,进程无法读取数据包触发崩溃,可通过以下两种方案实现网络接口恢复后自动重启zeekctl进程:
方案1:udev规则+systemd服务触发(实时生效)
- 第一步:创建Zeek systemd服务文件
/etc/systemd/system/zeek.service,写入以下内容:
[Unit] Description=Zeek Network Security Monitor After=network.target [Service] Type=forking ExecStart=/opt/zeek/bin/zeekctl start ExecStop=/opt/zeek/bin/zeekctl stop ExecReload=/opt/zeek/bin/zeekctl restart User=root Group=root Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
- 第二步:创建网卡状态监听udev规则
/etc/udev/rules.d/99-eth0-monitor.rules,写入以下内容:
SUBSYSTEM=="net", ACTION=="up", KERNEL=="eth0", TAG+="systemd", ENV{SYSTEMD_WANTS}="zeek.service"
- 第三步:执行命令生效配置:
systemctl daemon-reload systemctl enable zeek.service udevadm control --reload-rules
配置完成后,只要eth0触发上线动作,系统会自动拉起Zeek服务。
方案2:定时监控脚本兜底(配置简单兼容性强)
- 第一步:创建监控脚本
/opt/zeek/check_zeek_status.sh,写入以下内容:
#!/bin/bash # 校验eth0是否已恢复上线 ip link show eth0 | grep -q "UP,LOWER_UP" || exit 0 # 校验Zeek进程状态,异常则自动重启 /opt/zeek/bin/zeekctl status | grep -q "running" || /opt/zeek/bin/zeekctl restart
- 第二步:给脚本添加执行权限:
chmod +x /opt/zeek/check_zeek_status.sh
- 第三步:添加crontab定时任务,执行
crontab -e写入以下规则:
* * * * * /opt/zeek/check_zeek_status.sh > /dev/null 2>&1
配置完成后系统每分钟会检查一次网卡和Zeek状态,符合条件就自动重启Zeek。
注意事项
- 确认
/opt/zeek/etc/node.cfg中对应节点的interface参数配置为eth0,避免网卡名映射异常 - 首次配置后可手动执行
zeekctl check校验配置合法性,避免配置错误导致重启失败
内容的提问来源于stack exchange,提问作者Renier Collazo
相关产品推荐
相关产品推荐

