AlmaLinux 9:放行一个端口
什么时候该用它
Section titled “什么时候该用它”服务起在 8080、外部连不上,十有八九是 firewalld 没放行。firewalld 不是一张规则表,而是按 zone 分组的规则集:先确定网卡在哪个 zone,再改那个 zone 的端口或服务。
在 almalinux:9 容器(AlmaLinux 9.8,firewalld 1.3.4-20.el9_8)里用 firewall-offline-cmd 读取静态配置:--get-zones、--get-default-zone、--zone=public --list-services、--add-port=8080/tcp、--list-ports、--list-all。日志:plans/content-expansion/evidence/logs/alma-firewalld-zones.log。
容器没有 systemd,firewall-cmd 需要运行中的 firewalld 守护进程,所以下面 firewall-cmd 的运行时命令未在本环境执行(E3),静态配置的输出才是实测(E1)。
先看清 zone
Section titled “先看清 zone”firewall-offline-cmd --get-zonesfirewall-offline-cmd --get-default-zonefirewall-offline-cmd --zone=public --list-servicesblock dmz drop external home internal public trusted workpubliccockpit dhcpv6-client ssh本次安装的 firewalld 在 public 里默认放行 cockpit、dhcpv6-client、ssh 三个服务(静态配置;其他主机是否被改过要看 --list-all)。
以上是
firewall-offline-cmd的实测输出(不是firewall-cmd的运行时输出)。
放行一个端口
Section titled “放行一个端口”sudo firewall-cmd --permanent --zone=public --add-port=8080/tcpsudo firewall-cmd --reloadsudo firewall-cmd --zone=public --list-ports只加 --permanent 不 --reload,规则要等下次 reload/重启才生效;不加 --permanent 只改运行时,重启就丢——两个都要。
firewall-cmd --zone=public --list-allpublic target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: 8080/tcpports: 里有 8080/tcp 才算放行成功。
- 只写
--add-port=8080:默认按单协议处理,需要 UDP 时要显式写8080/udp; - 改错 zone:网卡在
public却写了--zone=internal,先用firewall-cmd --get-active-zones确认; - 服务只听 127.0.0.1:放行了也没用,用
ss -lntp | grep 8080确认监听地址。
练习:放行 8443/tcp 并保证重启后仍在
Section titled “练习:放行 8443/tcp 并保证重启后仍在”sudo firewall-cmd --permanent --zone=public --add-port=8443/tcpsudo firewall-cmd --reloadsudo systemctl restart firewalldfirewall-cmd --zone=public --list-ports检查:
firewall-cmd --zone=public --list-ports→ 含8443/tcpfirewall-cmd --permanent --zone=public --list-ports→ 同样含systemctl restart firewalld后再查 → 仍在
常见问题
为什么 `--add-port` 重启后失效?
因为没加 `--permanent`:不加它只改运行时,重启即丢;加了 `--permanent` 还要 `--reload` 才在当前运行中生效。两者一起用。
命令成功但外部还是连不上?
先确认网卡在哪个 zone(`firewall-cmd --get-active-zones`),再确认服务监听地址(`ss -lntp`)。服务只听 127.0.0.1 时,放行端口也没用。
UDP 端口怎么写?
显式写协议:`--add-port=8080/udp`。只写 `8080` 时按单协议处理,容易只开了一半。