首页
关于
Search
1
欢迎使用 Typecho
5 阅读
2
记录第一次部署VPS,docker环境下部署Nginx Proxy Manager+Typecho+3x-ui+UFW 状态防火墙 + SSL 证书自动续签
5 阅读
3
利用Nginx给3X-UI穿上防弹衣,再给Nginx穿一件顺滑的"透明钢板衣"(上)
3 阅读
实验室
星光与尾巴
智居未来
归档
登录
Search
Khalil
累计撰写
3
篇文章
累计收到
1
条评论
首页
栏目
实验室
星光与尾巴
智居未来
归档
页面
关于
搜索到
3
篇与
khalil
的结果
2026-01-10
利用Nginx给3X-UI穿上防弹衣,再给Nginx穿一件顺滑的"透明钢板衣"(上)
🛡️ 拒绝裸奔:我是如何利用 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)。保存并重启:点击“保存设置”并按照提示重启面板服务。
2026年01月10日
3 阅读
0 评论
0 点赞
2026-01-09
记录第一次部署VPS,docker环境下部署Nginx Proxy Manager+Typecho+3x-ui+UFW 状态防火墙 + SSL 证书自动续签
🏗️ 架构概览前端网关:Nginx Proxy Manager (Docker 容器)内容管理:Typecho (Docker 容器)代理核心:3x-ui (原生安装) + Xray 内核安全防护:UFW 状态防火墙 + SSL 证书自动续签第一步:环境初始化与 Docker 部署首先更新系统并安装 Docker 基础环境。apt update && apt upgrade -y apt install -y curl git socat ufw curl -fsSL https://get.docker.com | sh遇到问题 1:Docker 内部转发 504 Gateway Timeout表现: 部署 NPM 后,访问域名能看到欢迎页,但转发到后台服务时提示 504 错误。解决方法: 这是因为防火墙拦截了 Docker 网桥的内部通信。需要放行本地和 Docker 网段的流量。# 解决 504 的关键命令 ufw allow from 127.0.0.1 ufw allow from 172.17.0.1 ufw reload第二步:部署 Nginx Proxy Manager 与 Typecho 容器使用 docker-compose 在 /root/web_stack 目录下统一部署。YAMLversion: '3' services: npm: image: 'jc21/nginx-proxy-manager:latest' container_name: npm restart: always ports: - '80:80' - '443:443' - '81:81' volumes: - ./npm_data:/data - ./letsencrypt:/etc/letsencrypt typecho: image: 'joyqi/typecho:latest' container_name: typecho restart: always environment: - TYPECHO_SITE_URL=https://blog.9698424.xyz volumes: - ./typecho_data:/data` 第三步:安装 3x-ui 与 Xray 内核执行一键脚本并进入面板配置:bash <(curl -Ls https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh)遇到问题 2:Xray 状态为 "Not Running" (exit status 23)表现:开启 XHTTP 或 TLS 后,内核频繁崩溃重启。原因: 在 NPM 架构下,Xray 这一端绝不能开启 TLS 安全设置。解决方法: 将入站设置中的 Security 设为 none,把加密任务交给 NPM。第四步:NPM 反向代理配置 (XHTTP 专项)为了让代理节点通过 443 端口伪装成博客流量,需要在 NPM 中设置 Custom Location。Define Location: /khalil-video/Forward Hostname: 172.17.0.1 (宿主机 IP)Forward Port: 3001 (Xray 监听端口)Advanced 配置 (解决 XHTTP 断流):Nginxproxy_buffering off; proxy_request_buffering off; proxy_http_version 1.1;第五步:Typecho 主题美化 (Joe)遇到问题 3:无法找到宿主机挂载目录表现: cd /root/typecho 提示目录不存在。解决方法: 使用 docker inspect 确认路径,并利用 docker cp 强制安装。#1. 查找路径 docker inspect typecho | grep -A 5 "Mounts"2. 拉取并强制安装 Joe 主题cd ~ && git clone https://github.com/HaoOuBa/Joe.git Joe docker cp Joe typecho:/app/usr/themes/3. 修正权限 (解决后台无法保存设置的问题)docker exec -it typecho chown -R www-data:www-data /app/usr/themes/Joe第六步:进阶功能 (WARP 与流媒体解锁)由于 RackNerd IP 可能被奈飞封锁,我们引入 Cloudflare WARP 提升 IP 纯净度。Bash# 安装 WARP-Gowget-N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh配置逻辑:入站:你 → 443 端口 (NPM) → 3001 端口 (Xray)出站分流:普通流量 → VPS 原生出口Netflix/Disney+ → WARP 虚拟网卡接口🛠️ 日常维护常用命令查看服务状态:x-ui status && docker ps查看博客日志:docker logs -f typecho查看 NPM 错误:docker logs -f npm重置 Xray 配置:若面板打不开,可手动编辑 /usr/local/x-ui/bin/config.json。
2026年01月09日
5 阅读
0 评论
0 点赞
2026-01-09
欢迎使用 Typecho
如果您看到这篇文章,表示您的 blog 已经安装成功.
2026年01月09日
5 阅读
1 评论
0 点赞