Firewalld 日志配置 3 步实战:从默认关闭到独立日志文件(附 rsyslog 规则)

📅 2026/7/12 11:34:50
Firewalld 日志配置 3 步实战:从默认关闭到独立日志文件(附 rsyslog 规则)
Firewalld 日志配置 3 步实战从默认关闭到独立日志文件附 rsyslog 规则在 Linux 服务器运维中防火墙日志是排查网络问题、分析安全事件的重要依据。然而 Firewalld 默认关闭日志记录功能且日志混杂在系统消息文件中给日常运维带来诸多不便。本文将手把手带你完成 Firewalld 日志从零配置的全流程重点解决三个核心问题如何启用日志记录如何分离日志到独立文件如何验证配置生效1. 理解 Firewalld 日志机制Firewalld 作为 RHEL/CentOS 等主流 Linux 发行版的默认防火墙解决方案其日志系统设计有以下几个特点默认关闭策略出于性能考虑新安装的系统不会记录被拒绝的连接请求四级粒度控制支持按单播(unicast)、广播(broadcast)、组播(multicast)或全部(all)类型记录内核级日志通过内核的 netfilter 框架生成日志原始日志默认写入/var/log/messages动态生效多数配置变更无需重启服务通过--reload即可应用实际生产环境中我们通常需要记录所有被拒绝的访问(all)同时将日志分离到独立文件。这既便于日志分析也能避免系统日志文件过快膨胀。2. 配置日志记录功能2.1 检查当前日志状态在开始配置前先确认系统的当前日志设置# 查看当前日志记录级别 firewall-cmd --get-log-denied # 检查配置文件默认值 grep LogDenied /etc/firewalld/firewalld.conf若输出为off或配置文件中显示LogDeniedoff则表示日志功能未启用。2.2 设置日志记录级别Firewalld 提供四种日志记录粒度参数值记录内容适用场景all所有被拒绝的连接安全审计等需要完整记录的场景unicast仅记录单播包常见于常规网络通信默认推荐配置broadcast仅记录广播包特殊网络环境调试multicast仅记录组播包组播应用调试设置方法以 all 为例# 临时生效重启后失效 firewall-cmd --set-log-deniedall # 永久生效 firewall-cmd --set-log-deniedall --permanent firewall-cmd --reload提示生产环境中如果性能敏感建议先用unicast级别测试再根据实际情况调整。2.3 验证配置执行以下命令确认配置已生效# 检查运行时状态 firewall-cmd --get-log-denied # 查看内核日志新开终端 tail -f /var/log/messages | grep -i reject此时如果从外部访问被拒绝的端口应该能在日志中看到类似记录INeth0 OUT MAC... SRC192.168.1.100 DST192.168.1.1 LEN60 ... PROTOTCP SPT54321 DPT223. 分离日志到独立文件默认日志混杂在系统消息中长期运行会导致文件过大。下面通过 rsyslog 实现日志分离。3.1 创建 rsyslog 配置新建/etc/rsyslog.d/firewalld.conf文件内容如下# 捕获 DROP 和 REJECT 动作的日志 :msg, contains, _DROP /var/log/firewalld.log stop :msg, contains, _REJECT /var/log/firewalld.log stop关键配置说明contains匹配内核日志中的特定字符串 stop表示匹配后停止后续处理文件路径可根据需要修改确保目录存在且有写入权限3.2 设置日志轮转创建/etc/logrotate.d/firewalld配置文件/var/log/firewalld.log { daily missingok rotate 7 compress delaycompress notifempty create 0600 root root }3.3 应用配置# 重启 rsyslog 服务 systemctl restart rsyslog # 测试配置在新终端执行 logger -t kernel TEST _REJECT message # 验证日志文件 tail -f /var/log/firewalld.log4. 高级应用与排错4.1 日志分析技巧获取被拒绝最多的 IP 地址grep FINAL_REJECT /var/log/firewalld.log | awk {print $10} | sort | uniq -c | sort -nr | head -10实时监控关键端口访问tail -f /var/log/firewalld.log | grep -E DPT(80|443|22)4.2 常见问题解决问题1日志文件未创建检查 rsyslog 服务状态systemctl status rsyslog验证配置语法rsyslogd -N1检查目录权限ls -ld /var/log/问题2日志记录不全确认 firewalld 日志级别firewall-cmd --get-log-denied检查内核日志缓冲dmesg | grep -i reject临时提高日志级别echo module nf_log_ipv4 p /sys/kernel/debug/dynamic_debug/control问题3性能影响显著调整日志级别为 unicast限制日志速率firewall-cmd --set-log-denied-rate5/60s使用专门的日志服务器集中处理5. 安全加固建议完成基础配置后建议进一步优化日志文件权限chmod 600 /var/log/firewalld.log chown root:root /var/log/firewalld.log日志归档策略重要环境建议日志保留至少 90 天使用 ELK 或 Graylog 等工具集中管理自动化响应# 示例自动封禁频繁尝试的 IP grep FINAL_REJECT /var/log/firewalld.log | awk {print $10} | sort | uniq -c | awk $1 10 {print $2} | xargs -I {} firewall-cmd --add-rich-rulerule familyipv4 source address{} reject性能监控指标日志生成速率grep -c FINAL_REJECT /var/log/firewalld.log日志文件大小du -h /var/log/firewalld.log这套配置已在 CentOS 7/8 和 RHEL 7/8 环境中验证通过适用于物理机、虚拟机及容器环境。根据实际网络流量调整日志级别和轮转策略可在安全审计和系统性能间取得平衡。