逆向思维实现家庭 WinNAS 安全外网访问:CDN 去端口 +HTTPS 加密方案与那些被忽视的隐患

image

继上一篇

https://blog.002724.xyz/articles/2024/06/03/1717424015422.html

折腾完流媒体后,我的 WinNAS 搬到了老家长期安置,由于网络环境以及运营商服务的变化.家宽从千兆变成了 300Mbps,没有了动态的公网 IPv4,于是就需要重新设计远程访问方案。
(之前方案可看

https://blog.002724.xyz/articles/2023/05/23/1684834526721.html

1.需求场景与痛点剖析

  • 家庭 NAS 远程访问的典型困境:
    • 动态公网 IP 的稳定性问题
    • 运营商封锁 80/443 端口的尴尬
    • HTTP 明文传输的安全隐患

模拟用户登录

请求URL:http://vulnerable-site.com/login
  表单字段:username=admin&password=123456

Wireshark 抓包 Http 报文,导致隐私泄露

POST /login HTTP/1.1
Host: vulnerable-site.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 28

username=admin&password=123456

2. 技术方案全景图

[用户浏览器] --HTTPS(443)--> [CDN节点] --HTTP(自定义端口)--> [反向代理服务器] --> [WinNAS服务]

image

  • 关键技术组件说明:
    • CDN 当然是选择赛博大善人 Cloudflare,对个人站长非常友好,就是有一些技术门槛,都已经免费了,还要什么自行车(笑)
    • 反向代理不使用常见的 Nginx/Caddy,最近 Lucky 在 NAS 圈特别火,可以实现:软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun 内网穿透,cron,acme,阿里云盘,ftp,webdav,filebrowser。功能完全够用,而且对小白及其友好,图形化界面操作,官网地址:

      https://lucky666.cn/

3. 实战部署步骤

3.1 基础网络架构搭建
具体的部署教程可以上网搜索,这里只讲干货,全是进阶玩法。

  • 动态域名解析方案(Lucky 工具在 Windows 服务的静默部署)
  • 反向代理配置(依旧是 Lucky)
  • 除了 DDNS 和反向代理模块,还有端口转发,远程网络唤醒,网络存储(WebDav,FTP 等协议的服务器实现,我已经部署了 Alist,暂不需要)等超多实用功能可以探索,(类似于软路由 ALL IN ONE?我没部署过软路由,如有错误请指正)

3.2 CDN 层安全改造

  • 端口隐身术:通过 CDN 的「页面规则」实现 URL 重定向(以 Cloudflare 为例):
    1. 创建规则实现:*.yourdomain.com/* → 转发到 http://nas.yourdomain.com:yourport$1
图片描述 规则-创建规则 图片描述 模板-更改端口

自定义筛选表达式,第一条规则选择通配符匹配所有子域名,有个性化需求再添加规则,如图中 jellyfin 服务不进行重定向,以避免 "CDN 降速 "

表达式

最后给需要重定向的域名开启 " 小云朵 " 即可

image

  1. 开启 Always Use HTTPS 强制跳转
  • SSL 证书自动化:
    • 使用 acme 申请 Let's Encrypt 通配符证书
    • 证书自动更新
    • 如果申请证书失败,可能需要配置代理

3.3 攻击面收缩策略

  • IP 白名单强化:通过 CDN 防火墙限制源站访问(仅允许 CDN 节点 IP)

    # Windows防火墙入站规则(管理员PowerShell)
    New-NetFirewallRule -DisplayName "Allow_CDN_IPs" -Direction Inbound -LocalPort 8765 -Protocol TCP -Action Allow -RemoteAddress 173.245.48.0/20,103.21.244.0/22
    
  • 协议安全加固:

    • 禁用 TLS 1.0/1.1
      在 Lucky 中配置 TLS 最低版本限制为 TLS1.2 即可
    • 配置 HSTS 头

反向代理模块添加响应头

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

建议详细了解之后再配置 preload 选项,需要全部子域名都符合 HTTPS,而且一旦发现有子域名不符合 HTTPS(包含非公开访问的内部子域名),删除过程是非常缓慢而痛苦的。

4. 读者互动环节

  • 开放讨论:
    " 如果你有物理服务器资源,是否会改用 WireGuard 建立 ❤️️❤️️❤️️ 隧道?为什么?"

5. 技术细节增强建议

  1. 流量伪装技巧:在 CDN 配置中添加伪装的 /health-check 路径,返回虚假的 404 页面迷惑扫描器
  2. 应对 fofa 等扫描器的威胁:配置反向代理默认规则为“关闭连接”,详细可参考:

    https://www.bilibili.com/opus/945751949168345108

参考资料(排名不分先后)

  1. https://hstspreload.org/#opt-in

  2. https://cloud.tencent.com/developer/article/2301990

  3. https://lucky666.cn/