跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

linux怎么开启防火墙端口_linux放行特定端口【操作】

启用firewalld服务需先执行sudo systemctl enable --now firewalld,再用sudo firewall-cmd --reload应用永久规则,且必须确认活跃zone并验证端口监听地址与外部连通性。 systemctl 启用 firewalld 服务 Linux 默认没开防火墙,
firewalld
处于 inactive 状态,放行端口前必须先启动它。不启动就直接
firewall-cmd
添加规则,操作会成功但不生效——因为底层服务根本没跑。 检查状态:
systemctl status firewalld
,看到
inactive (dead)
就得先启用 启用并开机自启:
sudo systemctl enable --now firewalld
确认运行中:
sudo firewall-cmd --state
应返回
running
如果系统用的是
ufw
(如 Ubuntu),别硬套
firewall-cmd
,命令和逻辑完全不同 firewall-cmd 放行 TCP/UDP 端口 用
firewall-cmd
开端口,关键在「永久生效」和「当前运行时」要分开操作。只加
--permanent
不重载,或只
--reload
不加永久参数,都会导致重启后失效或立刻不生效。 永久放行 TCP 8080:
sudo firewall-cmd --permanent --add-port=8080/tcp
永久放行 UDP 53:
sudo firewall-cmd --permanent --add-port=53/udp
立即应用所有永久规则:
sudo firewall-cmd --reload
验证是否生效:
sudo firewall-cmd --list-ports
(只显示当前运行时已加载的端口)
--add-port
不支持端口范围缩写如
8000-8010
,必须写成
8000-8010/tcp
,漏掉协议类型会报错 放行端口前先确认 zone 和接口绑定 firewalld 按 zone 管理规则,默认是
public
,但如果你改过 active zone,或网卡被绑到了
trusted
这类宽松 zone,
--add-port
可能加到错误区域,对外依然不通。 查当前活跃 zone:
sudo firewall-cmd --get-active-zones
查指定 zone 的开放端口:
sudo firewall-cmd --zone=public --list-ports
确保你要操作的 zone 是活跃的,或者显式指定:
sudo firewall-cmd --zone=public --permanent --add-port=22/tcp
别依赖
--get-default-zone
,它只告诉你默认值,不等于当前生效 zone 验证端口是否真通:别只信 firewall-cmd 输出
firewall-cmd --list-ports
显示了端口,不代表外部能连上。可能被云厂商安全组、宿主机 iptables、SELinux 或服务本身监听地址限制挡住。 本地测试连通性:
telnet localhost 8080
或
nc -zv localhost 8080
从另一台机器测:
nc -zv your-server-ip 8080
,失败优先查云平台安全组 确认服务监听在
0.0.0.0:8080
而非
127.0.0.1:8080
:
ss -tlnp | grep :8080
SELinux 可能拦截(尤其 CentOS/RHEL):
sudo setsebool -P httpd_can_network_bind 1
(按服务类型调整布尔值) 实际操作中最容易卡在「开了服务但忘了 reload」,或者「加了永久规则却没查 active zone」。firewalld 的两层状态(runtime + permanent)不是设计缺陷,而是故意留的缓冲区——但恰恰是这里,90% 的“明明加了端口却不通”问题藏在其中。

相关文章