打开/关闭搜索
搜索
打开/关闭菜单
60
801
77
2421
md5.pw
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
上传文件
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
请求账号
查看“︁搬瓦工VPS基本防火墙规则及入站/出站策略”︁的源代码
来自md5.pw
分享此页面
更多语言
查看
阅读
查看源代码
查看历史
associated-pages
页面
讨论
更多操作
←
搬瓦工VPS基本防火墙规则及入站/出站策略
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
当你的 VPS 刚刚安装好操作系统并连上网络时,它就像是一个四面漏风的房间。互联网上的任何一台机器,都可以尝试连接你服务器上的所有端口。每天都有无数的自动化扫描脚本在网络上游荡,寻找那些没有关好门的服务器进行暴力破解或恶意入侵。 在下面的文章中,我们将抛开复杂的网络理论,手把手教你建立一套基于'''“默认拒绝(Default Deny)”'''原则的基础防火墙策略。我们将使用 Ubuntu 和 Debian 系统中最简单好用的 UFW(Uncomplicated Firewall)工具来进行实战。 ---- == 一、 什么是“默认拒绝”与出入站策略? == 在动手敲命令之前,我们需要先理清防火墙的两个基本方向:入站(Inbound/Incming)和出站(Outbound/Outgoing)。 * '''入站(Incoming):''' 外界的电脑主动发起请求,想要进入你的服务器。比如,你在浏览器里输入服务器的 IP 来访问你的面板,这就是入站流量。 * '''出站(Outgoing):''' 你的服务器主动发起请求,想要访问外界的网络。比如,你在服务器里使用 <code>wget</code> 下载一个安装包,或者 Docker 自动去拉取一个镜像,这就是出站流量。 '''防火墙的最高黄金准则就是:默认拒绝所有入站,允许所有出站。''' 意思是: # 除了我明确批准放行的端口(比如 SSH 登录端口、特定的业务端口),其他任何外部机器想连进来,防火墙一律直接丢弃请求,连报错都不回。 # 服务器内部的软件想要访问外网下载东西,完全自由,防火墙不加阻拦。 这种策略能把服务器的暴露面降到最低,把复杂性降到最低。 ---- == 二、 安装 UFW == 在 Ubuntu 和 Debian 系统中,底层真正的防火墙叫 <code>iptables</code> 或 <code>nftables</code>,但它们的语法极其复杂,反人类。因此,我们使用 UFW(Uncomplicated Firewall,简单防火墙)。它是一个前端工具,能把复杂的规则转化为人类能看懂的简单英语命令。 '''1. 安装 UFW''' 通过 SSH 连上你的服务器,执行以下命令安装 UFW: apt update apt '''install''' ufw -y</code> [[File:B87c11cc.png|center|thumb|1000x1000px]] '''2. 查看当前状态''' 安装完成后,UFW 默认是关闭的。你可以查一下它的状态: '''ufw status''' 终端会输出:<code>Status: inactive</code>(状态:不活跃)。先不要急着开启它,我们必须先设定好规则。 [[File:B87c11c1.png|center|thumb|1000x1000px]] ---- == 三、 配置默认策略与SSH端口 == 接下来我们就正式开始设置。这一步非常关键,顺序绝对不能错。错了的话,可能会导致你与服务器之间的连接直接被切断。 '''1. 设置全局默认策略''' 告诉防火墙,以后遇到没有明确规定的流量,默认按照下面的规则办: # 默认拒绝所有入站连接 ufw default deny incoming # 默认允许所有出站连接 ufw default allow outgoing</code> [[File:B87c11c2.png|center|thumb|1000x1000px]] '''2. 极度重要:放行你的 SSH 端口''' 既然你设置了“默认拒绝所有入站”,如果你现在立刻把防火墙开启,防火墙会连你当前的 SSH 连接一起切断。你就会把自己彻底锁在服务器外面。 因此,在开启防火墙之前,'''必须先放行 SSH 端口'''。 如果你使用的是默认的 22 端口,执行: ufw allow 22/tcp</code> [[File:B87c11c3.png|center|thumb|1000x1000px]] 如果你已经将 SSH 端口改成了其他数字(比如 38422),那就放行你的自定义端口: ufw allow 38422/tcp</code> '''3. 正式启动防火墙''' 确认 SSH 端口已经放行后,输入以下命令激活防火墙: ufw enable</code> 系统会弹出一句警告:<code>Command may disrupt existing ssh connections. Proceed with operation (y|n)?</code>(此命令可能会中断现有的 SSH 连接,是否继续?)。 因为我们上一步已经放行了端口,所以大胆输入 <code>y</code> 并回车。 [[File:B87c11c4.png|center|thumb|1000x1000px]] 提示 <code>Firewall is active and enabled on system startup</code>,说明防火墙已成功启动,并且每次服务器重启都会自动运行。 ---- == 四、纯 IP + 端口的精准放行策略 == 在我们的日常部署中,为了追求极致的简单、高效和稳定,我们往往不需要去搞复杂的反向代理(不再需要把所有流量都挤到 80 和 443 端口)。 最原生的方式就是:'''跑一个服务,分配一个端口,防火墙放行一个端口,直接用 IP+端口 访问。 这种架构故障点最少'''。 == 1. 常见业务的放行规则 == 假设你在服务器上用 Docker 部署了一个 博客,你把它映射到了宿主机的 <code>8090</code> 端口。你只需要告诉防火墙,允许外界访问这个端口即可。 '''ufw''' allow 8090/tcp</code> 执行完毕后,你就可以直接在浏览器里通过 <code><nowiki>http://你的服务器IP:8090</nowiki></code> 来访问面板了。 再比如,你部署了nginx proxy manager,映射在 81 端口: '''ufw''' allow 81/tcp</code> [[File:B87c11c5.png|center|thumb|1000x1000px]] == 2. TCP 与 UDP 的区别 == 在放行端口时,你可能会注意到后面带着 <code>/tcp</code>。 网络传输主要有两种协议:TCP(稳定、面向连接,网页浏览多用此协议)和 UDP(速度快、不保证送达,视频流、游戏多用此协议)。 * 绝大多数的 Web 面板、数据库,都只需要放行 TCP。 * 如果你不写协议,直接输入 <code>ufw allow 3001</code>,UFW 会默认同时放行 TCP 和 UDP。为了安全起见,我们建议只放行需要的协议(加上 <code>/tcp</code>)。 == 3. 如何知道自己需要放行哪些端口? == 很多新手跟着教程复制了 Docker 部署命令,启动成功了,但网页打不开,也不知道该去防火墙放行哪个端口。 你可以使用 <code>ss</code> 命令来查看服务器当前到底有哪些端口正在监听(等待外部连接): '''ss -tulnp'''</code> 这个命令会列出所有正在运行的程序以及它们占用的端口。找到你的程序名称(比如 docker-proxy),看看它对应的 <code>Local Address:Port</code> 是多少,然后在 UFW 里把那个端口放行即可。(因为是新机器,没有运行其他服务,所以只有SSH的22端口正在监听) [[File:B87c11c656.png|center|thumb|1000x1000px]] ---- == 五、 查看、删除与进阶规则 == 防火墙规则不是一成不变的。当你卸载了某个面板,对应的端口也应该及时关闭,做到“用完即焚”。 == 1. 查看带编号的规则列表 == 想要管理规则,最好的方法是给每条规则打上编号,这样看得很清楚: '''ufw status numbered'''</code> 终端会输出类似这样的列表: '''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)</code> 你会发现,你输入一条规则,UFW 会自动帮你生成 IPv4 和 IPv6(带有 v6 字样)两条规则,非常省心。 == 2. 精准删除规则 == 如果你不再使用 Uptime Kuma 了,想要关闭 3001 端口。只需要根据上面列表的编号进行删除。 我们要删除第 2 条规则: ufw '''delete''' 2</code> 输入 <code>y</code> 确认。 '''注意:''' 删除了第 2 条之后,原本的第 3 条、第 4 条规则的编号会自动向前递补。所以如果你要继续删除,请一定要重新运行 <code>ufw status numbered</code> 查看最新的编号,不要盲目删除,以免误删了 SSH 端口规则。 == 3. 进阶技能:防暴力破解的 Limit 规则 == 你的 SSH 端口虽然改了,但如果真的被黑客扫到了,对方一直用密码字典疯狂尝试登录,会消耗服务器大量的 CPU 资源。 UFW 提供了一个非常简单的限流功能。你可以把之前放行 SSH 的 <code>allow</code> 规则,改为 <code>limit</code> 规则。 假设你的 SSH 端口是 38422: ufw limit 38422/tcp</code> <code>limit</code> 规则的意思是:允许正常连接,但如果同一个 IP 地址在 30 秒内尝试连接超过 6 次,防火墙就会直接把这个 IP 拉黑一段时间。这对于防范自动化的暴力破解脚本极其有效。 ---- == 六、 常见问题:为什么 UFW 放行了端口,我还是连不上? == 这是新手最容易碰到的难题。你在系统里执行了 <code>ufw allow 3001/tcp</code>,显示操作成功,但网页就是死活打不开。 如果你遇到了这种情况,原因几乎只有一个:'''你的服务器外面,还有一层防火墙'''。 现在很多云服务商为了安全,会在网页控制台里提供一个 '''“安全组(Security Group)”''' 或 '''“外部防火墙”''' 功能。 这层外部防火墙位于你的 VPS 操作系统之外。外部的请求想要到达你的服务器,必须先经过服务商的安全组,然后才能到达你系统内部的 UFW。<blockquote>注意:搬瓦工给予用户极高的自由度,故没有设置安全组。所以不会出现这一问题。但这里还是提出来,毕竟技多不压身。下次如果你遇到这类问题你就知道要去哪里查看并解决。</blockquote>排查逻辑: # 确认系统内部的 UFW 已经放行了该端口。 # 登录你购买 VPS 的服务商网页后台,找到“网络安全”、“防火墙”或“安全组”设置卡片。 # 在网页后台同样添加一条入站规则,放行对应的 TCP 端口。 只有当“外部安全组”和“内部 UFW”都对该端口亮了绿灯,你的流量才能真正通行无阻。 ---- 掌握了以上基于 UFW 的默认拒绝与纯 IP+端口放行策略,你的服务器在互联网中就已经具备了极强的自保能力。你不需要去配置复杂的拦截策略,只要守住“不认识的端口坚决不开”这条底线,就能屏蔽掉 99% 的无差别攻击。 [[Category:500 常见应用指南 — Application Guides]]
返回
搬瓦工VPS基本防火墙规则及入站/出站策略
。
查看“︁搬瓦工VPS基本防火墙规则及入站/出站策略”︁的源代码
来自md5.pw