Ubuntu18.04でLet'sEncryptを使用してNginxを保護する方法

提供:Dev Guides
移動先:案内検索

序章

Let's Encryptは、無料の TLS / SSL証明書を取得してインストールする方法を提供する認証局(CA)であり、これによりWebサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)を自動化しようとするソフトウェアクライアントCertbotを提供することにより、プロセスを合理化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。

このチュートリアルでは、Certbotを使用してUbuntu 18.04でNginxの無料SSL証明書を取得し、証明書を自動的に更新するように設定します。

このチュートリアルでは、デフォルトファイルの代わりに別のNginxサーバーブロックファイルを使用します。 ドメインごとに新しいNginxサーバーブロックファイルを作成することをお勧めします。これは、よくある間違いを回避し、フォールバック構成としてデフォルトファイルを維持するのに役立つためです。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • このUbuntu18.04チュートリアルの初期サーバーセットアップに従ってセットアップされた1つのUbuntu18.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
  • 完全に登録されたドメイン名。 このチュートリアルでは、全体を通してyour_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
  • 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
    • サーバーのパブリックIPアドレスを指すyour_domainのAレコード。
    • サーバーのパブリックIPアドレスを指すwww.your_domainのAレコード。
  • Ubuntu 18.04にNginxをインストールする方法に従って、Nginxをインストールします。 ドメインにサーバーブロックがあることを確認してください。 繰り返しになりますが、このチュートリアルでは例として/etc/nginx/sites-available/your_domainを使用します。

ステップ1—Certbotをインストールする

Let's Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。

Certbotプロジェクトでは、ほとんどのユーザーがsnapを介してソフトウェアをインストールすることを推奨しています。これは、Canonical(Ubuntuの背後にある会社)によって開発され、現在多くのLinuxディストリビューションで利用できるパッケージマネージャーです。

sudo snap install --classic certbot

出力には、Certbotの現在のバージョンと正常なインストールが表示されます。

Output
certbot 1.21.0 from Certbot Project (certbot-eff✓) installed

次に、/usr/bin/ディレクトリから新しくインストールされた/snap/bin/certbot実行可能ファイルへのシンボリックリンクを作成します。 これにより、certbotコマンドをサーバーで正しく実行できるようになります。 これを行うには、次のlnコマンドを実行します。 これには、ハードリンクではなく、シンボリックリンクまたはソフトリンクを作成する-sフラグが含まれています。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

これでCertbotを使用する準備が整いましたが、NginxのSSLを構成するには、Nginxの構成の一部を確認する必要があります。

ステップ2—Nginxの構成を確認する

CertbotがSSLを自動的に構成できるようにするには、Nginx構成で正しいserverブロックを見つけることができる必要があります。 具体的には、証明書を要求するドメインに一致するserver_nameディレクティブを検索することによってこれを行います。

Nginxインストールチュートリアルで推奨されているサーバーブロックのセットアップ手順に従った場合、server_nameディレクティブがすでに適切に設定された、/etc/nginx/sites-available/your_domainにドメインのサーバーブロックがあります。 。

確認するには、nanoまたはお気に入りのテキストエディタを使用して、ドメインのサーバーブロックファイルを開きます。

sudo nano /etc/nginx/sites-available/your_domain

既存のserver_name行を見つけます。 次のようになります。

/ etc / nginx / sites-available / your_domain

...
server_name your_domain www.your_domain;
...

含まれている場合は、エディターを終了して次の手順に進みます。

そうでない場合は、一致するように更新します。 次に、ファイルを保存して、エディターを終了します。 nanoを使用している場合は、CTRL + XYENTERの順に押すとこれを行うことができます。

次に、構成編集の構文を確認します。

sudo nginx -t

エラーが発生した場合は、サーバーブロックファイルを再度開き、タイプミスや文字の欠落がないか確認してください。 構成ファイルの構文が正しい場合は、Nginxをリロードして新しい構成をロードします。

sudo systemctl reload nginx

Certbotは、正しいserverブロックを見つけて、それを更新できるようになりました。

次に、HTTPSトラフィックを許可するようにファイアウォールを更新します。

ステップ3—ファイアウォールを介したHTTPSの許可

前提条件ガイドで推奨されているように、ufwファイアウォールを有効にしている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。 幸い、Nginxはインストール時にufwにいくつかのプロファイルを登録します。

次のコマンドを実行して、現在の設定を確認できます。

sudo ufw status

次のような出力を受け取るはずです。これは、HTTPトラフィックのみがWebサーバーに許可されていることを示しています。

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

追加のHTTPSトラフィックを取り込むには、Nginxフルプロファイルを許可し、冗長なNginxHTTPプロファイルの許容値を削除します。

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

ufw statusコマンドを実行すると、次の新しいルールが反映されます。

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

次に、Certbotを実行して、証明書を取得します。

ステップ4—SSL証明書を取得する

Certbotは、プラグインを介してSSL証明書を取得するためのさまざまな方法を提供します。 Nginxプラグインは、Nginxの再構成と、必要に応じて構成の再読み込みを処理します。 このプラグインを使用するには、次を実行します。

sudo certbot --nginx -d your_domain -d your_domain

これは、--nginxプラグインでcertbotを実行し、-dを使用して、証明書を有効にする名前を指定します。

certbotを初めて実行する場合は、メールアドレスを入力して利用規約に同意するよう求められます。 その後、certbotはLet'sEncryptサーバーと通信して、ドメインの証明書を要求します。 成功すると、次の出力が表示されます。

Output
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-01-27.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain
Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

証明書がダウンロード、インストール、およびロードされます。 https://を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。 サイトが適切に保護されていることを示す必要があります。通常は緑色の鍵のアイコンが付いています。 SSL Labsサーバーテストを使用してサーバーをテストすると、Aグレードになります。

SSL証明書を取得したので、最後のステップは更新プロセスをテストすることです。

ステップ5—Certbotの自動更新を確認する

Let's Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 インストールしたcertbotパッケージは、/etc/cron.dに更新スクリプトを追加することでこれを処理します。 このスクリプトは1日2回実行され、有効期限が切れてから30日以内の証明書は自動的に更新されます。

更新プロセスをテストするには、certbotを使用してドライランを実行できます。

sudo certbot renew --dry-run

エラーが発生しなければ、準備は完了です。 必要に応じて、Certbotは証明書を更新し、Nginxをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let's Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づいたときに警告します。

結論

このチュートリアルでは、Let'sEncryptクライアントcertbotをインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを構成し、証明書の自動更新を設定しました。 Certbotの使用についてさらに質問がある場合は、それらのドキュメントから始めることをお勧めします。