关键操作是执行firewall-cmd --set-log-denied=all并立即firewall-cmd --reload,否则日志不生效;默认日志混在/var/log/messages中,推荐用journalctl -u firewalld -f | grep "FINAL_REJECT"实时过滤或通过rsyslog分流至/var/log/firewalld.log便于审计。

要让内核防火墙真实记录所有被拒绝的入站连接,关键不是“加一条日志规则”,而是激活底层日志开关并确保日志能被可靠捕获。firewalld 默认完全不记 DROP/REJECT 日志,必须显式开启且 reload 才生效。
启用 firewalld 拒绝日志的核心操作
执行以下命令即可打开全量拒绝日志:
- firewall-cmd --set-log-denied=all —— 这是唯一必需的开关,它会写入永久配置(/etc/firewalld/firewalld.conf 中的 LogDenied=all)
- firewall-cmd --reload —— 必须执行,否则设置不生效;很多排查失败就是因为漏了这步
- 验证是否生效:firewall-cmd --get-log-denied 应返回 all
避免日志淹没,精准提取入侵线索
默认日志混在 /var/log/messages 或 /var/log/syslog 里,直接 tail 几乎找不到有效信息。推荐两种高效方式:
- 用 journalctl 实时过滤:
journalctl -u firewalld -f | grep "FINAL_REJECT" —— 看实时拦截
journalctl -u firewalld --since "1 hour ago" | grep "_DROP" —— 查最近丢弃包 - 注意:systemd-journald 默认不持久化,重启后日志丢失;如需长期保留,需启用 Storage=persistent 并创建 /var/log/journal
把拒绝日志单独分流到独立文件
为便于审计和自动化分析,建议用 rsyslog 把 firewalld 拒绝日志切到专用文件:
- 新建 /etc/rsyslog.d/firewalld.conf,内容两行:
:msg, contains, "_DROP" /var/log/firewalld.log
:msg, contains, "_REJECT" /var/log/firewalld.log & stop - 创建日志文件并授权:
touch /var/log/firewalld.log && chown root:root /var/log/firewalld.log - 重启服务:systemctl restart rsyslog firewalld
结合入侵排查实战看日志价值
拒绝日志本身不是结论,而是关键线索入口。例如:
- 短时间内大量 _DROP 来自同一 IP → 可能是端口扫描或暴力探测
- 某 IP 在 SSH 端口被 DROP 后,紧接着在其他高危端口(如 2375、6379)出现拒绝 → 暗示横向探测行为
- 日志中出现异常协议或非标准端口被拒 → 可能暴露未公开的服务或后门尝试

















