Ubuntu22.04でLet’sEncryptを使用してNginxを保護する方法
序章
Let’s Encryptは、無料の TLS / SSL証明書を取得してインストールするためのアクセス可能な方法を提供する認証局(CA)であり、これによりWebサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)を自動化しようとするソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。
このチュートリアルでは、Certbotを使用してUbuntu 22.04でNginxの無料SSL証明書を取得し、証明書を自動的に更新するように設定します。
このチュートリアルでは、デフォルトファイルの代わりに別のNginxサーバー構成ファイルを使用します。 ドメインごとに新しいNginxサーバーブロックファイルを作成することをお勧めします。これは、よくある間違いを回避し、フォールバック構成としてデフォルトファイルを維持するのに役立ちます。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
sudo対応の非rootユーザーとファイアウォールを含む、Ubuntu22.04チュートリアルのこの初期サーバーセットアップに従ってセットアップされた1つのUbuntu22.04サーバー。
-
登録されたドメイン名。 このチュートリアルでは、
example.com
全体を通して。 Namecheap からドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 -
次の両方のDNSレコードがサーバー用に設定されています。 DigitalOceanを使用している場合、それらを追加する方法の詳細については、DNSドキュメントを参照してください。
- とのAレコード
example.com
サーバーのパブリックIPアドレスを指します。 - とのAレコード
www.example.com
サーバーのパブリックIPアドレスを指します。
- とのAレコード
-
Ubuntu22.04にNginxをインストールする方法に従ってインストールされたNginx。 ドメインにサーバーブロックがあることを確認してください。 このチュートリアルでは、
/etc/nginx/sites-available/example.com
例として。
ステップ1—Certbotをインストールする
Certbotは、インストールにsnapパッケージを使用することをお勧めします。 SnapパッケージはほぼすべてのLinuxディストリビューションで機能しますが、Snapパッケージを管理するには、最初にsnapdをインストールしておく必要があります。 Ubuntu 22.04には、すぐに使用できるスナップのサポートが付属しているため、スナップコアが最新であることを確認することから始めることができます。
- sudo snap install core; sudo snap refresh core
以前に古いバージョンのcertbotがインストールされていたサーバーで作業している場合は、先に進む前にサーバーを削除する必要があります。
- sudo apt remove certbot
その後、インストールすることができます certbot
パッケージ:
- sudo snap install --classic certbot
最後に、リンクすることができます certbot
スナップインストールディレクトリからパスへのコマンドを入力するだけで実行できるようになります certbot
. これはすべてのパッケージで必要なわけではありませんが、スナップはデフォルトで邪魔にならない傾向があるため、誤って他のシステムパッケージと競合することはありません。
- sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbotがインストールされたので、それを実行して証明書を取得しましょう。
ステップ2—Nginxの構成を確認する
Certbotは正しいものを見つけることができる必要があります server
Nginx構成でブロックして、SSLを自動的に構成できるようにします。 具体的には、これを行うには、 server_name
証明書を要求するドメインに一致するディレクティブ。
Nginxインストールチュートリアルのサーバーブロックのセットアップ手順に従った場合は、ドメインのサーバーブロックが次の場所にあるはずです。 /etc/nginx/sites-available/example.com
とともに server_name
ディレクティブはすでに適切に設定されています。
確認するには、を使用してドメインの構成ファイルを開きます nano
またはお気に入りのテキストエディタ:
- sudo nano /etc/nginx/sites-available/example.com
既存のものを探す server_name
ライン。 次のようになります。
...
server_name example.com www.example.com;
...
含まれている場合は、エディターを終了して次の手順に進みます。
そうでない場合は、一致するように更新します。 次に、ファイルを保存し、エディターを終了して、構成編集の構文を確認します。
- sudo nginx -t
エラーが発生した場合は、サーバーブロックファイルを再度開き、タイプミスや文字の欠落がないか確認してください。 構成ファイルの構文が正しい場合は、Nginxをリロードして新しい構成をロードします。
- sudo systemctl reload nginx
Certbotは正しいものを見つけることができるようになりました server
ブロックして自動的に更新します。
次に、HTTPSトラフィックを許可するようにファイアウォールを更新しましょう。
ステップ3—ファイアウォールを介したHTTPSの許可
あなたが持っている場合 ufw
ファイアウォールが有効になっている場合、前提条件ガイドで推奨されているように、HTTPSトラフィックを許可するように設定を調整する必要があります。 幸いなことに、Nginxはいくつかのプロファイルを登録しています ufw
インストール時に。
次のように入力すると、現在の設定を確認できます。
- sudo ufw status
おそらく次のようになります。つまり、WebサーバーへのHTTPトラフィックのみが許可されます。
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'
ステータスは次のようになります。
- 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 example.com -d www.example.com
これは実行されます certbot
とともに --nginx
プラグイン、使用 -d
証明書を有効にするドメイン名を指定します。
コマンドを実行すると、電子メールアドレスを入力し、利用規約に同意するように求められます。 そうすると、プロセスが成功し、証明書がどこに保存されているかを示すメッセージが表示されます。
OutputIMPORTANT NOTES:
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-06-01.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
証明書がダウンロード、インストール、ロードされ、Nginx構成がすべてのWebリクエストを自動的ににリダイレクトするようになります https://
. Webサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。 通常は鍵のアイコンで、サイトが適切に保護されていることを示す必要があります。 SSL Labsサーバーテストを使用してサーバーをテストすると、Aグレードになります。
更新プロセスをテストして終了しましょう。
ステップ5—Certbotの自動更新を確認する
Let’s Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 The certbot
インストールしたパッケージは、1日2回実行され、有効期限が30日以内の証明書を自動的に更新するsystemdタイマーを追加することで、これを処理します。
タイマーのステータスをクエリするには、次のコマンドを使用します。 systemctl
:
- sudo systemctl status snap.certbot.renew.service
Output○ snap.certbot.renew.service - Service for snap application certbot.renew
Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static)
Active: inactive (dead)
TriggeredBy: ● snap.certbot.renew.timer
更新プロセスをテストするために、ドライランを実行できます。 certbot
:
- sudo certbot renew --dry-run
エラーが表示されない場合は、すべて設定されています。 必要に応じて、Certbotは証明書を更新し、Nginxをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let’s Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づいたときに警告します。
結論
このチュートリアルでは、Let’sEncryptクライアントをインストールしました certbot
、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを構成し、証明書の自動更新を設定します。 Certbotの使用についてさらに質問がある場合は、公式ドキュメントから始めることをお勧めします。