Debian10でLet’sEncryptを使用してApacheを保護する方法
序章
Let’s Encrypt は、無料の TLS / SSL証明書を簡単に取得してインストールできる認証局(CA)であり、Webサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)を自動化しようとするソフトウェアクライアント Certbot を提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。
このチュートリアルでは、Certbotを使用してDebian 10でApache用の無料のSSL証明書を取得し、証明書を自動的に更新するように設定します。
このチュートリアルでは、デフォルトの設定ファイルの代わりに、別のApache仮想ホストファイルを使用します。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
このDebian10チュートリアルの初期サーバーセットアップに従ってセットアップされた1台のDebian10サーバー。これには、
sudo
特権を持つ非rootユーザーとファイアウォールが含まれます。 -
完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例としてyour_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
-
次の両方のDNSレコードがサーバー用に設定されています。 これらを設定するには、ドメインを追加するためのこれらの手順、次にDNSレコードを作成するためのこれらの手順に従うことができます。
- サーバーのパブリックIPアドレスを指す
your_domain
のAレコード。 - サーバーのパブリックIPアドレスを指す
www.your_domain
のAレコード。
- サーバーのパブリックIPアドレスを指す
-
Apacheは、 Debian10にApacheをインストールする方法に従ってインストールされます。 ドメインに仮想ホストファイルが設定されていることを確認してください。 このチュートリアルでは、例として
/etc/apache2/sites-available/your_domain.conf
を使用します。
ステップ1—Certbotをインストールする
Let’s Encryptを使用してSSL証明書を取得するための最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。
注:現在、CertbotはデフォルトでDebianソフトウェアリポジトリから利用できませんが、/ etc / apt/sources.listファイルのバスターバックポートリポジトリを構成することは可能です。 APTを使用してCertbotソフトウェアのバックポートをインストールできるようにします。
ただし、バックポートは、Debianのテストから再コンパイルされたパッケージであり、安定したDebianディストリビューションで実行するために再コンパイルされた不安定なリポジトリです。 これらのパッケージは定期的にテストされておらず、常に最新であるとは限りません。 したがって、Certbotバックポートはバージョン 0.31 をインストールしますが、この記事の執筆時点での現在のバージョンは1.09です。 これらのバージョンのCertbotの顕著な違いの1つは、バージョン 0.31のデフォルト設定でTLSv1.0とTLSv1.1が有効になることです。これは、ほとんどの主要なWebブラウザーで非推奨となった2つのセキュリティプロトコルであり、これらを有効にします。プロトコルはセキュリティの脆弱性をもたらす可能性があります。 このデフォルトを変更することは可能ですが、変更すると、Certbotを非常に便利にする自動更新が機能しなくなる可能性があります。
より新しいバージョンのCertbotがDebianAPTリポジトリから入手できるようになるまで、このチュートリアルはCertbotドキュメントの推奨事項に従ってバージョン1.09とsnappyパッケージをインストールします。 snapsと呼ばれる形式でパッケージをインストールするLinuxシステム用に開発されたマネージャー。
CertbotをDebianにスナップとしてインストールするには、最初にsnapd
をサーバーにインストールする必要があります。 snapd
は、スナップのインストール、使用、および管理に必要なデーモンです。 snapd
パッケージをインストールすると、サーバーにsnap
コマンドもインストールされます。
snapd
をインストールするには、最近行っていない場合は、ローカルパッケージインデックスを更新します。
- sudo apt update
次に、snapd
パッケージをインストールします。
- sudo apt install snapd
このコマンドを実行すると、snapd
とその依存関係をインストールするかどうかを確認するメッセージが表示されます。 Y
を押してから、ENTER
を押します。
次に、snap
コマンドを使用して、core
スナップをインストールします。 これにより、Certbotスナップなど、インストールするスナップに必要ないくつかの依存関係がサーバーにインストールされます。
- sudo snap install core
次に、core
スナップを更新します。 そうすることで、snapd
の最新バージョンとその依存関係がインストールされていることを確認できます。
- sudo snap refresh core
その後、次のコマンドでcertbot
スナップをインストールできます。
スナップは、システムからさまざまな程度の分離を提供する3つの閉じ込めレベルのいずれかの下にインストールできることに注意してください。 たとえば、ほとんどのスナップはデフォルトで--strict
の制限レベルでインストールされるため、これらのプログラムはシステムのファイルやネットワークにアクセスできません。 証明書を正しく設定するには、Certbotが特定の構成ファイルを編集できるようにする必要があるため、このコマンドには--classic
オプションが含まれています。 この制限レベルにより、その下にインストールされたスナップは、従来のパッケージと同じシステムリソースへのアクセスが可能になります。
- sudo snap install --classic certbot
このインストールプロセスでは、certbot
実行可能ファイルが/snap/bin/
ディレクトリにインストールされます。 /usr/bin/
ディレクトリにこのファイルへのシンボリックリンクを作成して、システムのどこからでもcertbot
コマンドを実行できるようにします。
- sudo ln -s /snap/bin/certbot /usr/bin/certbot
これでCertbotを使用する準備が整いましたが、ApacheのSSLを構成するには、Apacheが正しく構成されていることを確認する必要があります。
ステップ2—SSL証明書を設定する
Certbotは、SSLを自動的に構成するために、Apache構成で正しい仮想ホストを見つけることができる必要があります。 具体的には、証明書を要求するドメインに一致するServerName
ディレクティブを探すことによってこれを行います。
Apacheインストールチュートリアルの仮想ホストのセットアップ手順に従った場合、ServerName
ディレクティブを使用して/etc/apache2/sites-available/your_domain.conf
にドメインのVirtualHost
ブロックが必要です。すでに適切に設定されています。
確認するには、nano
またはお気に入りのテキストエディタを使用して、ドメインの仮想ホストファイルを開きます。
- sudo nano /etc/apache2/sites-available/your_domain.conf
既存のServerName
行を見つけます。 your_domain
の代わりに独自のドメイン名を使用すると、次のようになります。
...
ServerName your_domain;
...
まだ更新されていない場合は、ドメイン名を指すようにServerName
ディレクティブを更新します。 次に、ファイルを保存して、エディターを終了します。 nano
を使用した場合は、CTRL + X
、Y
、ENTER
の順に押してください。
次に、構成編集の構文を確認します。
- sudo apache2ctl configtest
構文エラーがない場合は、出力に次のように表示されます。
Output. . .
Syntax OK
エラーが発生した場合は、仮想ホストファイルを再度開き、タイプミスや文字の欠落がないか確認してください。 構成ファイルの構文が正しい場合は、Apacheをリロードして新しい構成をロードします。
- sudo systemctl reload apache2
Certbotは、正しいVirtualHost
ブロックを見つけて、それを更新できるようになりました。
次に、HTTPSトラフィックを許可するようにファイアウォールを更新しましょう。
ステップ3—ファイアウォールを介したHTTPSの許可
前提条件ガイドで推奨されているように、ufw
ファイアウォールを有効にしている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。 幸い、Debianにインストールすると、ufw
には、HTTPおよびHTTPSトラフィックのファイアウォールルールを変更するプロセスを簡素化するのに役立ついくつかのプロファイルがパッケージ化されています。
次のように入力すると、現在の設定を確認できます。
- sudo ufw status
Debian 10 にApacheをインストールする方法に関するガイドのステップ2に従った場合、このコマンドの出力は次のようになり、WebサーバーへのHTTPトラフィックのみが許可されることを示します。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
WWW ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
WWW (v6) ALLOW Anywhere (v6)
さらにHTTPSトラフィックを取り込むには、「WWW Full」プロファイルを許可し、冗長な「WWW」プロファイルの許容値を削除します。
- sudo ufw allow 'WWW Full'
- sudo ufw delete allow 'WWW'
ステータスは次のようになります。
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
WWW Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
WWW Full (v6) ALLOW Anywhere (v6)
次に、Certbotを実行して、証明書を取得しましょう。
ステップ4—SSL証明書を取得する
Certbotは、プラグインを介してSSL証明書を取得するためのさまざまな方法を提供します。 Apacheプラグインは、Apacheの再構成と、必要に応じて構成の再ロードを処理します。 このプラグインを使用するには、次のように入力します。
- sudo certbot --apache -d your_domain -d www.your_domain
これは、--apache
プラグインでcertbot
を実行し、-d
を使用して、証明書を有効にする名前を指定します。
certbot
を初めて実行する場合は、メールアドレスを入力して利用規約に同意するよう求められます。 さらに、電子メールアドレスを Electronic Frontier Foundation と共有するかどうかを尋ねられます。これは、デジタル権利を擁護し、Certbotのメーカーでもある非営利団体です。 Y
と入力してメールアドレスを共有するか、N
と入力して拒否してください。
その後、certbot
はLet’sEncryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。
それが成功すると、構成が自動的に更新され、Apacheがリロードして新しい設定を取得します。 certbot
は、プロセスが成功し、証明書が保存されている場所を通知するメッセージで終了します。
Output. . .
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2021-01-20. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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グレードになります。
更新プロセスをテストして終了しましょう。
ステップ5—Certbotの自動更新を確認する
Let’sEncrypt証明書は90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 インストールしたcertbot
パッケージは、/etc/cron.d
に更新スクリプトを追加することで、これを処理します。 このスクリプトは1日2回実行され、有効期限が30日以内の証明書を自動的に更新します。
更新プロセスをテストするには、certbot
を使用してドライランを実行できます。
- sudo certbot renew --dry-run
エラーが表示されない場合は、すべて設定されています。 必要に応じて、Certbotは証明書を更新し、Apacheをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let’s Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づくと警告を発します。
結論
このチュートリアルでは、Let’sEncryptクライアントcertbot
をインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにApacheを構成し、証明書の自動更新を設定しました。 Certbotの使用についてさらに質問がある場合は、それらのドキュメントから始めることをお勧めします。