Synology NASで構築したDockerによるWebアプリケーションを、インターネットからHTTPSアクセスする方法についてまとめました。
DockerによるWebアプリケーションをSynology NAS上に構築していくとき、URLとしては「NASのローカルIPアドレス:ポート番号」とするのが一般的ですが、稀にHTTPSによるアクセスが必須なものがあります。
また、ローカルネットワークだけでなく、インターネット側からもアクセス可能としたい場合は、リバースプロキシの仕組みを用いて、Synology NASのDDNSドメイン名にサブドメインを追加して、Webアプリケーション毎に個別のURLでアクセスするようにすることが可能です。
例:synogoly NASのDDNSのドメイン名が[MyHost.myds.me]である場合
Synology NASにインストールしたPortainer.ioに、以下のURLでアクセス可能とする。
[https://portainer.MyHost.myds.me]
なお、前提条件は以下とします。
- Synology NASにDDNSを設定してインターネットからアクセス可能となっている。
- ローカルネットワークからのドメイン名アクセスのため内向きDNSの設定が行われてる。
上記についてはそれぞれ以下の記事で解説しています。
前提 本記事でのDSM(OS)バージョンは、Synology DSM 7.1 を用いています。
1.リバースプロキシとは
リバースプロキシとは、インターネットと内部ネットワークの間に配置され、インターネット側からのWebアクセス通信を受け付けて内部のWebサーバに中継する仕組みです。
Synology NASにはリバースプロキシの仕組みが搭載されているため、Synology NASがWebアクセスを受け付けて、アクセスするドメイン名毎に別々の中継先にリクエストを振り分けることが出来ます。
詳細については以下の記事で紹介しております。
2.Docker WebアプリケーションのHTTPS化手順
2-1.Synology DNSの証明書をワイルドカード証明書とする。
既にSynology NASのDDNSの証明書がワイルドカード証明書となっている場合は本手順はスキップしてください。
HTTPSでアクセスするための証明書でサブドメインでのアクセスを可能とするために、Synology DDNSの証明書をワイルドカード証明書に変更します。
[コントロールパネル]>[セキュリティ]>[証明書]の順に進みます。
DDNSの証明書を選択して[追加]をクリックします。
ダイアログが表示されるので、[既存の認証を置き換えます]を選択し、[次へ]をクリックします。
[Let's Encryptからの証明書をお受け取りください]を選択して、[次へ]をクリックします。
[ドメイン名]および[電子メール]はこれまでと同じものを入力し、サブジェクトの別名に[*.ドメイン名]を入力します。(例:ドメイン名がMyHost.myds.meであれば、*.Myhost.myds.me)
入力が終わったら、[完了]をクリックします。
[完了]クリック後、暫くするとワイルドカード証明書となった新しい証明書が発行されます。本証明書により[XXXX.MyHost.myds.me]といったURLについてhttps接続が可能となります。
2-2.リバースプロキシの設定
[コントロールパネル]>[ログインポータル]>[詳細設定]を選択し、[リバースプロキシ]ボタンをクリックします。
[作成]ボタンをクリックして、作成を行います。
[リバースプロキシ規則]画面が表示されるので、以下の内容を入力します。
プロキシ名を反転:リバースプロキシ規則の名称を入力します。
Target
プロトコル:HTTPSを選択
ホスト名:Webアプリケーションに設定したいドメイン名を入力
ポート:HTTPSのポートである443を入力
HSTSを有効にする:強制的にHTTPS接続設定する。ONとします。
送り先
プロトコル:Webアプリケーションのローカルネットワーク内でのプロトコル。HTTPを選択
ホスト名:Synology NASのローカルネットワーク上でのIPアドレスを値入力するか、localhostを入力
ポート:Webアプリケーションのローカルネットワーク内でのポート番号
すべて入力出来たら[保存]をクリックして設定を保存します。
2-3.内向きDNSにサブドメインレコードの追加
内向きDNS設定を行っている場合のみ本設定が必要となります。
内向きDNSからもサブドメインでIPアドレスを取得できるように、リソースレコードの追加を行います。
[DNS Server]で、Synology DDNSのゾーンを選択して[編集]>」[リソースレコード]をクリック
[リソースレコードを編集]画面で[作成]>[Aタイプ]を選択
[リソースレコードを追加 A]で、名前に[*]を入力し、IPアドレスにSynology NASのローカルネットワーク上でのIPアドレスを入力します。
入力が終わったら[保存]をクリックして設定を保存します。
以上で、内向きDNSからもサブドメインでIPアドレスを取得できるようになります。
2-4.リバースプロキシにおけるWebSocketの有効化設定
DockerによるWebアプリケーションの一部では、WebSocketを有効化する必要があります。
この設定を行うためには、[リバースプロキシ規則]画面より、[カスタムヘッダ]を選択し、[作成]>[WebScoket]をクリックします。
[WebScoket]をクリックすると、ヘッダ名と値が自動的に設定されるため、そのまま[保存]をクリックして設定を保存します。
3.注意事項
本設定を行うと、HTTPS化されているとはいえ、インターネット側からもWebアプリケーションにアクセス可能となるため、セキュリティには十分配慮する必要があります。
当該アプリケーションでの認証を強化し、デフォルトIDやデフォルトパスワードを無効化する、可能であれば多要素認証を導入するなどです。
なお、本当にインターネット側からアクセス必要なもの以外については、以下のようにするのがよいと思います。
- [アクセスコントロールプロファイル]を設定して外部からのアクセスを遮断する。
- 自分がインターネット側からアクセスしたい場合は、クライアントからVPN接続を行い、ローカルLANに接続してから対象のWebアプリケーションに接続する。
以下に、[アクセスコントロールプロファイル]を設定して外部からのアクセスを遮断する方法について説明します。
3-1.アクセスコントロールプロファイルの作成
[コントロールパネル]>[ログインポータル]>[詳細設定]を選択し、[アクセスコントロールプロファイル]ボタンをクリックします。
[作成]ボタンをクリックして、作成を行います。
[アクセスコントロールプロファイル]画面で以下の入力を行います。
プロファイル名:当該プロファイルの名称を入力
アクセスコントロールルール
[作成]釦をクリックし、ルールを入力していきます。ソースIPまたはCIDRの欄にアクセスを許可するIPアドレスまたはCIDR(IPアドレス範囲)を入力し、最後にそれ以外の全てを拒否するルールを入力します。
参考までに、本サイトでの入力例は以下となります。
ソースIPまたはCIDR | 同意/拒否 | 説明 |
---|---|---|
192.168.1.0/24 | 許可する | ローカルネットワークのIPV4アドレス |
10.2.0.0/16 | 許可する | VPNサーバのローカルアドレス |
240B:253:8001:4500::/56 | 許可する | ローカルネットワークのIPV6アドレス |
すべて | 拒否する | 上記以外は拒否する |
入力が終わったら[保存]ボタンをクリックして設定を保存します。
3-2.アクセスコントロールプロファイルをリバースプロキシ設定に適用
[リバースプロキシ規則]画面で、3-1.で作成したアクセスコントロールプロファイルを、[アクセスコントロールプロファイル] 入力欄で選択して[保存]をクリックします。た
上記設定で、リバースプロキシ設定にアクセスコントロールプロファイルが設定され、アクセスコントロールプロファイルで設定したルール以外のアクセスが禁止される動作となります。
4.まとめ
Synology NASで構築したDockerによるWebアプリケーションを、インターネットからHTTPSアクセスする方法について紹介しました。
繰り返しになりますが、インターネット側からアクセスを許可するということは、第三者からの不正アクセスされる可能性がありますので、セキュリティには十分注意する必要があります。
以上、最後まで記事を読んでいただき、ありがとうございました。