Linux关闭防火墙及开放特定端口的配置方法
在Linux上处理防火墙和端口,很多人以为就是“开”或“关”那么简单。但实际情况是,即便你停掉了firewalld或ufw,服务可能依然无法访问。问题往往出在服务监听、云平台安全组,甚至是SELinux策略上。所以,正确的做法是根据你的发行版选对工具,然后进行逐层排查。 怎么确认当前用的是 fire
在Linux上处理防火墙和端口,很多人以为就是“开”或“关”那么简单。但实际情况是,即便你停掉了firewalld或ufw,服务可能依然无法访问。问题往往出在服务监听、云平台安全组,甚至是SELinux策略上。所以,正确的做法是根据你的发行版选对工具,然后进行逐层排查。

怎么确认当前用的是 firewalld 还是 ufw
第一步千万别搞错:不同Linux发行版的默认防火墙工具不一样,用错命令会徒劳无功。
- 在CentOS、RHEL或Fedora上,通常使用
firewalld。运行sudo systemctl status firewalld,如果看到active (running),就说明它在工作。 - 在Ubuntu或Debian上,默认则是
ufw。用sudo systemctl status ufw来检查状态,active才表示已启用。 - 如果上面两个服务都是
inactive,但执行sudo iptables -L -n却能看到规则,那说明系统直接使用了底层的iptables。这在一些老系统或容器宿主机上比较常见。
这里有个关键点:firewalld和ufw最好不要同时启用,它们可能会冲突。如果你决定用一个,记得把另一个彻底停用并禁用,而不是仅仅停止服务。
firewalld 下开放或关闭单个端口
使用firewalld时,最容易踩的坑就是规则不生效。它的规则分“临时”和“永久”,想让配置在重启后依然有效,必须记住两个步骤:加--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 --permanent --remove-port=8080/tcp - 重载配置(至关重要!):
sudo firewall-cmd --reload - 查看当前开放的端口:
sudo firewall-cmd --list-ports
另外,协议类型/tcp或/udp是强制指定的,只写端口号8080会导致命令报错。
ufw 下快速开关端口
ufw的命令相对更直观,但也有一些自己的“脾气”。首先,它默认可能是禁用的,需要先启用。
- 首次启用服务:
sudo ufw enable - 开放TCP端口:
sudo ufw allow 8080(默认协议是TCP),也可以显式指定sudo ufw allow 8080/tcp - 开放UDP端口:
sudo ufw allow 53/udp - 删除规则:这里有个小技巧。你不能直接用端口号删除,需要先
sudo ufw status numbered查看规则的编号,然后根据编号删除,例如删除第二条规则:sudo ufw delete 2。直接运行ufw deny 8080并不会删除允许规则,反而是在它前面加了一条拒绝规则,可能导致混乱。 - 查看所有规则:
sudo ufw status verbose
需要注意的是,ufw的规则是有顺序的。如果一条deny规则排在allow规则前面,放行就会失效。除非你非常清楚自己在做什么,否则建议只用命令来增删规则,不要手动编辑/etc/ufw/user.rules这类配置文件。
关防火墙 ≠ 端口就通,还有三层要过
这是最让人头疼的部分:明明防火墙已经关了,端口也配置好了,为什么还是连不上?问题可能出在下面几层。
- 服务监听状态:防火墙允许了,但服务本身在监听吗?用
sudo ss -tlnp | grep :8080或sudo netstat -tlnp | grep :8080检查一下。如果看不到对应进程,可能是服务没启动,或者它只绑定在了127.0.0.1(本地回环地址)上,导致外部无法访问。 - 云服务器安全组:如果你用的是阿里云、腾讯云、AWS等云服务器,系统防火墙之上还有一层“安全组”或“网络ACL”。这层配置优先级很高,必须登录云控制台,确保对应端口和IP范围已经放行。
- SELinux策略:在RHEL、CentOS等系统上,SELinux可能会拦截网络连接。可以临时测试:执行
sudo setenforce 0将其设为宽容模式。但这只是临时方案,长期解决需要配置正确的SELinux策略,而不是简单地关闭它。 - 最终验证:别只相信配置。本地可以用
telnet 127.0.0.1 8080测试,远程服务器则可以用nc -zv 你的服务器IP 8080来验证连通性。
最后,再提醒两个最高频的疏忽:在firewalld中添加永久规则后忘了--reload;在ufw中删除规则时没看编号,删错了条目。这两步一旦漏掉,前面的所有操作可就都白费了。


































