🛡️ 拒绝裸奔:我是如何利用 NPM 给 3X-UI 穿上“防弹衣”的
在运维自己的域名的过程中,很多人(包括我自己)习惯于直接通过 IP:端口 访问面板。虽然方便,但这种做法无异于在荒郊野外开着门睡觉。今天,我们就来复盘一次实战:如何利用 Nginx Proxy Manager (NPM) 配合 2FA,把我们的面板彻底隐藏在安全迷雾之中。
🔍 为什么要折腾这一套?
在正式操作前,我们先思考一个问题:如果你的面板地址是 http://1.2.3.4:3854,这意味着什么?
流量全透明:你的密码在公网上是裸奔的。
坐标全公开:全球的扫描器每秒钟都在爆破你的 3854 端口。
脆弱的防线:一旦密码被破解,你的服务器控制权就拱手让人。
在深入细节之前,我们先来看看这台服务器的架构是如何从“简陋”走向“安全”的。
1.原始架构:直接暴露 (Direct Access)
最初,我们的流量是点对点的。这种架构下,面板就像一个没有围墙的房子,任何知道 IP 的人都可以来敲门。
路径:用户 -> 公网 IP -> XXXX 端口 (3X-UI)
风险:流量明文传输、端口完全暴露、易受暴力破解。
2.进化架构:反向代理 + 安全闭环 (NPM + 2FA)
这是我们今天最终实现的架构。我们引入了 NPM (Nginx Proxy Manager) 作为唯一的“安保门卫”,并将面板深藏在 Docker 内部。
路径:用户 -> 443 端口 (NPM 加密入口) -> 内部网桥 -> 2083 端口 (3X-UI)
防御层级:
1.SSL 层:强制 HTTPS,解决数据窃听。
2.路径层:非公开的 Base Path(如 /khalilescape/),阻断盲目扫描。
3.防火墙层:UFW 封锁公网 XXXX 端口,仅允许内部流量。
4.应用层:2FA(谷歌验证器)提供最终的动态校验。
所以我们的目标是:让原本暴露在外的 http://148.ip:端口/3xui根路径/ 彻底消失,取而代之的是一个经过 SSL 加密、物理端口封锁、并拥有两步验证保护的堡垒机。下面,我们就从架构的拆解开始,一步步完成这场安全进阶。”
🛠️ 三步走:打造“隐身”架构
第一步:让面板隐藏在 HTTPS 之后
我们不再直接访问端口,而是通过 NPM 设置一个反向代理。
我们这样做的好处是:
面板流量被 SSL 加密,即便在公共 Wi-Fi 下也无法被窃听。
我们可以利用 NPM 的 Advanced 配置,为面板设置一个复杂的“隐藏路径”(Base Path)。
# 在 NPM 的高级配置中实现精准转发
location /khalilescape/ {
proxy_pass http://172.17.0.1:你的端口号;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 开启 WebSocket 支持,这是节点连接的关键
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}如果你是dock部署的NPM那的一定要填172.17.0.1,必须是这个,默认情况下,Docker 会在你的 VPS 内部创建一个虚拟网桥 172.17.0.1
NPM 容器:它运行在 Docker 内部,它看不见 外网 IP ,但它能看见 172.17.0.1
为了配合防火墙封锁公网端口
这是最关键的安全逻辑:
如果填公网 IP : 流量会跑出服务器绕一圈再回来。如果你为了安全用 ufw 关掉了 你3xui端口的 端口,NPM 自己也就访问不到了,会导致 502 Bad Gateway。
如果填 Docker IP (172.17.0.1:3xui端口号): 流量走的是内部私有通道。即使你把公网 3xui端口 端口完全封死,NPM 依然能从“后门”进到 3X-UI 面板。
第二步:物理断开,关闭公网端口
既然已经有了 NPM 转发,我们就不再需要 3xui 端口对全球开放。我们通过 ufw 筑起一道高墙:
# 禁止所有公网 IP 访问 3xui端口
ufw deny 3xui端口/tcp
# 仅允许 Docker 内部网段访问该端口(确保 NPM 能转进去)
ufw allow from 172.17.0.0/16 to any port 2083这一步至关重要:现在,黑客扫描你的 IP 时,2083 端口是“关闭”状态,他们甚至不知道你运行了 3X-UI。
第三步:最后的防线——谷歌验证器 (2FA)
即便有人猜中了你的3xui的域名,撞见了你的隐藏路径,甚至破解了你的强密码,我们还有最后一张王牌:Google Authenticator。
通过开启两步验证,每次登录都需要手机上的动态验证码。这种“物理隔离”的验证方式,让安全级别直接从“个人博客”提升到了“金融级”。
两步验证开启步骤
开启步骤
登录面板:通过你的域名地址进入 3X-UI 面板。
进入设置:点击左侧菜单栏的 “面板设置” (Panel Settings)。
安全设定:在安全设定中找到 “双重验证” (启用2FA)。
保存并重启:点击“保存设置”并按照提示重启面板服务。
评论 (0)