Linux 如何配置防火墙 firewalld 开放特定端口 8080

文章导读
在大多数基于 RPM 的 Linux 发行版(如 CentOS、RHEL、Fedora)上,使用 firewall-cmd 命令添加端口并重载配置是最稳妥的做法。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

在大多数基于 RPM 的 Linux 发行版(如 CentOS、RHEL、Fedora)上,使用 firewall-cmd 命令添加端口并重载配置是最稳妥的做法。

先说结论:该方案适合 CentOS 7+ 及 RHEL 系列系统,操作前需确保拥有 root 权限,完成后务必通过外部连接测试验收。

  • 适合:默认使用 firewalld 管理的 Linux 发行版
  • 先准备:确认防火墙服务运行状态及 root 权限
  • 验收:使用外部设备测试端口连通性

命令速用版

# 开放 8080/tcp 端口(永久生效)
sudo firewall-cmd `--permanent` `--add-port`=8080/tcp

# 重载配置使更改生效
sudo firewall-cmd `--reload`

为什么会这样

firewalld 是动态管理防火墙规则的服务,默认策略通常拒绝未明确允许的入站流量。直接修改底层 iptables 或 nftables 规则可能在服务重启后丢失,而通过 firewall-cmd 配置能确保规则写入持久化配置文件。

分步处理

1. 确认防火墙状态

systemctl status firewalld

如果显示 inactive,需先启动服务:systemctl start firewalld

Linux 如何配置防火墙 firewalld 开放特定端口 8080

2. 添加端口规则

使用 `--permanent` 参数确保重启后规则依然保留,指定协议通常为 tcp。

sudo firewall-cmd `--permanent` `--add-port`=8080/tcp

3. 重载配置

添加永久规则后不会立即生效,必须重载。

Linux 如何配置防火墙 firewalld 开放特定端口 8080
sudo firewall-cmd `--reload`

4. 检查本地规则列表

sudo firewall-cmd `--list-ports`

确认输出中包含 8080/tcp。

怎么验证是否生效

本地查看列表只能确认规则已添加,真实生效需从外部测试。

Linux 如何配置防火墙 firewalld 开放特定端口 8080

1. 外部连接测试

在另一台机器上使用 curl 或 telnet:

curl -v http://<服务器 IP>:8080
# 或
telnet <服务器 IP> 8080

2. 查看日志

如果连接被拒,可查看防火墙日志确认是否有丢弃记录:

journalctl -u firewalld -n 50

常见坑

  • 忘记加 `--permanent`:仅当前会话生效,重启后规则丢失。
  • 忘记 reload:添加了永久规则但未重载,当前流量仍被拦截。
  • 协议选错:服务使用 UDP 却开放了 TCP,需根据实际业务选择。
  • SELinux 拦截:防火墙放行了但服务仍不可达,需检查 SELinux 是否允许该端口(公开资料中没有看到可靠的量化数据表明 SELinux 拦截概率,但这是常见排查方向)。

参考来源

  • firewalld 官方文档,firewall-cmd man page,URL: https://firewalld.org/documentation/man-pages/firewall-cmd.html
  • Red Hat 文档,Using firewalld,URL: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/using-firewalld_configuring-and-managing-networking