搬瓦工VPS基本防火墙规则及入站/出站策略:修订间差异
更多语言
更多操作
搬瓦工VPS基本防火墙规则及入站/出站策略 |
无编辑摘要 |
||
| 第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 自动去拉取一个镜像,这就是出站流量。
防火墙的最高黄金准则就是:默认拒绝所有入站,允许所有出站。
意思是:
- 除了我明确批准放行的端口(比如 SSH 登录端口、特定的业务端口),其他任何外部机器想连进来,防火墙一律直接丢弃请求,连报错都不回。
- 服务器内部的软件想要访问外网下载东西,完全自由,防火墙不加阻拦。
这种策略能把服务器的暴露面降到最低,把复杂性降到最低。
二、 安装 UFW
在 Ubuntu 和 Debian 系统中,底层真正的防火墙叫 iptables 或 nftables,但它们的语法极其复杂,反人类。因此,我们使用 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。
注意:搬瓦工给予用户极高的自由度,故没有设置安全组。所以不会出现这一问题。但这里还是提出来,毕竟技多不压身。下次如果你遇到这类问题你就知道要去哪里查看并解决。
排查逻辑:
- 确认系统内部的 UFW 已经放行了该端口。
- 登录你购买 VPS 的服务商网页后台,找到“网络安全”、“防火墙”或“安全组”设置卡片。
- 在网页后台同样添加一条入站规则,放行对应的 TCP 端口。
只有当“外部安全组”和“内部 UFW”都对该端口亮了绿灯,你的流量才能真正通行无阻。
掌握了以上基于 UFW 的默认拒绝与纯 IP+端口放行策略,你的服务器在互联网中就已经具备了极强的自保能力。你不需要去配置复杂的拦截策略,只要守住“不认识的端口坚决不开”这条底线,就能屏蔽掉 99% 的无差别攻击。