Ubuntu 18.04でLet's Encryptを使ってNginxを保護する方法

0 株式
0
0
0
0

導入

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

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

前提条件
  • Ubuntu 18.04 の初期サーバー セットアップに従って、非ルート sudo ユーザーとファイアウォールを含む Ubuntu 18.04 サーバーがセットアップされました。.
  • 完全に登録されたドメイン名 このチュートリアルでは、your_domain を使用します。ドメイン名はNamecheapで購入することも、Freenomで無料で取得することも、お好みのドメインレジストラを利用することもできます。.
  • 以下の2つのDNSレコードがサーバーに設定されています。追加方法の詳細については、DigitalOcean DNSのこちらの紹介をご覧ください。.
  • your_domain がサーバーのパブリック IP アドレスを指すレコード。.
  • サーバーのパブリック IP アドレスを指す www.your_domain を含むレコード。.
  • Nginxは、Ubuntu 18.04へのNginxのインストール方法に従ってインストールされます。ドメイン用のサーバーブロックがあることを確認してください。このチュートリアルでも、/etc/nginx/sites-available/your_domainを例として使用します。.

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

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

Certbot プロジェクトでは、ほとんどのユーザーに対して、Canonical (Ubuntu の開発元) が最初に開発し、現在では多くの Linux ディストリビューションで利用可能なパッケージ マネージャーである snap を使用してソフトウェアをインストールすることを推奨しています。

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 インストール チュートリアルで推奨されているサーバー ブロック設定手順に従うと、/etc/nginx/sites-available/your_domain にドメインのサーバー ブロックが作成され、server_name ディレクティブが適切に設定されます。.

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

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

既存のserver_name行を見つけます。以下のようになっているはずです。

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

そうであれば、エディターを終了して次の手順に進みます。.

一致しない場合は、一致するように更新してください。ファイルを保存してエディタを終了します。nanoを使用している場合は、Ctrl + X、Y、Enterの順に押すことで保存できます。.

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

sudo nginx -t

エラーが発生した場合は、サーバーブロックファイルを再度開き、誤字脱字や文字抜けがないか確認してください。設定ファイルの構文が正しいことを確認したら、Nginxをリロードして新しい設定を読み込みます。

sudo systemctl reload nginx

Certbot は正しいサーバー ブロックを見つけて更新できるようになりました。.

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

ステップ3 – ファイアウォール経由でHTTPSを許可する

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

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

sudo ufw status

次のような出力が表示され、Web サーバーへのトラフィックは HTTP のみ許可されていることがわかります。

Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere 
Nginx HTTP ALLOW Anywhere 
OpenSSH (v6) ALLOW Anywhere (v6) 
Nginx HTTP (v6) ALLOW Anywhere (v6)

追加の HTTPS トラフィックを許可するには、完全な Nginx プロファイル権限を付与し、追加の Nginx HTTP 権限を削除します。

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

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

sudo ufw status
Output
Status: 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's Encrypt サーバーに接続し、ドメインの証明書をリクエストします。成功すると、以下の出力が表示されます。

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's Encrypt クライアント certbot をインストールし、ドメインの SSL 証明書をダウンロードし、これらの証明書を使用するように Nginx を設定し、証明書の自動更新を設定しました。Certbot の使い方についてさらに質問がある場合は、Certbot のドキュメントをご覧ください。.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あなたも気に入るかもしれない