富规则能做什么
富规则(rich rule)在区域层面提供比『放行某服务』更细的控制能力:来源地址、端口、协议、动作(accept/reject/drop)、日志记录与速率限制都能组合进一条规则,语法接近自然语言。它适合表达『只允许这个网段访问这个数据库端口,并记录其余来源的尝试』这类需求,而无需退回到手写 iptables。
基本信息
| 命令入口 | firewall-cmd --add-rich-rule='rule ...' |
|---|---|
| 常用要素 | family=ipv4、source address=、port port=、protocol=、service name= |
| 动作 | accept、reject、drop |
| 日志 | log prefix="..." level="warning" |
| 限速 | limit value="30/m" 或 "5/s" |
| 查看与生效 | --list-rich-rules、加 --permanent 后 --reload |
典型使用场景
- 数据库端口只对应用服务器网段放行,其余来源拒绝并留日志
- 按来源分权:运维网段可用 SSH,业务网段只能访问业务端口
- 对高频访问做限速,缓解误配置或异常扫描带来的冲击
- 记录被拒绝的来源,便于定位配置遗漏或异常访问
- 替代粗粒度的服务放行,把访问控制收敛到来源维度
常用富规则
常用富规则
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" service name="ssh" log prefix="ssh-deny " level="warning" reject' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" service name="http" limit value="30/m" accept' --permanent
firewall-cmd --list-rich-rules # 查看当前区域已配置的富规则
firewall-cmd --reload # 让永久配置生效验证与日志排查
验证与日志排查
firewall-cmd --zone=public --list-rich-rules # 指定区域查看,确认规则落在预期区域
firewall-cmd --permanent --zone=public --list-rich-rules | wc -l # 清点规则条数
journalctl -k --since '10 min ago' | grep ssh-deny | head # 按前缀过滤被拒记录
firewall-cmd --remove-rich-rule='rule family="ipv4" service name="http" limit value="30/m" accept' --permanent # 删除写法与添加一致
firewall-cmd --check-config 2>/dev/null || echo '配置存在问题' # 部分版本支持配置检查要素与写法
| 要素 | 写法示例 | 说明 |
|---|---|---|
| family | family="ipv4" | 缺省时按规则匹配,建议显式声明 |
| source | source address="10.0.0.0/24" | 支持网段与单地址 |
| port | port port="3306" protocol="tcp" | 与 service 二选一表达 |
| action | accept / reject / drop | reject 会回拒绝报文,drop 直接丢弃 |
| log | log prefix="ssh-deny " level="warning" | 便于按前缀检索 |
| limit | limit value="30/m" | 超限流量按规则动作处理 |
带日志的富规则便于定位被拒来源:日志进入内核日志通道,用 journalctl -k 加 prefix 过滤即可,别在应用日志里找。
删除规则的写法必须与添加时完全一致:规则匹配按字符串比对,顺序或空格不同会删不掉,建议添加时就记录原文。