Nginx Proxy Managerを使ってワイルドカードSSL証明書を作成する

Nginx Proxy Managerを使って、イントラネットに立ち上げていたWebサービスを外部からも入れるようにします。
（外部からアタックされる可能性があるので、慎重に実施していただくとともに、ご自身の責任で行ってください）

# イントラネットにWebサービスを立ち上げる

まずは、公開するWebサービスをイントラネットで使えるようにセットアップします。
CasaOSにあるApp Storeの中から、今回はFileBrowserを使おうと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/19e1bc0b-ae13-63ff-b46f-285671abdcb6.png)

FileBrowserのアイコンをクリックすると、BileBrowserがブラウザの別タブで立ち上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/9384814c-05b0-994b-f3a6-3142ff9042e2.png)

初期ユーザ名とパスワードは、admin/admin です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/6e902aeb-5991-de8a-982f-ba129e8411d5.png)

ブラウザのアドレスバーを見ていただくと、ポート番号10180に立ち上がっているのがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/7d7584e9-72a8-5165-b1cc-c7e5ff316e9a.png)

# Nginx Proxy Managerをインストールする

CasaOSのApp Storeから、Nginx Proxy Managerをインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/4e7fb08e-7eab-b1e4-8942-57600420146a.png)

Nginx Proxy Managerのアイコンをクリックして、Nginx Proxy Managerを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/d80c716b-9422-8159-699d-f5a4b2228938.png)

初期ユーザ名/パスワードは、admin@example.com / changeme です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/c6101300-e812-e0ee-6aee-f291ae7652dc.png)

最初に、名前やパスワードの変更を促されます。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/12f95921-cd07-2655-0d48-dc6e6642a41a.png)
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/bfe2305c-aa69-084a-92f3-3c611ff8822c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/9d9274c4-9141-984a-0064-ce591652f7b3.png)


Settingを参照するとわかるのですが、Nginx Proxy Managerは、
・80、443：プロキシ対象ポート番号
・81：管理コンソール用
の3つのポート番号が使われています。

80番ポートでアクセスすると、以下が表示されます。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/6683f543-aedc-0bf8-a1e3-472a8d1d7f9e.png)

# ドメイン名を取得する

パブリックにアクセス可能なように、ドメイン名を取得します。
今回は、お名前.comで購入しました。

https://www.onamae.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/e4c870f4-505a-e5b2-7c53-7255e157e3fa.png)

お好きなドメイン名を入力し、お好きな接尾子を選択します。
今回は、例として、sample.work とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/4578ffb4-e22c-7fd6-0ff9-95be45a7c8cb.png)

利用用途には、決めていない を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/05ad6aec-1296-06cb-32b1-98c920985aff.png)

Whiis情報公開代行メール転送オプションはお好みで。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/f591a952-ddd2-a1ec-089d-99a37d8a7488.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/8480330f-9aaf-05a1-c632-eb75686f2c3b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/a629a96d-e4eb-3b03-2798-06813ebd62d2.png)

作成が完了しました。
デフォルトで1年自動更新なので更新時期は気を付けましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/733efc1b-fc08-9d57-cb14-d700baad006e.png)

次に、DNSサーバに先ほどもらったドメイン名を設定します。
今回は、AWSのRoute53を使いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/80b5f7e6-5233-5cb8-8f38-b801a78f55bd.png)

ホストゾーンの作成ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/60243767-8de4-6e76-723c-ad555ef2adaf.png)

ここで、先ほど購入したドメイン名を入力して、ホストゾーンの作成ボタンをクリックします。sample.workです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/5d431a52-db73-e42b-9db3-f0001870ca11.png)

ここに表示されているタイプ「NS」の「値/トラフィックのルーティング先」にある4つのドメイン名を覚えておきます。
また、一つ上に戻って表示されている「ホストゾーンID」も覚えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/66ed92d9-1016-8e6d-502a-ed33bd73bf84.png)

お名前.comのページに戻ります。
ドメイン一覧が表示されているところのネームサーバの「初期設定」と書かれているところをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/2f54ffde-4191-ecdf-05e9-7a1f87f267d8.png)

「他のネームサーバを利用」のネームサーバ情報の入力欄に、先ほどの4つの値/トラフィックのルーティング先を記載します。このとき、最後の「.」は不要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/9793d523-c283-f73c-e791-ee7926d7627f.png)

「確認画面を進む」を押すと完了です。ドメインプロテクションはお好みで。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/abc35051-fa20-c3c0-0280-c863837a61bd.png)
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/5ba548f3-f945-54bb-19c6-bd9de2b4730c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/a283bf16-7084-8b14-513a-29d6a655af97.png)

# FileBrowserに外からアクセスできるようにする。

まずは、インターネットルータのWAN側のIPアドレスを確認してください。
ルータによって確認方法が異なるかと思います。また、インターネットサービスプロバイダからDHCPによって取得されるもので、たびたび値が変わるかと思います。

今回はFileBrowserに外からアクセスするようにするので、files.sample.work というURLにします。

またAWS Route53に戻ってきます。
「レコードの作成」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/a0f6fc91-8464-c956-e971-a19b20ed2f65.png)

レコード名にfilesと入力します。値には、インターネットルータのWAN側のIPアドレスです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/03d50da8-daab-5527-6d5f-8c945d614202.png)

Nginx Proxy Managerを開き、Hosts → Proxy Hosts を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/beef2728-bc88-2c75-0efd-96851943669e.png)

Add Proxy Host ボタンをクリックすると以下のダイアログが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/d53163a0-8068-7577-b48a-54f2da380fa1.png)

Detailsタブに以下を入力します。FileBrowserのページを指定しています。

Domain Names：files.sample.work
Scheme：http
Forward Host Name / IP ： サーバPCのIPアドレス
Forward Port：10180

最後に、インターネットルータの設定をします。
ルータの80ポートにアクセスしてきたら、サーバPCのIPアドレスに転送する設定です。「静的NAT設定」などという名前で設定できますが、ルータによって設定方法が異なります。
また、ルーターによっては、ポート番号80番がルータ設定管理コンソールに割り当てられてしまっている場合があります。その場合は、ホストファイルを編集するか、イントラネット内にDNSサーバを立ち上げて、files.sample.workは、サーバPCのIPアドレスを指し示すようにします。

これで、インターネット側からhttp://files.sample.work を開くと、サーバPCのFileBrowserが開くはずです。

# Let's EncryptでワイルドカードのSSL証明書を作成する

Nginx Proxy Managerには、Let’s Encryptに対してSSL証明書を作成する機能があります。また、Let's EncryptでワイルドカードのSSL証明書を作成するには、DNSサーバにTXTレコードを配置する必要があります。
今回は、AWS Route53を使っていますので、そこに特定のTXTレコードを追加する必要があります。
TXTレコードは、Nginx Proxy Managerが生成してくれるため、Route53の対象ドメインのホストゾーンを操作するアカウントを作成し、そのアプリクライアントクレデンシャルを渡してあげる必要があります。

AWS管理コンソールから、IAMを開きます。
そして、「ユーザーの作成」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/aefc1747-0e53-e98f-f236-c77d37b1557b.png)

名前は適当に「certbot」としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/07e3338a-9149-1eee-f9b5-bf93cef78ad3.png)

「ポリシを直接アタッチする」を選択して、「ポリシーの作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/93ec3175-7848-0537-d122-cd622c1fe76b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/4491fa32-07f4-429c-e5cb-313f68cfe897.png)

以下のポリシを作成します。

```
{
    "Version": "2012-10-17",
    "Id": "certbot-dns-route53 sample policy",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "route53:GetChange",
            "Resource": "arn:aws:route53:::change/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "route53:ChangeResourceRecordSets",
                "route53:ListResourceRecordSets"
            ],
            "Resource": "arn:aws:route53:::hostedzone/【AWS Route53のホストゾーンID】"
        }
    ]
}
```

AWS Route53のホストゾーンIDのところに、さきほどメモったホストゾーンIDを置き換えます。

ポリシ名は適当に「ForCertbot」としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/0aea035b-7ba1-6053-96c3-239f96e87e74.png)

さきほどのユーザに割り当てておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/ab372f23-e222-90ff-2716-56c8d0b51728.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/6cb1002e-9c76-8a1d-3ba8-fe6256ac5042.png)

また、このユーザのアクセスキーが必要なので、作成しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/d2831471-1340-c0d9-aba7-4116af7bfae7.png)

「AWSの外部で実行されるアプリケーション」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/a10a49c0-7f6d-eb46-0a89-a3d705da251b.png)

表示されたアクセスキーとシークレットアクセスキーをメモっておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/80045e38-f6d0-cedb-eccc-ce348bd16afd.png)

また、Nginx Proxy Managerに戻ります「SSL Certificates」タブを選択し、「Add SSL Certificate」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/b2eb80d9-416f-4b16-eb88-ebc8939660d3.png)

以下を入力します。

Domain Names：*.sample.work
Email Address for Let’s Encrypt：ご自身のメールアドレス
Use a DNS Challenge：On
DNS Provider：Route 53 (Amazon)
Credentials File Content：以下
[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYYY
I agrees to the Let’s Encrypt Terms of Services：On

さきほどAWSのIAMで生成されたアクセスキーとシークレットアクセスキーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/f96808a1-a396-2c72-e20b-ba8022fb9bad.png)

「Save」ボタンをクリックすると少し時間がかかりますが、生成に成功します。
一瞬AWS Route53にTXTレコードが追加されますが、最後にはそのTXTレコードは削除されてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/7f10541a-5a36-0bea-9e8c-3bba014f3f83.png)

以前に作ったProxy Hostを再度開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/c34e3d19-21d6-d237-0a04-a2651f0a3b40.png)

SSLタブを選択します。
SSL Certificateのところで、先ほど作成した *.sample.workが選択できるようになっています。「Save」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/f4d45772-97d9-81d0-208a-a83ff858912e.png)

SSLのところが、Let's Encryptになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/452caaef-4999-c50d-6833-92a8bae6b70a.png)

インターネットルータの設定で、443ポートでアクセスしてきたら、サーバPCに転送するように静的NAT設定をしておきます。

それでは、httpsを付けて「 https://files.sample.work 」をブラウザから開いてみましょう。ちゃんとFileBrowserが開けているはずです。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/9ad85faf-dd81-4088-e494-871ae0398142.png)

# 参考

[Androidのフォアグラウンドサービスで位置情報を取得する](https://qiita.com/poruruba/items/aa02207080a390e1ac85)
[CasaOSで自分NASを構築する](https://qiita.com/poruruba/items/03f7179c9e370bfdd5ec)
[Nginx Proxy Managerを使ってワイルドカードSSL証明書を作成する](https://qiita.com/poruruba/items/13ec1d93b27a43359ea5)
[ThingsBoardをDockerでインストール](https://qiita.com/poruruba/items/7184e829f9b2dee2a776)

以上