firewalld 起步:默认状态与放行服务
适用:CentOS Stream 10(firewalld 2.4.3 实测;Stream 9 同理)· 核对日:2026-11-02 · 官方依据:firewall-cmd(1) 与 firewalld 官方文档。
Stream 装完 firewalld 就在跑:默认区 public、只放行 ssh 等三项。本页给出「看懂现状 → 放行一个服务 → 分清运行时与永久」的最短路径,全部命令在实机验证。
sudo权限(firewall-cmd 大多数子命令要 root);- 回退点:改动前先抄下
firewall-cmd --list-all的输出——一切改动的回滚就是把列表恢复成它。
先看懂装机后的默认状态
Section titled “先看懂装机后的默认状态”$ sudo firewall-cmd --get-default-zone$ sudo firewall-cmd --zone=public --list-all预期输出(实测摘录,@core 装机):
publicpublic (default, active) interfaces: ens18 services: cockpit dhcpv6-client ssh ports: forward: yes三个要点:
- public 是默认区,且已经 active(网卡 ens18 归它管);
- 默认放行的服务只有
ssh、cockpit、dhcpv6-client三个——要对外提供 http 等必须显式放行; --get-services能列出全部 263 个内置服务定义(每个都是 /usr/lib/firewalld/services/ 下的 XML,含端口与协议)。
forward: yes 是 EL10 的默认变化(EL9 为 no):同一区内接口间的转发默认允许。单机无感,做网关/多网卡时注意这条默认已经放开。
放行一个服务:运行时与永久
Section titled “放行一个服务:运行时与永久”$ sudo firewall-cmd --add-service=http$ sudo firewall-cmd --list-services预期输出(实测摘录):
successcockpit dhcpv6-client http ssh撤销运行时放行:
$ sudo firewall-cmd --remove-service=http$ sudo firewall-cmd --list-services回到 cockpit dhcpv6-client ssh。写进档案(重启后依然放行):
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --reload$ sudo firewall-cmd --list-services放行单个端口(没有服务定义时)用端口语法:--add-port=8080/tcp,移除 --remove-port=8080/tcp,永久与重载的规则相同。
$ sudo firewall-cmd --permanent --remove-service=http$ sudo firewall-cmd --permanent --remove-port=8080/tcp$ sudo firewall-cmd --reload$ sudo firewall-cmd --zone=public --list-all输出与「开始前」抄下的默认清单一致即恢复完成。
| 现象 | 原因 | 处理 |
|---|---|---|
| 服务起了但外部连不上 | 只改了 --permanent 没 reload | firewall-cmd --reload;或先做运行时放行验证 |
| 重启后放行失效 | 只做了运行时放行 | 补 --permanent --add-service=… + reload |
| 想知道某服务含哪些端口 | 服务是 XML 定义 | firewall-cmd --info-service=http |
| 区里没看到我的网卡 | 网卡绑在别的区 | firewall-cmd --get-active-zones 看归属 |
- 用 nmcli 配置静态 IP — 网络这半边的搭档页
- 装完 10 分钟 — 本页在装机流程中的位置
- 运维基线 — 系统性加固清单
- hub 共享教程:firewalld 进阶(富规则与直连接口)
- 官方:firewalld 文档