QNAPは管理画面を通じて各種ツールが使えるようになっていますが、
- セキュリティ上インターネット側から直接接続出来るようにしたくない
- 既に他のサーバーが稼働していて80/443ポートが使用中&ポート変更もしたくない
等の理由で直接接続させたくない/出来ない場合に、リバースプロキシ配下に配置することが出来ます。
こんな感じにしたい
ランサムウェアなんかもありますしね…
もくじ
前提となる環境
- Windows Server 2022 + IIS
- QNAP TS-473A QTS 5.1.5.2645
IISにモジュールをインストール
まず、IISに以下のモジュールをインストールして、リバースプロキシとして機能するようにします。
以上2つをインストールすると、IISマネージャーにに設定項目が追加されます。
リバースプロキシの設定
Application Request Routingの有効化
サーバーノード(サイトではなく)のApplication Request Routing(以下ARP)の設定を開き、
Server Proxy Settings→Enable Proxy
をチェックしてARPを有効化します。
URL Rewriteルールの作成
サーバーノードからサイトごとのノードに移動して、URL Rewriteのルールを作成します。
空の受信規則を作成して、
URLの一致→パターンのフィールドに
(.*)
URL書き換え規則に
http://ts-473.example.com:8080/{R:1}
とし、”クリエ文字列の追加”をチェックします。
書き換え先はHTTPSでも、IPアドレスでも、IISが稼働するサーバーからアクセス出来るアドレスなら大丈夫です。
この状態でlocalhostにアクセスして、QNAPの管理画面が表示されれば成功です。
ホストヘッダによる振り分け
今のままだとIISへのリクエストは全てQNAPに転送されるので、アクセスしてきたホスト名(HTTP_HOST)に応じてリクエスを振り分ける設定します。
先ほどの受信規則の画面で、”条件”ノードを展開します。
条件の入力:
{HTTP_HOST}
パターン:
^192\.168\.100\.31$
としてみます。
※この環境ではIISのサーバーに192.168.100.31のIPアドレスが振られています
192.168.100.31でアクセスすると、QNAPの管理画面
localhost(↑以外)でアクセスすると、IISの初期ページが表示されるようになります。
上記はIPアドレスで設定していますが、通常はサブドメイン等を分けて使用することになるかと思います。
qnap.example.comのリクエストのみ転送したい場合は
^qnap\.example\.com$
となります。
こうすると、Windows側の機能とQNAPへのアクセスを両立させることが出来ます。
1つしかIPアドレスがなくても、Windows側でポート443でRRAS+RD-Gatewayを動かしつつ、同じポートでQNAPにもアクセス出来るのは何かと都合が良いです。
Qsyncの同期が通らない問題
QNAPの管理画面を通じて通信しているツールは基本的に問題なく使えるはずなのですが、ファイル同期ツールのQsyncを入れたら、接続は出来るが同期が進まなくなる問題が…
アクセスログを見てみると
- /cgi-bin/qsync/以下のCGIを通して通信している
- ファイルサイズが大きい時にコケる
という事が分かりました。
同期が失敗する件は、IISの設定で”許可されたコンテンツ最大長”に引っかかるのが原因でした。
具体的には、
要求フィルター→右ペインの機能設定→許可されたコンテンツ最大長
から、サイズを拡大します。
標準値は30MBなので、ファイル同期で使っていたら、割とすぐ引っかかります。
セキュリティ的観点
SSLは必要
本題から外れますが、同期が失敗する件を調べる際にログを眺めていたら、ファイル名等が思った以上に丸見えだったので、インターネット越しに使うなら絶対にSSL暗号化した方が良いです。
非SSL設定でも使える事がびっくりなぐらいの丸見えぶりで驚きました。。。
ホストヘッダは設定した方が良い
QNAPのポートをインターネット上に直接開放していると、IPアドレス総当たりと思われる攻撃が結構来るのですが、手前にリバースプロキシを置いて、ホストヘッダが一致しないとリクエストが通過しない状態にすると、ほとんどアクセスは来なくなりました。
個人がリモートアクセス用に使っているドメインを総当たりで当てるなんて無理なので、当然ですね。サイト等で使っていないドメインなら、ホストヘッダ自体がパスワードのような役割を果たします。不穏なログも残らなくなるので一石二鳥です。