[QTS + Nginx Proxy Manager] 原始 IP 位址遺失

大家好,

我在 QNAP(QTS)和 Nginx Proxy Manager(NPM)之間遇到了一個設定問題,導致我的 Fail2ban(或 QTS 存取保護)無法有效防禦暴力破解攻擊。

我的設定如下:
QNAP(QTS):本地 IP 192.168.10.10(我已將其更改為標準 RFC1918 IP 位址,您也可以使用自己的)
Nginx Proxy Manager:本地 IP 192.168.10.6(在 Docker 容器或獨立 VM 上)

目標:通過網域名稱(例如 myqnap.domain.com)使用 NPM 進行 SSL 與反向代理來存取 QTS。

問題描述:
存取功能運作正常。我的網域名稱指向路由器,路由器將 80/443 埠轉發給 Nginx Proxy Manager(100.6),然後 NPM 再將流量轉發到我的 QNAP(100.10)。

問題在於 QTS 看不到訪客的真實來源 IP(公開 IP)。

當連線嘗試失敗(暴力破解攻擊)時,QTS 安全日誌顯示嘗試來自 IP 100.6(我的 Nginx Proxy Manager 的 IP)。

後果:如果我在 QNAP 上啟用 IP 存取保護或 Fail2ban,讓其在多次失敗後封鎖 IP,結果會封鎖掉我的 Nginx Proxy Manager(100.6)。

結果:

攻擊者永遠不會被封鎖。

我自己的代理被封鎖,導致所有合法使用者都無法存取 QTS。

我的問題是:如何設定 Nginx Proxy Manager 正確轉發來源 IP 位址(透過 X-Forwarded-For 或 X-Real-IP 標頭),以及如何設定 QTS 讀取並信任這個標頭?

我已經查看過 NPM 的選項(已勾選「Forward Client-IP」和「Forward Hostname」),但 QTS 似乎仍然只看到代理的 IP 位址。我是否需要在 Nginx(NPM 的「進階」標籤)中新增自訂設定,或者 QTS 是否有隱藏的設定可以「信任」代理?

非常感謝大家的協助!

聽起來像是這個

同一位用戶嗎?

是的,沒錯,很遺憾並沒有提供解決方案。

實際上,NPM確實能看到IP地址,但當用戶用假密碼測試時,失敗並不會在NPM中顯示。使用QNAP時,失敗的嘗試是可見的,但它們會顯示為NPM的內部IP地址。

2025-11-04T21:24:51+01:00 NAS-L qulogd[17070]: conn log: 使用者:Dbd,來源IP:192.168.10.6,電腦名稱:—,連線類型:HTTPS,存取資源:管理,動作:登入失敗

如果你有像 opnsense/pfsense 這樣的防火牆,你可以限制進入的存取,這樣就能減少潛在的攻擊。

我不知道怎麼用 npm 做你想要的事,但在防火牆上你可以設定規則來封鎖一組 IP,或只允許某些 IP 進入等等。

外部攻擊是我不讓內部應用程式直接透過外部 IP 存取的原因。我寧願透過 VPN 連進我的防火牆,再存取服務,也不想把它暴露在網路上。

唯一沒有被封鎖的是我的遊戲伺服器和一個網站。但同樣地,防火牆會封鎖大多數國家、已知垃圾郵件發送者的 IP 等等。

這個解決方案太過侷限,實在可惜,因為 QNAP 提供了解決方案,但我們因為害怕被駭而有所保留。為所有 QNAP 客戶端新增 VPN 會變得難以管理。我寫了一個腳本,將 QNAP 日誌中的 IP 位址與透過我的 NPM 嘗試連線的裝置 IP 位址進行關聯;這是我目前找到的唯一解決方法。