跳转到内容
搜索 AlmaLinux 文档

    浏览当前文档目录

    AlmaLinux 9:放行一个端口

    服务起在 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)。

    Terminal window
    firewall-offline-cmd --get-zones
    firewall-offline-cmd --get-default-zone
    firewall-offline-cmd --zone=public --list-services
    block dmz drop external home internal public trusted work
    public
    cockpit dhcpv6-client ssh

    本次安装的 firewalld 在 public 里默认放行 cockpit、dhcpv6-client、ssh 三个服务(静态配置;其他主机是否被改过要看 --list-all)。

    以上是 firewall-offline-cmd 的实测输出(不是 firewall-cmd 的运行时输出)。

    Terminal window
    sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
    sudo firewall-cmd --reload
    sudo firewall-cmd --zone=public --list-ports

    只加 --permanent 不 --reload,规则要等下次 reload/重启才生效;不加 --permanent 只改运行时,重启就丢——两个都要。

    Terminal window
    firewall-cmd --zone=public --list-all
    public
    target: default
    icmp-block-inversion: no
    interfaces:
    sources:
    services: cockpit dhcpv6-client ssh
    ports: 8080/tcp

    ports: 里有 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 并保证重启后仍在”
    Terminal window
    sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
    sudo firewall-cmd --reload
    sudo systemctl restart firewalld
    firewall-cmd --zone=public --list-ports

    检查:

    1. firewall-cmd --zone=public --list-ports → 含 8443/tcp
    2. firewall-cmd --permanent --zone=public --list-ports → 同样含
    3. 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` 时按单协议处理,容易只开了一半。