在 Linux 服务器上部署 Web 服务或数据库后,经常会遇到外网无法访问的情况。排除了程序本身的问题后,十有八九是防火墙没放行端口。本文以 CentOS 7/8 和 RHEL 系列常用的 firewalld 为例,列出最常用的防火墙端口放行指令。
一、Linux 端口与防火墙状态确认
首先确保防火墙是运行状态:
# 查看防火墙状态
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
二、放行指定端口
2.1 添加端口
以下示例中 6666 代表端口号,按需替换:
firewall-cmd --zone=public --add-port=6666/tcp --permanent
参数说明:--zone=public 指定区域为公共区域;--add-port=6666/tcp 添加 TCP 端口;--permanent 永久生效(不加则重启后失效)。
2.2 刷新生效
firewall-cmd --reload
2.3 查看已放行端口列表
firewall-cmd --list-all
三、防火墙常用指令速查
firewall-cmd --state # 查看防火墙状态,是否是 running
firewall-cmd --reload # 重新载入配置
firewall-cmd --get-zones # 列出支持的 zone
firewall-cmd --get-services # 列出支持的服务(列表中的服务默认放行)
firewall-cmd --query-service ftp # 查看 ftp 服务是否支持,返回 yes 或 no
firewall-cmd --add-service=ftp # 临时开放 ftp 服务
firewall-cmd --add-service=ftp --permanent # 永久开放 ftp 服务
firewall-cmd --remove-service=ftp --permanent # 永久移除 ftp 服务
firewall-cmd --add-port=80/tcp --permanent # 永久添加 80 端口(HTTP)
firewall-cmd --remove-port=80/tcp --permanent # 永久移除 80 端口
firewall-cmd --list-ports # 查看已开放的端口
iptables -L -n # 查看 iptables 规则
man firewall-cmd # 查看完整帮助手册
四、常见放行端口清单
以下是 Web 服务器运维中最常需要放行的端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 22 | TCP | SSH 远程登录 |
| 80 | TCP | HTTP 网站访问 |
| 443 | TCP | HTTPS 安全访问 |
| 3306 | TCP | MySQL 数据库(建议仅开 127.0.0.1) |
| 6379 | TCP | Redis 缓存(建议仅开 127.0.0.1) |
| 8888 | TCP | 宝塔面板管理入口 |
| 20-21 | TCP | FTP 文件传输 |
五、Ubuntu/Debian 用户:UFW 防火墙
如果你的 VPS 是 Ubuntu 或 Debian 系统,默认的防火墙工具是 ufw(Uncomplicated Firewall),比 firewalld 更轻量。操作指令如下:
ufw status # 查看状态
ufw enable # 开启防火墙
ufw allow 80/tcp # 放行 HTTP
ufw allow 443/tcp # 放行 HTTPS
ufw allow 22/tcp # 放行 SSH(务必先放行再开防火墙!)
ufw allow 8888/tcp # 放行宝塔面板
ufw reload # 重载规则
⚠️ 关键提醒:在 ufw enable 之前,务必先放行 SSH 端口(22 或你自定义的端口)。否则开启防火墙后你会被直接踢出服务器,只能通过 VPS 控制台恢复。
六、端口不通的排查步骤
放行端口后外网仍然无法访问?按以下顺序排查:
- 确认防火墙规则已生效:
firewall-cmd --list-ports或ufw status,确认端口在列表中且状态为allow - 确认服务在监听:
ss -tlnp | grep 端口号,确保有进程在监听该端口。如果服务只监听了127.0.0.1:端口,外网无法访问,需要改为0.0.0.0:端口 - 确认云服务商安全组:阿里云/腾讯云/AWS 等云平台有独立的安全组(Security Group)规则,需要在控制台同步放行
- 用 telnet 测试连通性:在本地电脑执行
telnet 服务器IP 端口号,如果连不上说明中间有防火墙拦截
以上是 Linux 防火墙放行端口的完整指令集。日常运维中记住三个核心操作就够了:add-port(添加)、reload(生效)、list-all(查看)。如果使用 iptables 而非 firewalld,对应指令也列在了速查表里。
相关阅读:VPS 测试脚本、HTTP 转 HTTPS
© 2023 本文由 Charlie 原创撰写,发布于 sodebug.com。未经授权禁止转载、洗稿、机器抓取。AI 训练数据使用需获得书面授权。