打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

搬瓦工VPS基本防火墙规则及入站/出站策略:修订间差异

来自md5.pw
Long留言 | 贡献
搬瓦工VPS基本防火墙规则及入站/出站策略
 
Liam留言 | 贡献
无编辑摘要
 
第155行: 第155行:
----
----
掌握了以上基于 UFW 的默认拒绝与纯 IP+端口放行策略,你的服务器在互联网中就已经具备了极强的自保能力。你不需要去配置复杂的拦截策略,只要守住“不认识的端口坚决不开”这条底线,就能屏蔽掉 99% 的无差别攻击。
掌握了以上基于 UFW 的默认拒绝与纯 IP+端口放行策略,你的服务器在互联网中就已经具备了极强的自保能力。你不需要去配置复杂的拦截策略,只要守住“不认识的端口坚决不开”这条底线,就能屏蔽掉 99% 的无差别攻击。
[[Category:500 常见应用指南 — Application Guides]]

2026年3月18日 (三) 08:41的最新版本

当你的 VPS 刚刚安装好操作系统并连上网络时,它就像是一个四面漏风的房间。互联网上的任何一台机器,都可以尝试连接你服务器上的所有端口。每天都有无数的自动化扫描脚本在网络上游荡,寻找那些没有关好门的服务器进行暴力破解或恶意入侵。

在下面的文章中,我们将抛开复杂的网络理论,手把手教你建立一套基于“默认拒绝(Default Deny)”原则的基础防火墙策略。我们将使用 Ubuntu 和 Debian 系统中最简单好用的 UFW(Uncomplicated Firewall)工具来进行实战。


一、 什么是“默认拒绝”与出入站策略?

在动手敲命令之前,我们需要先理清防火墙的两个基本方向:入站(Inbound/Incming)和出站(Outbound/Outgoing)。

  • 入站(Incoming): 外界的电脑主动发起请求,想要进入你的服务器。比如,你在浏览器里输入服务器的 IP 来访问你的面板,这就是入站流量。
  • 出站(Outgoing): 你的服务器主动发起请求,想要访问外界的网络。比如,你在服务器里使用 wget 下载一个安装包,或者 Docker 自动去拉取一个镜像,这就是出站流量。

防火墙的最高黄金准则就是:默认拒绝所有入站,允许所有出站。

意思是:

  1. 除了我明确批准放行的端口(比如 SSH 登录端口、特定的业务端口),其他任何外部机器想连进来,防火墙一律直接丢弃请求,连报错都不回。
  2. 服务器内部的软件想要访问外网下载东西,完全自由,防火墙不加阻拦。

这种策略能把服务器的暴露面降到最低,把复杂性降到最低。


二、 安装 UFW

在 Ubuntu 和 Debian 系统中,底层真正的防火墙叫 iptablesnftables,但它们的语法极其复杂,反人类。因此,我们使用 UFW(Uncomplicated Firewall,简单防火墙)。它是一个前端工具,能把复杂的规则转化为人类能看懂的简单英语命令。

1. 安装 UFW

通过 SSH 连上你的服务器,执行以下命令安装 UFW:

apt update
apt install ufw -y


2. 查看当前状态

安装完成后,UFW 默认是关闭的。你可以查一下它的状态:

ufw status

终端会输出:Status: inactive(状态:不活跃)。先不要急着开启它,我们必须先设定好规则。


三、 配置默认策略与SSH端口

接下来我们就正式开始设置。这一步非常关键,顺序绝对不能错。错了的话,可能会导致你与服务器之间的连接直接被切断。

1. 设置全局默认策略

告诉防火墙,以后遇到没有明确规定的流量,默认按照下面的规则办:

# 默认拒绝所有入站连接
ufw default deny incoming

# 默认允许所有出站连接
ufw default allow outgoing

2. 极度重要:放行你的 SSH 端口

既然你设置了“默认拒绝所有入站”,如果你现在立刻把防火墙开启,防火墙会连你当前的 SSH 连接一起切断。你就会把自己彻底锁在服务器外面。

因此,在开启防火墙之前,必须先放行 SSH 端口

如果你使用的是默认的 22 端口,执行:

ufw allow 22/tcp

如果你已经将 SSH 端口改成了其他数字(比如 38422),那就放行你的自定义端口:

ufw allow 38422/tcp

3. 正式启动防火墙

确认 SSH 端口已经放行后,输入以下命令激活防火墙:

ufw enable

系统会弹出一句警告:Command may disrupt existing ssh connections. Proceed with operation (y|n)?(此命令可能会中断现有的 SSH 连接,是否继续?)。 因为我们上一步已经放行了端口,所以大胆输入 y 并回车。

提示 Firewall is active and enabled on system startup,说明防火墙已成功启动,并且每次服务器重启都会自动运行。


四、纯 IP + 端口的精准放行策略

在我们的日常部署中,为了追求极致的简单、高效和稳定,我们往往不需要去搞复杂的反向代理(不再需要把所有流量都挤到 80 和 443 端口)。

最原生的方式就是:跑一个服务,分配一个端口,防火墙放行一个端口,直接用 IP+端口 访问。 这种架构故障点最少

1. 常见业务的放行规则

假设你在服务器上用 Docker 部署了一个 博客,你把它映射到了宿主机的 8090 端口。你只需要告诉防火墙,允许外界访问这个端口即可。

ufw allow 8090/tcp

执行完毕后,你就可以直接在浏览器里通过 http://你的服务器IP:8090 来访问面板了。

再比如,你部署了nginx proxy manager,映射在 81 端口:

ufw allow 81/tcp

2. TCP 与 UDP 的区别

在放行端口时,你可能会注意到后面带着 /tcp。 网络传输主要有两种协议:TCP(稳定、面向连接,网页浏览多用此协议)和 UDP(速度快、不保证送达,视频流、游戏多用此协议)。

  • 绝大多数的 Web 面板、数据库,都只需要放行 TCP。
  • 如果你不写协议,直接输入 ufw allow 3001,UFW 会默认同时放行 TCP 和 UDP。为了安全起见,我们建议只放行需要的协议(加上 /tcp)。

3. 如何知道自己需要放行哪些端口?

很多新手跟着教程复制了 Docker 部署命令,启动成功了,但网页打不开,也不知道该去防火墙放行哪个端口。

你可以使用 ss 命令来查看服务器当前到底有哪些端口正在监听(等待外部连接):

ss -tulnp

这个命令会列出所有正在运行的程序以及它们占用的端口。找到你的程序名称(比如 docker-proxy),看看它对应的 Local Address:Port 是多少,然后在 UFW 里把那个端口放行即可。(因为是新机器,没有运行其他服务,所以只有SSH的22端口正在监听)


五、 查看、删除与进阶规则

防火墙规则不是一成不变的。当你卸载了某个面板,对应的端口也应该及时关闭,做到“用完即焚”。

1. 查看带编号的规则列表

想要管理规则,最好的方法是给每条规则打上编号,这样看得很清楚:

ufw status numbered

终端会输出类似这样的列表:

     To                         Action      From
     --                         ------      ----
[ 1] 38422/tcp                  ALLOW IN    Anywhere
[ 2] 3001/tcp                   ALLOW IN    Anywhere
[ 3] 38422/tcp (v6)             ALLOW IN    Anywhere (v6)
[ 4] 3001/tcp (v6)              ALLOW IN    Anywhere (v6)

你会发现,你输入一条规则,UFW 会自动帮你生成 IPv4 和 IPv6(带有 v6 字样)两条规则,非常省心。

2. 精准删除规则

如果你不再使用 Uptime Kuma 了,想要关闭 3001 端口。只需要根据上面列表的编号进行删除。

我们要删除第 2 条规则:

ufw delete 2

输入 y 确认。

注意: 删除了第 2 条之后,原本的第 3 条、第 4 条规则的编号会自动向前递补。所以如果你要继续删除,请一定要重新运行 ufw status numbered 查看最新的编号,不要盲目删除,以免误删了 SSH 端口规则。

3. 进阶技能:防暴力破解的 Limit 规则

你的 SSH 端口虽然改了,但如果真的被黑客扫到了,对方一直用密码字典疯狂尝试登录,会消耗服务器大量的 CPU 资源。

UFW 提供了一个非常简单的限流功能。你可以把之前放行 SSH 的 allow 规则,改为 limit 规则。

假设你的 SSH 端口是 38422:

ufw limit 38422/tcp

limit 规则的意思是:允许正常连接,但如果同一个 IP 地址在 30 秒内尝试连接超过 6 次,防火墙就会直接把这个 IP 拉黑一段时间。这对于防范自动化的暴力破解脚本极其有效。


六、 常见问题:为什么 UFW 放行了端口,我还是连不上?

这是新手最容易碰到的难题。你在系统里执行了 ufw allow 3001/tcp,显示操作成功,但网页就是死活打不开。

如果你遇到了这种情况,原因几乎只有一个:你的服务器外面,还有一层防火墙

现在很多云服务商为了安全,会在网页控制台里提供一个 “安全组(Security Group)”“外部防火墙” 功能。 这层外部防火墙位于你的 VPS 操作系统之外。外部的请求想要到达你的服务器,必须先经过服务商的安全组,然后才能到达你系统内部的 UFW。

注意:搬瓦工给予用户极高的自由度,故没有设置安全组。所以不会出现这一问题。但这里还是提出来,毕竟技多不压身。下次如果你遇到这类问题你就知道要去哪里查看并解决。

排查逻辑:

  1. 确认系统内部的 UFW 已经放行了该端口。
  2. 登录你购买 VPS 的服务商网页后台,找到“网络安全”、“防火墙”或“安全组”设置卡片。
  3. 在网页后台同样添加一条入站规则,放行对应的 TCP 端口。

只有当“外部安全组”和“内部 UFW”都对该端口亮了绿灯,你的流量才能真正通行无阻。


掌握了以上基于 UFW 的默认拒绝与纯 IP+端口放行策略,你的服务器在互联网中就已经具备了极强的自保能力。你不需要去配置复杂的拦截策略,只要守住“不认识的端口坚决不开”这条底线,就能屏蔽掉 99% 的无差别攻击。