【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上)

目的:NPMを使ってSSLとリバースプロキシを設定し、ドメイン名(例:myqnap.domain.com)経由でQTSにアクセスすること。

問題点:
アクセス自体は完璧に動作しています。ドメイン名はルーターを指し、ルーターはポート80/443をNginx Proxy Manager(100.6)に転送し、NPMがトラフィックをQNAP(100.10)にリダイレクトします。

問題は、QTSが訪問者の本来の送信元IP(パブリックIP)を認識できないことです。

接続試行が失敗した場合(ブルートフォース攻撃)、QTSのセキュリティログには試行元のIPがNginx Proxy ManagerのIP(100.6)として記録されます。

結果として:QNAPでIPアクセス保護やFail2banを有効にして複数回の失敗後にIPをブロックしようとすると、自分のNginx Proxy Manager(100.6)のIPがブロックされます。

結果:

攻撃者は決してブロックされません。

自分のプロキシがブロックされ、全ての正規ユーザーがQTSへアクセスできなくなります。

質問:Nginx Proxy Managerで送信元IPアドレスを正しく転送する(X-Forwarded-ForやX-Real-IPヘッダー経由)にはどう設定すればよいでしょうか?また、QTS側でこのヘッダーを読み取り、信頼するように設定するにはどうすればよいでしょうか?

NPMのオプション(「Forward Client-IP」と「Forward Hostname」にチェック)も確認しましたが、QTSは依然としてプロキシのIPアドレスしか認識しないようです。Nginxの「Advanced」タブでカスタム設定を追加する必要がありますか?それとも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アドレスを関連付けるスクリプトを作成しました。これが私が見つけた唯一の解決策です。