新 VPS 防火墙检查:查两层防火墙;只开 SSH、HTTP 和 HTTPS;数据库不上公网;关旧会话前先测新会话

本文译自 kikomono.com 英文原文《New VPS firewall check: close every port your site does not use》,作者 Rita。原文链接:https://kikomono.com/guides/check-new-vps-firewall/

一台新 VPS 应该先默认关着,只按需要打开:管理用的 SSH、网站用的 HTTP 和 HTTPS,除此之外,除非你实际运行的服务确实需要,否则一律不开。要查两层防火墙,不能只看一个界面;修规则时也不要把自己锁在外面——先保持当前 SSH 会话开着,确认新会话能连上,再关旧会话。

简短回答

防火墙规则决定一个端口是否对互联网应答。多数新服务器在每个端口前面都有两道关卡:服务商面板里设的云防火墙,和服务器自己运行的防火墙,比如 UFW、firewalld 或 iptables 规则。一个端口只有两层都放行时才可达——所以面板上显示已关的端口,如果另一层放行,仍然可能开着;服务器放行的端口,也可能被面板挡住。只查一层就默认另一层一致,是这项检查最常见的失败方式。

不要默认一台全新服务器出厂就是关着的。不同服务商、不同镜像的默认设置不一样:有的镜像一开始只开 SSH,有的会把控制面板或数据库留在可达状态。下面的检查只要几分钟,不花钱,应该和英文原文中的 IP 黑名单检查、备份恢复测试一起,放进上线第一周的例行事项——上线前查很便宜,上线后才被发现就贵了,因为扫描器找到的开放端口,所有人都能找到。

1. 先列出实际在监听什么

先从服务器本身查起,不要先看面板。监听列表才是真相:哪些服务在等连接,不管有没有人给它们写过防火墙规则:

  • 列出服务器上的监听 TCP 端口。 常用命令是 ss -tlnp,它会显示每个监听端口和背后的程序。把它读成一份声明清单:每一行都是一个服务在说“我已经准备好和人通话了”。
  • 把每一行对应到你认识的服务。 SSH、网站服务器和你自己装的应用应该在里面。有一行你解释不了——数据库、缓存、一个你本没打算暴露的面板——那就是检查结果,不是跳过的小细节。
  • 记下每个服务监听的地址。 绑定到本地回环(127.0.0.1)的服务,即使没有防火墙规则,互联网也到不了;绑定到所有地址(0.0.0.0)的服务,除非有防火墙层挡住,否则都可达。这个区别决定了一个端口到底是需要一条防火墙规则,还是需要改配置。

在装额外软件之前先做一次,让基线是干净的;每次装完再做一次。后来装的面板或应用,可能会悄悄加一个你从来没向防火墙交代过的监听服务。

2. 定一份短清单:什么保持开放

对一台典型的小网站来说,开放清单很短。不在清单上的,一律关掉或只绑定本地:

  • 22(SSH): 服务器管理。开放,但如果面板允许,只限你自己的地址访问
  • 80(HTTP): 网站流量,并跳转到 HTTPS。开放
  • 443(HTTPS): 加密网站流量。开放
  • 数据库端口: MySQL、PostgreSQL、Redis 等。绝不上公网——只限本地或私有网络
  • 控制面板端口: 如果你用面板。只限你自己的地址,绝不对所有人开放
  • 其他一切: 任何你没有刻意公开的东西。关闭

其中两项值得强调。数据库端口对互联网开放,就是邀请自动化的密码猜测来对付你的数据,而猜中数据库密码丢的是数据本身,不只是一个被篡改的页面。控制面板对所有人可达,就是把一个登录页递给整个互联网;如果你用面板,哪怕面板本身也要密码,也要在服务商防火墙里把它限制到你自己的地址。

邮件端口是证明规则的例外:只有这台服务器确实收发邮件时才开,而且只开你的邮件配置真正用的那几个。声誉方面的判断见英文原文中的黑名单指南;这项检查只管端口该不该应答。

3. 两层都查,再从外面测一次

拿到监听列表后,逐层查:

  1. 服务商云防火墙。 在服务商面板里,读挂在这台服务器上的防火墙或安全组规则,不要只看账户默认值。确认只有短清单被允许进入,面板或数据库规则都已限制到你的地址。挂在另一台服务器上的规则,或者你以为适用、其实没适用的账户级默认设置,都保护不了这台服务器。
  2. 服务器防火墙。 用你这个镜像对应的工具——UFW、firewalld 或 iptables——查服务器防火墙的现行规则,确认和同一份短清单一致。如果服务器上根本没有防火墙在运行,服务商那一层就是你唯一的一层,这是要修掉的事实,不是默认过去的假设。
  3. 从外面测。 从你自己的机器上,试着连每个应该关闭的端口和每个应该开放的端口。应该关闭的端口不应该应答;应该开放的端口只应该为短清单上的服务应答。只测你拥有或获授权测试的服务器——绝不要为了练手去扫描别人的服务器。

如果里面列表和外面测试不一致——一个端口在监听却不回答,或者你以为关了却从外面能连上——可达性以从外面测试为准,原因以里面列表为准。监听服务被防火墙挡住是安全的,但仍然值得知道;你以为关了、实际从外面能连上的服务,就是现在要修的。

4. 关掉它,但别把自己锁在外面

这项检查唯一会伤到你的方式,就是一次防火墙改动切断你自己的 SSH 会话,而且没有别的路回去。用固定顺序避免它:

  1. 保持当前 SSH 会话开着。 改规则时不要关它。如果新规则错了,它就是你回去的路。
  2. 先加 SSH 的放行规则,再加任何拒绝规则。 管理访问的放行先放进去,然后才是关掉其余部分的规则。
  3. 开第二个新的 SSH 会话,确认能连上。 只有新会话能用,改动才算证明安全。
  4. 然后再关旧会话。 如果新会话失败,旧会话还在,可以用来修规则——这个顺序的全部意义就在这里。

如果真的把自己锁在外面,恢复路线是服务商的控制台访问——面板里不经过防火墙的浏览器终端。在需要它之前就先知道控制台在哪里;被锁在外面、心急的时候再去面板里找,是最不该学面板的时候。还有一个退款窗口的角度:如果服务商镜像出厂就暴露了你没要的端口,值得在英文原文中的退款窗口指南讲的窗口内向客服提出来,在服务器积累了数据、重建变痛苦之前提。

5. 每次改动后都要复查

防火墙是一张快照,不是永久状态。每次装软件、每次加面板、每次部署应用、每次手工改规则之后,都要复查——里面列表加外面测试。改动后复查一次只要几分钟;一次安装打开的端口、几个月没人管,代价就是第一个找到它的扫描器想试什么就试什么。

记录保持简短:日期、监听列表、外面测试结果。以后出问题——某个服务连不上、某个奇怪地址的登录尝试——这份记录会告诉你,自上次已知正常状态以来变了什么,而不是让你对着一个自上线那天就没再看过的面板猜。

不要这样做

不要把 SSH 换到一个不常用端口就当作服务器安全了,也不要扫描你不拥有的服务器。 换 SSH 端口只会让日志里的噪音变少;真正起保护作用的是仅密钥登录和受限的防火墙规则。端口扫描是一种探测:只对你自己的服务器做,外面测试就属于那里。

不要把数据库或面板“暂时”开着,打算布置好再关。临时开放最容易被遗忘,而扫描器不知道你的意图——它只知道端口应答了。服务准备好需要端口时再开,服务不再需要的那天就关。

核查于 2026-11-04。防火墙工具、面板布局和服务商默认设置各不相同且会变化;按结果行动之前,请先在你自己的服务商和镜像文档里确认规则位置。

常见问题

如果服务商面板说某个端口已关,它还可能可达吗?

可能,如果另一层放行它——或者说不,如果任一层挡住它:一个端口只有前面每一层都放行时才可达。正因为如此,这项检查要覆盖服务商云防火墙和服务器自身防火墙两层,而不是只信一个界面。

把 SSH 移出 22 端口,服务器就安全了吗?

没有。移端口只会减少自动扫描在日志里留下的噪音。真正的 SSH 安全来自仅密钥登录、限制谁能到达该端口的防火墙规则,以及保持软件更新。把移端口当作整洁,不是当作保护。

为什么数据库端口绝不能对公网开放?

因为开放的数据库端口会招来针对你的数据的自动化密码猜测,而猜中的密码给攻击者的是数据本身,不只是一个网页。数据库应该只监听本地或私有网络,通过应用或 SSH 访问,绝不直接从互联网访问。

不装端口扫描器,也能查防火墙吗?

能,对你自己的服务器来说可以。先列出服务器自身在监听什么,再从外面测这些端口是否应答。里面列表加外面测试这一对就是整项检查,而且你只应该扫描你拥有或获授权测试的服务器。

第一次检查之后,多久复查一次防火墙?

每次可能打开端口的改动之后:装了新服务、加了控制面板、部署了应用,或者手工改了规则。防火墙是你检查那天的快照,而后来的安装可能悄悄在它后面加一个监听服务。