zfsjlll

zfsjlll

趁着年轻,好好犯病

逆向思維實現家庭WinNAS安全外網訪問:CDN去端口+HTTPS加密方案與那些被忽視的隱患

image

繼上一篇 家庭流媒體解決方案 - Jellyfin:我🈶獨特的使用方法 - zfsjlll 的自留地 折騰完流媒體後,我的 WinNAS 搬到了老家長期安置,由於網絡環境以及運營商服務的變化。家寬從千兆變成了 300Mbps, 沒有了動態的公網 IPv4,於是就需要重新設計遠程訪問方案。
(之前方案可看 Cloudflare CDN 開放端口 - zfsjlll 的自留地

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。功能完全夠用,而且對小白及其友好,圖形化界面操作,官網地址:Lucky

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 建立 VPN 隧道?為什麼?"

5. 技術細節增強建議#

  1. 流量偽裝技巧:在 CDN 配置中添加偽裝的 /health-check 路徑,返回虛假的 404 頁面迷惑掃描器
  2. 應對 fofa 等掃描器的威脅:配置反向代理默認規則為 “關閉連接”,詳細可參考:在 Windows 下使用 lucky 配置反向代理以實現較為安全的 WEB 訪問 - 哔哩哔哩
image

參考資料(排名不分先後)#

  1. HSTS Preload List Submission
  2. 如何在 Nginx 中啟用 HSTS?- 騰訊雲開發者社區 - 騰訊雲
  3. Lucky
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。