您的位置:首页 >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 里所谓的“默认拦截规则”,并不是一条拿来就能直接改的单独语句。它本质上是由 firewalld 的 zone 默认策略共同拼出来的,也就是 default_zone + target,再加上链级别的默认动作一起决定。说白了,动手修改之前,必须先分清楚到底是在改“入站默认拒绝”这类行为,还是在调整“某个 zone 的默认放行逻辑”;这一步要是没想明白,很容易一操作就把 SSH 连接直接弄断。
firewalld 不像 iptables 那样有显式的 INPUT DROP 规则。它的“默认拦截”来自两层:
default_zone(如 public)的 target 值,默认是 default,等价于“只放行白名单里的服务/端口,其余一律拒绝”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 的「白名单范围」,而非“默认拦截开关”。常见做法:
firewall-cmd --add-service=xxx --permanent 添加预定义服务(如 http、mysql),它们自带端口+协议+辅助模块(如 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 是最常导致“改了没用”的原因。
如果你需要临时允许大量端口或动态端口段(比如 Docker 或 K8s 场景),不要停 firewalld 或切回 iptables,而是:
sudo firewall-cmd --permanent --new-zone=trusted-internalACCEPT:sudo firewall-cmd --permanent --zone=trusted-internal --set-target=ACCEPTsudo firewall-cmd --permanent --zone=trusted-internal --change-interface=eth1sudo firewall-cmd --reload这样外网仍走 public(默认拦截),内网走新 zone(默认放行),风险隔离清晰。直接 systemctl stop firewalld 会丢失所有 zone 状态,且重启后可能因网络脚本触发自动拉起,造成策略漂移。
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 请求。
上一篇:Ubuntu如何取消屏幕自动锁定
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9