Поиск по сайту:

Как защитить Apache с помощью Let's Encrypt в Debian 11


Введение

Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как на Apache, так и на Nginx.

В этом руководстве вы будете использовать Certbot, чтобы получить бесплатный SSL-сертификат для Apache в Debian 11 и настроить автоматическое обновление сертификата.

В этом руководстве будет использоваться отдельный файл виртуального хоста Apache вместо файла конфигурации по умолчанию. Мы рекомендуем создавать новые файлы виртуального хоста Apache для каждого домена, поскольку это помогает избежать распространенных ошибок и поддерживает файлы по умолчанию в качестве резервной конфигурации.

Предпосылки

Чтобы следовать этому руководству, вам понадобятся:

  • Один сервер Debian 11, настроенный в соответствии с этим руководством по начальной настройке сервера для Debian 11, включая пользователя без полномочий root с привилегиями sudo и брандмауэром.
  • Полностью зарегистрированное доменное имя. В этом руководстве в качестве примера будет использоваться your_domain. Вы можете приобрести доменное имя на Freenom или воспользоваться услугами регистратора доменов по вашему выбору.
  • Обе следующие записи DNS настроены для вашего сервера. Чтобы настроить их, вы можете следовать этим инструкциям по созданию записей DNS.
    • Запись A с your_domain, указывающая на общедоступный IP-адрес вашего сервера.
    • Запись A с www.your_domain, указывающая на общедоступный IP-адрес вашего сервера.

    Apache устанавливается с помощью файла виртуального хоста, настроенного для вашего домена. В этом руководстве в качестве примера будет использоваться /etc/apache2/sites-available/your_domain.conf.

    Шаг 1 — Установка Certbot

    Первым шагом к использованию Let’s Encrypt для получения SSL-сертификата является установка программного обеспечения Certbot на ваш сервер.

    Примечание. В этом руководстве используется snappy — диспетчер пакетов, разработанный для систем Linux, который устанавливает пакеты в формате, называемом snap. Вы можете установить Certbot из репозиториев Debian по умолчанию, используя apt, но при этом будет установлена более старая версия (версия 1.12.0), чем оснастка Certbot (версия 1.29.0, последняя версия на момент написания этой статьи). .

    Чтобы установить Certbot как оснастку в Debian, вы должны сначала установить snapd на свой сервер. snapd — это демон, необходимый для установки, использования и управления Snap. При установке пакета snapd на вашем сервере также будет установлена команда snap.

    Чтобы установить snapd, обновите локальный индекс пакетов, если вы не делали этого в последнее время:

    1. sudo apt update

    Затем установите пакет snapd:

    1. sudo apt install snapd

    После выполнения этой команды появится запрос на подтверждение установки snapd и его зависимостей. Вы можете согласиться, нажав Y, а затем ENTER.

    Затем используйте команду snap для установки привязки core. Это установит на ваш сервер некоторые зависимости, которые необходимы для любой устанавливаемой вами оснастки, включая оснастку Certbot:

    1. sudo snap install core

    Затем обновите привязку core. Это обеспечит установку последних версий snapd и его зависимостей:

    1. sudo snap refresh core

    Обратите внимание, что snap можно установить на одном из трех уровней ограничения, которые обеспечивают разную степень изоляции от вашей системы. Например, большинство моментальных снимков по умолчанию устанавливаются с уровнем ограничения --strict, что предотвращает доступ этих программ к файлам вашей системы или сети. Поскольку для правильной настройки сертификатов Certbot должно быть разрешено редактировать определенные файлы конфигурации, эта команда включает параметр --classic. Этот уровень ограничения позволяет любым установленным на нем снимкам тот же доступ к системным ресурсам, что и традиционные пакеты.

    Имея это в виду, вы можете установить оснастку certbot с помощью следующей команды.

    1. sudo snap install --classic certbot

    Этот процесс установки установит исполняемый файл certbot в каталог /snap/bin/. Создайте символическую ссылку на этот файл в каталоге /usr/bin/, чтобы убедиться, что вы можете запустить команду certbot в любом месте вашей системы:

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

    Теперь Certbot готов к использованию, но чтобы настроить SSL для Apache, необходимо убедиться, что Apache настроен правильно.

    Шаг 2 — Настройка SSL-сертификата

    Certbot должен иметь возможность найти правильный виртуальный хост в вашей конфигурации Apache, чтобы автоматически настроить SSL. В частности, он делает это путем поиска директивы ServerName, которая соответствует домену, для которого вы запрашиваете сертификат.

    Если вы выполнили шаг настройки виртуального хоста в руководстве по установке Apache, у вас должен быть блок VirtualHost для вашего домена в /etc/apache2/sites-available/your_domain.conf с уже установленной директивой ServerName.

    Для проверки откройте файл виртуального хоста для вашего домена с помощью nano или вашего любимого текстового редактора:

    1. sudo nano /etc/apache2/sites-available/your_domain.conf

    Найдите существующую строку ServerName. Это должно выглядеть так, как показано ниже, с вашим собственным доменным именем вместо your_domain:

    ...
    ServerName your_domain;
    ...
    

    Если это еще не так, обновите директиву ServerName, чтобы она указывала на ваше доменное имя. Затем сохраните файл и выйдите из редактора. Если вы использовали nano, сделайте это, нажав CTRL + X, Y, а затем ENTER.

    Затем проверьте синтаксис изменений конфигурации:

    1. sudo apache2ctl configtest

    Если синтаксических ошибок нет, ваш вывод вернет следующее:

    Output
    . . . Syntax OK

    Если вы получили сообщение об ошибке, повторно откройте файл виртуального хоста и проверьте наличие опечаток или отсутствующих символов. Как только синтаксис вашего файла конфигурации будет правильным, перезагрузите Apache, чтобы загрузить новую конфигурацию:

    1. sudo systemctl reload apache2

    Теперь Certbot может найти правильный блок VirtualHost и обновить его.

    Затем давайте обновим брандмауэр, чтобы разрешить HTTPS-трафик.

    Шаг 3 — Разрешение HTTPS через брандмауэр

    Если у вас включен брандмауэр ufw, как рекомендовано в руководстве по предварительным требованиям, вам необходимо изменить настройки, чтобы разрешить трафик HTTPS. К счастью, при установке в Debian ufw поставляется с несколькими профилями, которые помогают процессу изменения правил брандмауэра для трафика HTTP и HTTPS.

    Вы можете проверить текущую настройку, запустив:

    1. sudo ufw status

    Если вы следовали шагу 2 нашего руководства по установке Apache в Debian 11, вывод этой команды будет следующим, указывая на то, что на веб-сервер разрешен только HTTP-трафик:

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

    Чтобы разрешить HTTPS-трафик, разрешите профиль \WWW Full и удалите избыточный профиль \WWW:

    1. sudo ufw allow 'WWW Full'
    2. sudo ufw delete allow 'WWW'

    Теперь ваш статус должен быть следующим:

    1. sudo ufw status
    Output
    Status: 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 и перезагрузке конфигурации при необходимости. Чтобы использовать этот плагин, выполните следующее:

    1. sudo certbot --apache -d your_domain -d www.your_domain

    Это запускает certbot с плагином --apache, используя -d, чтобы указать имена, для которых вы хотите, чтобы сертификат был действительным.

    Если вы впервые запускаете certbot, вам будет предложено ввести адрес электронной почты и принять условия обслуживания. Кроме того, он спросит, хотите ли вы поделиться своим адресом электронной почты с Electronic Frontier Foundation, некоммерческой организацией, которая выступает за цифровые права, а также является создателем Certbot. Вы можете ввести Y, чтобы поделиться своим адресом электронной почты, или N, чтобы отказаться.

    После этого certbot свяжется с сервером Let’s Encrypt, а затем запустит вызов, чтобы убедиться, что вы контролируете домен, для которого запрашиваете сертификат.

    В случае успеха конфигурация будет обновлена автоматически, и Apache перезагрузится, чтобы принять новые настройки. certbot завершится сообщением о том, что процесс прошел успешно и где хранятся ваши сертификаты:

    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-10-31. 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/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf 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 Server Test, он получит оценку A.

    Давайте закончим тестированием процесса обновления.

    Шаг 5 — Проверка автоматического продления Certbot

    Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это сделано для того, чтобы пользователи автоматизировали процесс обновления своих сертификатов. Установленный вами пакет certbot позаботится об этом за вас, добавив скрипт обновления в /etc/cron.d. Этот скрипт запускается два раза в день и автоматически продлевает любой сертификат, срок действия которого истекает в течение тридцати дней.

    Чтобы протестировать процесс обновления, вы можете выполнить пробный запуск с помощью certbot:

    1. sudo certbot renew --dry-run

    Если вы не получили никаких ошибок, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache, чтобы применить изменения. Если автоматический процесс продления когда-либо завершится сбоем, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия вашего сертификата скоро истечет.

    Заключение

    В этом руководстве вы установили клиент Let’s Encrypt certbot, загрузили SSL-сертификаты для своего домена, настроили Apache для использования этих сертификатов и настроили автоматическое обновление сертификатов. Если у вас есть дополнительные вопросы об использовании Certbot, их документация — хорошее место для начала.