爲NAS/服務器補上認證缺口:Tinyauth快速實現外網登錄保護

其實最近發了篇但是黑盒這邊不讓過哈哈~已經明白啥是高壓線了,之前的Lucky教程也是

感興趣的可以去我的BLOG玩~

之前介紹過非常多的Docker應用,有的應用會自帶一個前端認證。用NAS舉例,本身的WEB自帶登陸認證,還支持配置兩步驗證到WEB各種應用服務。再比如QB、TR、EMBY這些常見Docker服務都內置了登陸驗證,但很多輕量級的工具類服務可能並沒有(IT- tools等),別人知道你的服務域名後就能直接白嫖。

本期咱們就來介紹一款中間認證服務:Tinyauth,用於保護我們的應用服務。大家看看動圖演示應該就能瞭解效果~

Tinyauth 正在積極開發中,配置可能會經常更改。更新前請務必仔細閱讀發行說明。

如果只是個人使用,像Lucky.CADDY 等自帶的 BasicAuth 其實已經非常方便。

因爲Lucky自帶認證,並且Tinyauth官方文檔明確對於NPM有很好的支持,所以就承接上一篇文章,我們基於NPM進行改造。

Lucky的認證如下圖所示。大家如果覺得夠用則無需部署Tinyauth。

Tinyauth 簡介

Tinyauth 是一個由 Go 語言開發的 輕量級身份認證中間件,主要用於在自託管或容器化環境中爲 Web 應用快速增加訪問控制功能。它不需要修改原有應用,只需通過反代(如 Traefik、Nginx、Caddy)接入,就能實現登錄保護。

✨ 主要特點

  • 輕量簡潔:單個二進制文件即可運行,無額外依賴,資源佔用極低。

  • 即開即用:配置簡單,常見場景只需設置環境變量即可完成部署。

  • 多種認證方式:支持用戶名密碼認證,也支持 OAuth 登錄(如 Google、GitHub)。

  • 反代友好:可與 Traefik、Nginx、Caddy 等無縫集成,適合 Homelab 和企業小型應用。

  • Cookie 統一認證:基於域名設置 Cookie,實現同一主域下多個應用的單點登錄。

🔧 應用場景

  • 給 個人 NAS 服務(如 QNAP)增加外網訪問保護。

  • 保護 內部工具(如 Portainer、Grafana、Whoami 等)。

  • 在 家庭實驗室 或 小團隊項目 中快速加一層身份驗證,而無需搭建複雜的 OAuth 服務。

準備工作

我們需要準備生成用戶名/密碼哈希以及32字節隨機密鑰。

SSH工具連接NAS,依次輸入以下命令。將生成的內容複製備用。可參考圖片。

# 交互生成用戶名/密碼哈希(整行復制)

docker run -it --rm ghcr.io/steveiliop56/tinyauth:v3 user create --interactive

# 輸入用戶名和密碼每一步都要回車,最後移動鍵盤方向鍵,選擇yes再回車一次即可

# 我設置的賬戶/密碼爲 ydxian/qnap1234

# 生成32字節隨機密鑰(整串複製),試過64會報錯

openssl rand -hex 16

部署流程

先創建一個專用網絡,方便需要反代的應用與NPM連通。

docker network create npm-net

查閱官方文檔後,我給出的推薦代碼如下:

services:

   app:

      image: jc21/nginx-proxy-manager:latest

      container_name: npm

      restart: always

      environment:

         TZ: Asia/Shanghai

         DISABLE_IPV6: "true"

      volumes:

         - /share/Container/npm/data:/data

         - /share/Container/npm/letsencrypt:/etc/letsencrypt

      ports:

         - "81:81" # NPM面板(僅內網)

         - "8442:80" # 公網HTTP(非常用端口)

         - "8443:443" # 公網HTTPS(非常用端口)

      networks:

         - npm-net

   tinyauth:

      image: ghcr.io/steveiliop56/tinyauth:v3

      container_name: tinyauth

      restart: always

      environment:

         - APP_URL=https://auth.xxx.xyz:8443 # 走NPM的8443

         - USERS=ydxian:$$2a$$10$$9Yc/rH90cPJEJjemF6oRmu9tbnClFyDhjSSjlRyJFPstuFqxr45Ky

         - SECRET=597c4353178836b87f78c5588fc6fc60

      networks:

         - npm-net

      ports:

         - "5202:3000"

networks:

   npm-net:

      external: true

需要注意的是,咱們國內用非標準端口號,APP_URL也要進行補齊。

將上面代碼改寫後,打開Container Station 創建新的應用程序。

成功的日誌參考。

反代HTTPS

這步是必要的~

打開NPM,我們要爲Tinyauth操作。如下圖填寫相關信息後保存。要注意別勾選Block Common Exploits,如果啓用,將不允許在查詢參數中使用 URL,而這正是 Tinyauth 正常運行所必需的。

再次對這條進行編輯。因爲上一篇我們申請了泛域名證書,這次就方便很多~保存即可。

接着瀏覽器輸入域名+8443就能訪問Tinyauth。

爲應用添加驗證

我的主NAS中部署了IT-Tools萬能工具箱,這個服務是不帶登錄認證的,咱們就拿它來演示。

爲了方便容器互通,部署代碼:

services:

   it-tools:

      image: ghcr.io/corentinth/it-tools:latest

      container_name: it-tools

      ports:

         - "8864:80" # 可留作本地直連排錯;不是必須

      networks:

         - npm-net

      restart: always

networks:

   npm-net:

      external: true

重複上面步驟,爲該服務做好反代。然後對其進行編輯,將下面的內容修改後粘貼進框內並保存。需要修改的位置已用中文標註。修改完後建議將註釋都刪除。

# Root location

location / {

# Pass the request to the app

  proxy_pass          $forward_scheme://$server:$port;

  # Add other app specific config here

  # Tinyauth auth request

  auth_request /tinyauth;

  error_page 401 = @tinyauth_login;

}

# Tinyauth auth request

location /tinyauth {

  # Pass request to Tinyauth

  proxy_pass http://tinyauth:3000/api/auth/nginx;

  # Pass the request headers

  proxy_set_header x-forwarded-proto $scheme;

  proxy_set_header x-forwarded-host $http_host;

  proxy_set_header x-forwarded-uri $request_uri;

}

# Tinyauth login redirect

# 下面這個域名改成你自己的Tinyauth服務

location @tinyauth_login {

  return 302 https://auth.xxx.xyz:8443/login?redirect_uri=$scheme://$http_host$request_uri; }

換到最後一欄,我們將參數編輯後粘貼進框內後保存。

瀏覽器輸入域名訪問工具箱。

我從Chrome換成了Safari,因爲緩存問題。其實新開個無痕也能驗證。會自動跳轉到驗證界面,速度大家不用擔心,很快~絲滑~

輸入上文SSH設置的賬戶密碼,不要輸入哈希值啊~回車登錄~如下圖所示,點擊繼續。

然後就成功進入應用咯。

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com