Skip to content
VDS · 网络、IP 地址与域名

端口:该开放哪些以及如何检查

典型服务需要哪些端口,如何查看机器正在监听什么,如何检查外部可达性,以及端口关闭时该怎么办。

更新于 2026年8月23日

端口是一个数字,它告诉系统应该由哪个服务来接收传入的连接。规则很简单:只开放您实际使用的端口。每一个额外开放的端口,都是别人用来试探弱点的另一扇门。

常见端口号

端口服务是否对外开放
22SSH是,最好按地址限制
80HTTP是,如果您有网站
443HTTPS是,如果您有网站
25、465、587邮件入站——仅当您自己运行邮件服务器时。出站在我们这边是关闭的,可按需申请开放
3306MySQL否,仅本地
5432PostgreSQL否,仅本地
6379Redis否,仅本地
27017MongoDB否,仅本地
25565Minecraft是,如果是游戏服务器

关于邮件的一点说明:入站连接不受限制,而出站连接在 25、465 和 587 端口上在节点层面是关闭的,直到您要求我们开放。机器内部的规则无法改变这一点——详情请参阅邮件服务器:为什么难,以及需要考虑什么。

数据库几乎从不对外暴露。如果您需要从工作电脑访问,正确的方式是 SSH 隧道,而不是开放端口:

ssh -L 5432:127.0.0.1:5432 artem@<address>

机器正在监听什么

ss -tulpn
ss -tlpn | grep 443
lsof -i -P -n | grep LISTEN

请看端口号前面的地址。127.0.0.1:5432 表示该服务只能从内部访问——无论您添加多少条规则,都无法从外部访问。0.0.0.0:5432 表示该服务在所有网络接口上开放,必须用防火墙加以保护。

从外部检查

在您的电脑上:

nc -vz <address> 443
curl -I http://<address>

用 ping 检查没有意义:ICMP 和 TCP 是两回事;端口可以正常工作而 ping 被屏蔽,反之亦然。

端口已关闭:分步排查

  1. 服务在运行吗?systemctl status <service>
  2. 它监听的是正确的地址吗?ss -tulpn——不是 127.0.0.1
  3. 防火墙允许它吗?ufw status verbose 或 nft list ruleset
  4. Docker 在干扰吗?已发布的容器端口会绕过 ufw
  5. 查看服务日志:journalctl -u <service> -n 50

顺序很重要:大多数情况下问题出在第二步,而不是防火墙。

更改服务端口

例如,迁移 SSH:

sed -i "s/^#\?Port 22/Port 2222/" /etc/ssh/sshd_config
ufw allow 2222/tcp
sshd -t
systemctl restart ssh

请先在另一个窗口中确认能用新端口登录,然后再删除 22 端口的规则。详情请参阅 SSH 加固。

常见错误

现象原因解决方法
Connection refused服务未运行systemctl status,查看日志
Connection timed out数据包被防火墙丢弃检查规则
本地可用,外部不可用绑定到 127.0.0.1在配置中更改地址
Address already in use端口被另一个服务占用ss -tulpn 并停止多余的服务

只有在确认是什么在响应端口之后,才开放该端口。旧实验遗留的端口是黑客入侵的典型入口;请参阅被入侵的迹象。