商城首页欢迎来到中国正版软件门户

您的位置:首页 >CentOS 7怎么修改具体的防火墙默认拦截规则

CentOS 7怎么修改具体的防火墙默认拦截规则

  发布于2026-08-12 阅读(0)

扫一扫,手机访问

CentOS 7 里的“默认拦截规则”,其实并不是某一条孤立的规则在起作用,而是 firewalld 的 default_zone(比如 public)和它对应的 target(默认是 default)一起决定的:明确加入白名单的服务和端口会被放行,没被放行的,其余流量都会直接拒绝。要改这套行为,得通过 firewall-cmd 去调整 zone target,或者增删 service、port、rich rule;另外还有个关键点不能漏,必须配合 --permanent 和 --reload,修改后才会真正生效。

CentOS 7怎么修改具体的防火墙默认拦截规则

CentOS 7 里所谓的“默认拦截规则”,并不是一条拿来就能直接改的单独语句。它本质上是由 firewalld 的 zone 默认策略共同拼出来的,也就是 default_zone + target,再加上链级别的默认动作一起决定。说白了,动手修改之前,必须先分清楚到底是在改“入站默认拒绝”这类行为,还是在调整“某个 zone 的默认放行逻辑”;这一步要是没想明白,很容易一操作就把 SSH 连接直接弄断。

firewalld 的 default_zone 和 target 决定拦截起点

firewalld 不像 iptables 那样有显式的 INPUT DROP 规则。它的“默认拦截”来自两层:

  • default_zone(如 public)的 target 值,默认是 default,等价于“只放行白名单里的服务/端口,其余一律拒绝”
  • 底层 netfilter 链的默认策略仍是 ACCEPT,但 firewalld 通过 rich rule 或 zone 配置在 runtime 中插入了隐式拒绝逻辑

所以你不能靠改 /etc/firewalld/zones/public.xml 里某一行来“放开默认拦截”,而要改 zone 的 target 或换 zone。

例如把 public zone 的 target 改为 ACCEPT(极不推荐):

sudo firewall-cmd --permanent --zone=public --set-target=ACCEPT
sudo firewall-cmd --reload

⚠️ 这会让所有未显式拒绝的入站连接被接受——相当于关掉防火墙逻辑,仅保留基础链控制。

真正可控的“默认拦截行为”在 zone 的 target 和 service/port 白名单里

你日常能安全调整的,其实是 zone 的「白名单范围」,而非“默认拦截开关”。常见做法:

  • firewall-cmd --add-service=xxx --permanent 添加预定义服务(如 httpmysql),它们自带端口+协议+辅助模块(如 conntrack)
  • firewall-cmd --add-port=3306/tcp --permanent 开放单端口,但不会自动处理 RELATED/ESTABLISHED 流量(firewalld 默认已内置处理)
  • firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanent 做源 IP 级放行,比改 target 更精准

注意:--permanent 必须配合 --reload 才生效;漏掉 --reload 是最常导致“改了没用”的原因。

想彻底绕过 firewalld 的默认拦截?别直接停服务,先切 zone

如果你需要临时允许大量端口或动态端口段(比如 Docker 或 K8s 场景),不要停 firewalld 或切回 iptables,而是:

  • 新建一个宽松 zone:sudo firewall-cmd --permanent --new-zone=trusted-internal
  • 设其 target 为 ACCEPTsudo firewall-cmd --permanent --zone=trusted-internal --set-target=ACCEPT
  • 把内网网卡绑定过去:sudo firewall-cmd --permanent --zone=trusted-internal --change-interface=eth1
  • sudo firewall-cmd --reload

这样外网仍走 public(默认拦截),内网走新 zone(默认放行),风险隔离清晰。直接 systemctl stop firewalld 会丢失所有 zone 状态,且重启后可能因网络脚本触发自动拉起,造成策略漂移。

改配置文件前务必确认你改的是 permanent 配置,不是 runtime

firewalld 区分 runtime(当前生效)和 permanent(重启后生效)。直接编辑 /etc/firewalld/zones/public.xml 只影响 permanent,但不会自动同步到 runtime —— 你得手动 --reload,否则 firewall-cmd --list-all 显示的还是旧规则。

更危险的是:如果 XML 文件格式出错(比如少闭合标签、属性值没加引号),--reload 会失败并回退到上一次有效配置,但错误信息只写在 journal 日志里:journalctl -u firewalld | tail -20。没人查日志就以为“改了没反应”,其实服务早 silently 拒绝了 reload 请求。

本文转载于:https://www.php.cn/faq/2961191.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注