Ubuntu 16.04でLet’s Encryptを使用してRancher Webアプリを保護する方法

前書き

TLS/SSLを使用したWebアプリケーションの保護は、公式の証明書を取得するには費用がかかり、追加のセットアップが必要だったため、機密情報を処理するアプリケーションにのみ必要と考えられていました。 https://letsencrypt.org [Let’s Encrypt]を使用すると、無料で公式の証明書を自動で作成できます。つまり、トレードオフなしでこのセキュリティ層をWebサイトに追加できます。

http://rancher.com [Rancher]は、使いやすいダッシュボードを備えた直感的な方法でDockerコンテナーを管理します。 Rancherにはhttp://docs.rancher.com/rancher/v1.4/en/catalog/ [人気のあるアプリケーションのカタログ]があり、証明書を生成できるLet’s Encryptサービスを含め、即座にデプロイできます。必要に応じて更新。 作成されると、証明書はRancher内に保存され、問題なく使用できます。

Let’s EncryptをRancherでセットアップするプロセスは、3つの主要なステップで構成されています。Let’s Encryptサービスをデプロイし、生成した証明書をロードバランサーに適用し、HTTPからHTTPSへのリダイレクトをセットアップします。 このチュートリアルでは、プロセス全体を順を追って説明します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • Rancherがインストールされた1つの1GB Ubuntu 16.04サーバー。 これを構成するには、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-manage-multi-node-deployments-with-rancher-and-docker-machine-on-ubuntu-16-04に従ってください[Ubuntu 16.04でRancherおよびDockerマシンを使用してマルチノード展開を管理する方法]。 このチュートリアルでは、Dockerコンテナーのホストとして機能する追加のサーバーを作成します。

  • Rancherのビルトインロードバランサーサービスを使用するRancherを使用してデプロイされたアプリケーション。 Rancherカタログ内のアプリケーションを含む任意のアプリケーションでこのチュートリアルに従うことができますが、https://www.digitalocean.com/community/tutorials/how-to-deploy-a-node-に関するガイドも確認できますjs-and-mongodb-application-with-rancher-on-ubuntu-16-04 [Ubuntu 16.04でRancherを使用してNode.jsおよびMongoDBアプリケーションをデプロイする方法]を開始します。 どちらのルートを選択する場合でも、構成がRancherの組み込みLoad Balancerサービスを使用して、リクエストをアプリケーションコンテナーに転送することを確認してください。

  • Rancher Load Balancerサービスを実行するホストのパブリックIPアドレスを指す「+ your_domain 」の* A *レコードを持つ完全修飾ドメイン名(FQDN)。 これは、Let’s Encryptが証明書を発行するドメインを所有していることを検証する方法のために必要です。 これを設定するには、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean[DigitalOceanでホスト名を設定する方法]に従ってください。記録。 このチュートリアルを開始する前に、デプロイされたアプリケーションを「 http:// +」で表示できることを確認してください。

[[step-1---deploying-the-let’s-encrypt-service]] === ステップ1-Let’s Encrypt Serviceの展開

Let’s EncryptサービスをDockerコンテナとしてデプロイします。これは、Rancherホストの1つでホストされます。 このプロセスでは、RancherカタログからLet’s Encryptサービスを選択し、必要な情報を入力します。 この手順を完了すると、Rancherで証明書を入手できます。 何よりも、サービスは、有効期限が近づくと証明書を自動的に更新します。ユーザー側での操作は必要ありません。

まず、Rancherユーザーインターフェイスの上部にある[カタログ]メニューをクリックして、[ランチャーカタログ]に移動します。 次に、* Let’s Encrypt *サービスを検索します。 見つかったら、[詳細を表示]ボタンをクリックし、次の手順に従ってサービスを設定します。

  1. 最新のテンプレートバージョンを選択します。 このチュートリアルでは、バージョン* 0.4.0 *を使用します。

  2. 新しいアプリケーションスタックに固有の名前を付けます。 このチュートリアルでは「証明書」と呼びますが、どのような名前でも機能します。

  3. 条件に同意する場合は、情報を読んだ後、[TOSの暗号化に同意します]フィールドの[はい]オプションを選択します。

  4. Let’s Encrypt APIの* Production *バージョンを選択します。

  5. * Your Email Address *フィールドに有効なメールアドレスを入力します。

  6. [証明書名]に、証明書の名前を入力して、Rancherのユーザーインターフェイスで簡単に識別できるようにします。 これにはドメイン名を使用できます。

  7. * Domain Names *には、保護するドメイン名を入力します。 複数のドメインを保護する場合は、各ドメインをコンマで区切って入力します。

  8. 公開鍵アルゴリズム*については、Webアプリケーションで使用される最も一般的なアルゴリズムであるデフォルトの RSA-2048 *を選択するか、ニーズに合ったアルゴリズムを選択します。

  9. * Renewal Time of Day では、証明書を更新する時刻をUTCで選択します。 特定の制約がない限り、デフォルト値の 12 *は正常に機能します。

  10. [ドメイン検証方法]で、このチュートリアルの[HTTP]を選択します。 ドメインに使用しているDNSプロバイダーで機能する他の方法を選択できます。 DigitalOceanは、Cloudflare、DNSimple、Dyn、Gandi、Ovh、Route53、Vultrとともにリストに含まれています。 * HTTP *オプションはプロバイダーに関係なく機能し、このチュートリアルで使用するアプローチです。

  11. 残りのフィールドは、特定のDNSプロバイダーに関連しています。 * HTTP *メソッドを選択したため、空白のままにしておくことができます。

  12. 次に、[作成後にサービスを開始]チェックボックスをオフにします。 追加の構成変更を行った後、サービスを開始します。

  13. 最後に、ページの下部にある[起動]ボタンをクリックしてサービスを開始し、デプロイされるのを待ちます。

次に、Racherのロードバランサーサービスに、「+ /。well-known / acme-challenge +」のリクエストを新しい* Certificate *サービスに転送するように指示する必要があります。 これがないと、Let’s Encryptはドメインの所有者であることを確認できません。 次の手順に従ってプロセスを完了します。

  1. Rancherでロードバランサーサービスを見つけて、* Upgrade / Edit *ボタンをクリックします。

  2. 新しい*サービスルール*を追加します。

  3. 新しいルールの場合:

  4. * Access Public *に設定されていることを確認します。

  5. * Protocol HTTP *に設定されていることを確認します。

  6. *ポート*が `+ 80 +`に設定されていることを確認してください。

  7. * Path *を `+ /。well-known / acme-challenge`に設定します。

  8. * Target Certificate *サービスに設定します。

  9. この新しいサービスの*上矢印を押して、リストの最初のサービスであることを確認します。

  10. 画面の下部にある[編集]を押して、構成を保存します。

新しいルールを設定したら、Let’s Encryptサービスを開始します。

  1. インターフェイスの上部にある* Stacks メニューを選択して、 Certificate *スタックを見つけます。

  2. * Certificates スタックを選択して、 letsencrypt *サービスを表示します。

  3. *開始*ボタンを押してサービスを開始します。

この時点で、Let’s Encryptサービスが実行され、証明書が作成されます。 このプロセスには5〜15分かかります。 * Infrastructure メニューを選択し、 Certificates *を選択して証明書を表示します。 しばらくすると、新しい証明書が表示されますが、ページを更新する必要がある場合があります。 証明書が表示されたら、アプリケーションで使用できます。

手順2-証明書とアプリケーションのリンク

Let’s Encrypt証明書がRancherで利用可能になったら、それを選択してRancher Load Balancerサービスで使用できます。 そのためには、HTTPSを使用して証明書を適用するようにロードバランサーのルールを変更します。 これらの構成を変更するには、次の手順を実行します。

  1. Rancherでロードバランサーサービスを見つけ、その*アップグレード/編集*ボタンを押して設定にアクセスします。

  2. ポートルール*セクションで、アプリケーションにリクエストを転送するエントリを探し、*プロトコル*を HTTPS に変更し、*リクエストホストポート*をHTTPSのデフォルトポートである 443 *に変更します。

  3. ページの下部にある[* SSL Termination *]タブに移動し、使用する証明書を[Certificate *]フィールドで選択します。 複数の証明書を追加する場合は、[代替証明書]フィールドでそれらを選択できます。 証明書を選択すると、対応するドメインに自動的にリンクされます。

  4. ページの下部にある[作成]ボタンをクリックします。

HTTPSプロトコル( + https:// +)でWebサイトにアクセスすると、接続が安全になっていることがわかります。 しかし、ポート `+ 80 `をポート ` 443 `に置き換えたため、HTTP経由のリクエストは機能しなくなります。 この問題を解決するために、以前のHTTPとポート ` 80 +`のルールを追加し直すことができますが、代わりにロードバランサーを調整して、トラフィックをHTTPからHTTPSにリダイレクトします。 これにより、人々は常に安全な方法でサイトにアクセスできます。

ステップ3-HTTPからHTTPSへのリダイレクト

Rancher Load Balancerサービスは、カスタムHAProxy構成設定をサポートしています。 この機能を使用して、HTTPからHTTPSに着信するすべてのトラフィックをリダイレクトする構成を含める予定です。 このセクションのアプローチは、ドメイン検証リクエストを転送するために現在ポート「80」でリッスンしているため、以前に設定したLet’s Encryptサービスを活用します。

リダイレクトを設定するには、Rancherでロードバランサーサービスを見つけ、[アップグレード/編集]ボタンを押して、前の手順で行ったように設定にアクセスします。 設定ページが表示されたら、ページの下部にある* Custom haproxy.cfg *タブを選択します。

次のコードを追加して、リダイレクトを作成します。

カスタムhaproxy.cfg

frontend 80
acl lepath path_beg -i /.well-known/acme-challenge
redirect scheme https code 301 if  !lepath !{ ssl_fc }

これにより、すべてのトラフィックをHTTPSにリダイレクトするロードバランサーのルールが作成されますが、ドメイン検証を暗号化するために設定した `+ /。well-known / acme-challenge `パスのリクエストは無視されます。 「 code 301+」を使用して、このドメインの永続的なリダイレクトが必要であることを示します。 リダイレクト設定の詳細については、https://cbonte.github.io/haproxy-dconv/1.7/configuration.html#redirect%20scheme [HAProxy documentation]をご覧ください。

これらの変更を適用するには、ページの下部にある[編集]ボタンをクリックします。

この時点で、訪問者がHTTPを介してWebサイトにアクセスするたびに、HTTPSにリダイレクトされ、Webサイトがすべての人にとって安全になります。 これで、Webサイトのテストに進むことができます。

ステップ4-セットアップのテスト

Webサイトをテストするには、HTTPプロトコル( + http:// +)を使用してWebブラウザーでアドレスを開き、アドレスバーで安全なインジケーターを探します。 次のコマンドを実行して、 `+ curl +`ユーティリティを使用してテストすることもできます。このコマンドは、サーバーにリクエストを送信し、リダイレクトに従い、レスポンスヘッダーのみを返します。

curl -I -L http://

次のような結果が表示されます。

OutputHTTP/1.1 301 Found
Cache-Control: no-cache
Content-length: 0
Location:
Connection: close

HTTP/1.1
Cache-Control: public, max-age=0
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Date: Sun, 19 Feb 2017 03:42:47 GMT

出力の最初のブロックは、HTTPを介してWebサイトを最初に要求したときの応答を示しています。検出されたが、場所は現在別のアドレスにあることを示しています。 `301 Found +`セクションに注意してください。これは、追加したHAProxyルールが機能したことを示しています。 ` Location `セクションには、リクエストされたリソースの新しい場所が表示されます。 出力の2番目のブロックは、新しい場所へのリダイレクトの後に「 curl 」が続いたことを示しています。 また、「 200 OK +」応答で示されるように、新しい場所でWebサイトが見つかったことも示しています。

結論

このチュートリアルでは、RancherとLet’s Encryptサービスを使用してWebサイトにHTTPSを設定します。 安全なウェブサイトを取得することがこれまで以上に簡単になり、証明書を絶えず更新したり、タスク用に他のツールを設定したりする必要がなくなりました。 また、Rancherを使用すると、将来の需要を満たすためにインフラストラクチャを拡張できます。

Related