linux开放端口需通过防火墙配置,主流系统用firewalld(centos/rhel等)或ufw(ubuntu/debian),关键步骤为确认服务状态、永久配置、重载生效;须按zone管理规则,优先用service名而非端口号,并推荐用rich rule限制ip访问。

Linux 开放指定端口,核心是让防火墙允许该端口的入站流量。当前主流发行版(如 CentOS/RHEL 7+、Rocky、AlmaLinux、Fedora)默认使用 firewalld;Ubuntu/Debian 系统则常用 ufw;少数场景仍用 iptables。操作关键点有三个:确认服务状态、做永久配置、重载生效。临时命令不写入配置,重启后失效,不能替代永久规则。
确认 firewalld 已启用并明确作用域
firewalld 按 zone(区域)管理规则,默认 zone 通常是 public,但规则只对绑定到该 zone 的网卡生效:
- 检查状态:
sudo systemctl status firewalld,若未运行则执行sudo systemctl start firewalld && sudo systemctl enable firewalld - 查看默认 zone:
sudo firewall-cmd --get-default-zone - 如需操作非默认 zone(如
internal),后续所有命令需显式加--zone=internal
永久开放 TCP/UDP 端口(适用于自定义端口)
适合 API、后台服务等监听非标端口(如 8080、3306、9001)的场景。必须同时执行永久添加与重载,缺一不可:
- 开放单个 TCP 端口:
sudo firewall-cmd --permanent --add-port=8080/tcp - 开放 UDP 端口(如 DNS):
sudo firewall-cmd --permanent --add-port=53/udp - 开放端口范围:
sudo firewall-cmd --permanent --add-port=8000-8010/tcp - 立即生效:
sudo firewall-cmd --reload - 验证:
sudo firewall-cmd --list-ports或sudo firewall-cmd --list-all
优先使用服务名而非端口号(更安全易维护)
firewalld 内置了 http、https、ssh、mysql 等服务定义,自动关联标准端口、协议及连接跟踪规则,比硬写端口更可靠:
- 列出所有可用服务:
sudo firewall-cmd --get-services - 永久启用 HTTPS:
sudo firewall-cmd --permanent --add-service=https(即开放 443/tcp) - 若服务监听非标端口(如 Nginx 在 8081),应创建自定义 service 文件,不建议直接开 8081 端口
- 重载后验证:
sudo firewall-cmd --list-services
限制仅特定 IP 或网段访问(生产环境强烈推荐)
开放端口却不设来源限制,等于暴露服务。用 rich rule 实现精准白名单,避免“全网可连”风险:
- 只允许某 IP 访问 3306:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.5" port port="3306" protocol="tcp" accept' - 只允许某网段访问 8080:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.2.0/24" port port="8080" protocol="tcp" accept' - 执行
sudo firewall-cmd --reload生效 - 注意:rich rule 是“追加”行为,若已有宽泛放行(如全局开 3306),需先删除再加白名单,否则无效











