firewalld 常用规则:放行端口与富规则限速
发布时间:2026-05-25 15:45       
更新时间:2026-05-25 16:56
CentOS 7 之后默认防火墙换成了 firewalld,从 iptables 时代过来的习惯得跟着调整。它最容易被误解的一点是"运行时"与"永久"两套配置,先把这个理清,剩下的命令都不难。
reload 与 permanent 的关系
不带 --permanent 的规则立即生效,但重启 firewalld 或机器后消失;带 --permanent 的规则写进磁盘,要等 firewall-cmd --reload 才生效。习惯做法是成对执行:先加 --permanent 落盘,再 reload 让它生效。临时调试则反过来:只执行运行时版本,比如临时开个端口给同事验证,忘了关也只活到下次重启。
放行服务与端口
firewall-cmd --list-all 先看当前配置。
放行一个已知服务:firewall-cmd --permanent --add-service=https
放行自定义端口:firewall-cmd --permanent --add-port=8080/tcp
哪些服务能按名放行,firewall-cmd --get-services 能列出全部清单,比背端口号省事。撤销换成 --remove-service 或 --remove-port,改完记得 reload。
富规则:更精细的控制
只允许某个网段访问数据库端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="3306" protocol="tcp" accept'
给命中规则的日志限速,防止被刷爆:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="22" protocol="tcp" log prefix="ssh-hit" limit value="6/m" accept'
limit value="6/m" 表示这类日志每分钟最多记 6 条,攻击刷屏时日志盘不会被灌满。富规则的三段参数可以自由组合,先想清楚"谁、访问哪个端口、怎么办",再翻译成命令,比硬背模板靠谱。
区域概念一句带过
firewalld 把网卡归入 zone(区域)管理,默认区叫 public,单机场景用它就够,机器一般只属于一个区,firewall-cmd --get-active-zones 确认归属。
查看与排错
firewall-cmd --list-rich-rules 看富规则清单,firewall-cmd --permanent --list-all 看落盘配置。规则加了却不生效,多半是忘了 reload,或者被更靠前的 drop 规则先拦住了。另外 firewall-cmd --panic-on 会切断所有连接,在远程机器上千万别手滑。
还有一个高频场景:服务换了端口,老规则忘了撤,新旧两条同时在表里,排障容易被干扰。定期 firewall-cmd --list-all --permanent 过一遍,用不到的及时收掉。
再补一句边界:firewalld 管的是系统这一层,云服务器外层还有安全组,两边都放行业务才通。