firewalld富规则本身不处理syslog优先级,但支持log level="emerg"至"log level="debug"等标准值,该值会写入journald/rsyslog的priority字段,供siem按priority或syslogseverity解析告警。

Firewalld富规则本身不处理Syslog日志优先级(如LOG_INFO、LOG_ALERT等),它只负责网络层的匹配与动作。但你可以通过富规则的日志记录能力,配合系统日志配置,把特定网络事件打上可识别标记,再由rsyslog或journald转发至SIEM(如Splunk、ELK)。关键在于“触发日志→标准化格式→路由到SIEM”这条链路。
启用富规则日志并设置日志级别
firewalld的rich rule支持log动作,并可指定level参数(对应syslog facility/level),该值会体现在journald或rsyslog输出中:
- 添加带日志的富规则时,显式写log level="notice"或log level="alert",例如:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.0.2.100" port port="22" protocol="tcp" log level="alert" reject'
- level取值范围为emerg, alert, crit, err, warning, notice, info, debug,对应syslog标准优先级;SIEM可通过PRIORITY字段或SYSLOG_FACILITY字段提取
- 注意:log动作必须出现在reject/drop/accept之前,且一条规则只能有一个log动作
确保日志被正确捕获和转发
firewalld日志默认走journald,需确认其输出能被SIEM采集:
- 检查firewalld是否启用日志:运行firewall-cmd --get-log-denied,返回all或unicast表示已开启拒绝日志
- 手动触发一条日志规则后,用journalctl -u firewalld -n 20 --no-pager查看是否出现含LOG_ALERT或对应level的日志行
- 若使用rsyslog,需在/etc/rsyslog.d/50-firewalld.conf中添加转发规则,例如:
:msg, contains, "firewalld: ALERT" @@siem-server:514
在SIEM中按优先级做条件过滤与告警
日志到达SIEM后,利用其解析能力识别优先级字段:
- 在Splunk中,可用priority="1"(对应emerg)或syslogseverity="1"筛选高危拦截事件
- 在ELK中,Logstash filter可提取%{SYSLOGSEVERITY}字段,建立告警规则:当syslog_severity (即emerg/alert)时触发通知
- 建议为不同风险等级的富规则分配不同level:例如对暴力SSH扫描IP设level="alert",对异常端口探测设level="warning"
结合fail2ban实现自动升级日志优先级
单纯靠静态富规则难以覆盖动态威胁,推荐与fail2ban联动:
- 配置fail2ban的action为firewallcmd-rich-rules,并在其actionban中指定log level="alert"
- 这样每次fail2ban封禁IP时,不仅生成rich rule,还自动打出LOG_ALERT级日志,SIEM可据此聚合“首次封禁”、“高频封禁”等行为画像
- 示例fail2ban action配置片段:
actionban = firewall-cmd --add-rich-rule='rule family="ipv4" source address="" log level="alert" reject'










