属于大家的
VPS知识分享站

服务器端口不通怎么办?VPS端口、防火墙和安全组排查方法

端口不通是VPS运维中最常见的问题之一。排查的思路是从外到内、逐层排除。

这篇文章给你一套系统化的排查方法。

排查顺序:安全组 → 系统防火墙 → 服务状态

端口不通通常只有三个原因:
1. 云平台的安全组没放行
2. 操作系统的防火墙拦截了
3. 服务没有监听该端口

按这个顺序排查,基本都能定位问题。

第一步:检查安全组

安全组是云平台层面的防火墙,是第一层防线。如果安全组没放行,请求根本到不了服务器。

操作方法:
1. 登录萤光云控制台
2. 进入对应服务器的”安全组”设置
3. 检查需要开放的端口是否在规则列表中
4. 如果没有,添加规则放行

注意: 安全组修改后立即生效,不需要重启服务器。

第二步:检查系统防火墙

安全组放行后,如果系统防火墙也拦截了,端口还是不通。

检查UFW状态(Ubuntu/Debian):

ufw status

查看是否有规则阻止了你的端口。

放行端口:

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp

检查firewalld状态(CentOS/RHEL):

firewall-cmd --list-all

放行端口:

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

检查iptables规则:

iptables -L -n

如果看到REJECT或DROP规则阻止了你的端口,需要修改或删除该规则。

第三步:检查服务状态

安全组和防火墙都放行了,如果服务本身没有运行或没有监听该端口,端口仍然不通。

检查端口是否在监听:

ss -tlnp | grep :80

如果有输出,说明服务正在监听80端口。如果没有输出,说明服务没有启动或配置有误。

检查服务状态:

# Nginx
systemctl status nginx

# Apache
systemctl status httpd

# MySQL
systemctl status mysqld

# SSH
systemctl status sshd

如果服务没有运行,启动它:

systemctl start nginx
systemctl enable nginx    # 设置开机自启

第四步:从外部测试端口

确认以上三步都没问题后,从外部测试端口是否可达。

使用telnet测试:

telnet 服务器IP 80

如果连接成功,显示”Connected”,说明端口通畅。如果超时或拒绝,说明还有问题。

使用nc测试:

nc -zv 服务器IP 80

在线端口检测工具: 可以用站长工具或在线端口扫描器检测端口是否对外开放。

常见场景排查

场景1:网站打不开(80/443端口不通)

排查顺序:安全组是否放行80/443 → 防火墙是否放行 → Nginx/Apache是否在运行。

场景2:SSH连不上(22端口不通)

排查顺序:安全组是否放行22 → 防火墙是否放行 → sshd是否在运行 → 本地网络是否有代理干扰。

场景3:MySQL远程连接失败(3306端口)

排查顺序:安全组是否放行3306 → 防火墙是否放行 → MySQL是否监听3306 → MySQL是否允许远程连接。

检查MySQL远程连接配置:

# 查看MySQL监听地址
grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf

# 应该是0.0.0.0(允许所有IP)或具体IP
# 如果是127.0.0.1(只允许本机),需要修改

你可能在想

安全组放行了但还是不通?

检查系统防火墙。安全组和系统防火墙是独立的两层,都需要放行。

防火墙关了但还是不通?

检查服务是否真的在运行。用ss -tlnp确认端口在监听。

本地能通但别人访问不了?

可能是你本地IP在安全组白名单中,但其他人的IP没有。检查安全组规则的授权IP是否设置为0.0.0.0/0。

赞(0)
未经允许不得转载:VPS知识分享站 » 服务器端口不通怎么办?VPS端口、防火墙和安全组排查方法