关键是要启用日志开关并确保日志可追溯、可分离、可分析:firewalld需执行--set-log-denied=all加--reload,iptables需在drop前插入log规则,并用rsyslog或journalctl分流至独立文件以便审计。

要真正监控所有防火墙拦截事件,关键不是“开了日志就行”,而是让每一条 DROP 或 REJECT 都留下可追溯的痕迹,并确保这些日志能被快速定位、长期留存、有效分析。firewalld 和 iptables/nftables 的实现路径不同,但目标一致:不漏记、不混杂、不难查。
firewalld:启用拦截日志并隔离存储
firewalld 默认完全不记录被拒绝的包,必须显式开启且正确配置落地路径:
- 运行 firewall-cmd --permanent --set-log-denied=all(或更轻量的 unicast),再执行 firewall-cmd --reload —— 缺少 reload,配置不会生效
- 验证是否启用:firewall-cmd --get-log-denied 应返回 all 或 unicast
- 默认日志混在 /var/log/messages(RHEL/CentOS)或 /var/log/syslog(Debian/Ubuntu)中,不建议直接 tail 查看;应使用 journalctl -u firewalld -f | grep "_DROP\|_REJECT" 实时过滤
- 为避免污染主日志,用 rsyslog 单独分流:在 /etc/rsyslog.d/firewalld.conf 中写入
:msg, contains, "_DROP" /var/log/firewalld.log
:msg, contains, "_REJECT" /var/log/firewalld.log
& stop
然后创建文件、设权限、重启 rsyslog 和 firewalld
iptables:在规则链中插入 LOG 动作
iptables 日志依赖手动插入 LOG 规则,位置和顺序决定是否真正记录到拦截行为:
- LOG 规则必须放在对应 DROP/REJECT 规则之前,例如:
iptables -I INPUT -p tcp --dport 22 -s 192.168.100.50 -j LOG --log-prefix "SSH-BLOCK: " --log-level 6
iptables -I INPUT -p tcp --dport 22 -s 192.168.100.50 -j DROP - 前缀(--log-prefix)和级别(--log-level 6=info)便于后续 grep 或日志系统识别;级别过高(如 7=debug)可能产生冗余
- 规则需持久化:CentOS/RHEL 运行 service iptables save;Debian/Ubuntu 执行 iptables-save > /etc/iptables/rules.v4
- 日志同样走内核日志子系统,查看方式同 firewalld:tail -f /var/log/kern.log(Debian)或 tail -f /var/log/messages(RHEL),或用 journalctl -k -f | grep "SSH-BLOCK"
日志分析:从原始条目到攻击线索
原始日志字段密集、格式固定,靠人工翻阅效率极低,应建立基础分析链:
- 提取高频攻击源:awk '/SRC=/ {print $10}' /var/log/firewalld.log | sort | uniq -c | sort -nr | head -10
- 统计被拒端口分布:awk '/DPT=/ {match($0, /DPT=([0-9]+)/, a); print a[1]}' /var/log/firewalld.log | sort | uniq -c | sort -nr
- 识别扫描行为:连续多个不同 DPT= 的 SRC= 同一 IP,大概率是端口扫描,可用脚本聚合时间窗口内请求次数
- 结合时间戳与协议字段(PROTO=TCP/UDP)判断业务异常:比如某时段大量 UDP DPT=53 被拒,可能 DNS 异常或伪造查询
运维注意事项:性能、留存与合规
日志不是开得越全越好,需平衡可观测性与系统开销:
- 生产环境慎用 --set-log-denied=all,优先选 unicast;避免记录广播、组播等无意义流量
- 启用 systemd-journald 持久化(设置 Storage=persistent 并创建 /var/log/journal)以防重启丢日志
- 对 /var/log/firewalld.log 配置 logrotate,例如每周轮转、保留 8 周、压缩归档
- 若需满足等保或 SOC2 审计要求,建议将日志转发至集中 SIEM(如 Graylog、ELK),而非仅本地留存











