如何让UFW记录防火墙规则变更历史以排查规则误删问题?
如何让UFW记录防火墙规则变更历史以排查规则误删问题?
嘿,刚好碰到过类似的排查场景,给你几个实用的法子来搞定UFW规则变更的记录问题,帮你揪出误删22端口规则的“元凶”:
方法一:监控UFW配置文件的变更
UFW的所有规则其实都存在/etc/ufw/目录下的配置文件里,我们可以用文件监控工具来追踪这些文件的修改、创建或删除操作,同时记录当前的规则状态,方便事后对比。
- 先安装inotify-tools工具(Debian/Ubuntu系):
sudo apt install inotify-tools
- 写一个简单的监控脚本(比如
/usr/local/bin/ufw-rule-monitor.sh):
#!/bin/bash # 定义日志文件路径 LOG_FILE="/var/log/ufw_rule_changes.log" # 要监控的UFW配置目录 MONITOR_DIR="/etc/ufw" # 记录监控启动时间 echo "=== UFW规则监控启动于 $(date) ===" >> $LOG_FILE # 持续监控目录下的文件变更事件 inotifywait -m -r -e modify,create,delete $MONITOR_DIR | while read dir event file; do # 记录事件详情 echo "$(date): 检测到 $event 事件,路径:$dir$file" >> $LOG_FILE # 附加当前的UFW规则列表,方便对比变化 echo "当前UFW规则状态:" >> $LOG_FILE ufw status numbered >> $LOG_FILE echo "----------------------------------------" >> $LOG_FILE done
- 给脚本添加执行权限:
sudo chmod +x /usr/local/bin/ufw-rule-monitor.sh
- 设置开机自启(用systemd服务):
创建/etc/systemd/system/ufw-monitor.service文件,内容如下:
[Unit] Description=UFW规则变更监控服务 After=network.target [Service] ExecStart=/usr/local/bin/ufw-rule-monitor.sh Restart=always [Install] WantedBy=multi-user.target
然后启用并启动服务:
sudo systemctl enable --now ufw-monitor.service
这样只要UFW的配置文件有任何变动,都会被记录到/var/log/ufw_rule_changes.log里,还能看到当时的完整规则状态。
方法二:给UFW命令加“日志包装”
如果你的自动化工具是通过ufw命令来修改规则的,那我们可以给系统的ufw命令套一层“壳”,让它先记录执行的命令、用户和时间,再去执行真正的UFW操作。
- 先备份原始的UFW命令:
sudo mv /usr/sbin/ufw /usr/sbin/ufw-real
- 创建新的
ufw包装脚本:
#!/bin/bash # 定义命令日志文件路径 LOG_FILE="/var/log/ufw_command_history.log" # 记录执行时间、用户和完整命令 echo "$(date): 用户 $USER 执行了命令:ufw $*" >> $LOG_FILE # 调用真正的UFW命令执行操作 /usr/sbin/ufw-real "$@"
把这个脚本保存为/usr/sbin/ufw,然后添加执行权限:
sudo chmod +x /usr/sbin/ufw
现在不管是手动执行ufw命令,还是自动化工具调用,所有操作都会被记录到/var/log/ufw_command_history.log里,你能精准看到什么时候、谁执行了删除22端口规则的命令。
小建议
两个方法可以结合使用:监控配置文件能捕捉到所有(包括直接改配置文件的)变更,而命令日志能精准追踪到操作来源,双管齐下的话,排查问题会更高效。
备注:内容来源于stack exchange,提问作者John Rix
相关产品推荐
相关产品推荐

