Как обезопасить Apache с помощью Let’s Encrypt на Debian 9

Вступление

Let’s Encrypt - это центр сертификации (CA), который предоставляет простой способ получения и установки бесплатных https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and -csrs [TLS / SSL сертификаты], тем самым включая зашифрованные HTTPS на веб-серверах. Это упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как в Apache, так и в Nginx.

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

В этом руководстве будет использоваться отдельный файл виртуального хоста Apache вместо файла конфигурации по умолчанию. https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-9#step-5-%E2%80%94-setting-up-virtual -hosts- (рекомендуется) [Мы рекомендуем] создавать новые файлы виртуальных хостов Apache для каждого домена, поскольку это помогает избежать распространенных ошибок и поддерживает файлы по умолчанию в качестве резервной конфигурации.

Предпосылки

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

  • Один сервер Debian 9 настроен, следуя этому руководству inition server для Debian 9, включая не-root * пользователь с привилегиями + sudo + и брандмауэром.

  • Полностью зарегистрированное доменное имя. В этом руководстве будет использоваться * example.com *. Вы можете приобрести доменное имя на https://namecheap.com [Namecheap], получить его бесплатно на Freenom или использовать регистратор домена по вашему выбору. ,

  • Обе следующие записи DNS настроены для вашего сервера. Вы можете следовать this вводная информация о DNS DigitalOcean для получения подробной информации о том, как их добавить.

  • Запись A с ++, указывающая на публичный IP-адрес вашего сервера.

  • Запись A с + www. +, Указывающая на публичный IP-адрес вашего сервера.

  • Apache устанавливается следующим образом: Как установить Apache в Debian 9. Убедитесь, что у вас есть https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-9#step-5-%E2%80%94 -setting-up-virtual-hosts- (рекомендуется) [файл виртуального хоста] для вашего домена. В этом руководстве в качестве примера будет использоваться + / etc / apache2 / sites-available / .conf +.

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

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

На момент написания этой статьи Certbot по умолчанию недоступен в репозиториях программного обеспечения Debian. Чтобы загрузить программное обеспечение с помощью + apt +, вам нужно будет добавить репозиторий backports в ваш файл + sources.list +, где + apt + ищет источники пакетов. Backports - это пакеты из тестируемых и нестабильных дистрибутивов Debian, которые перекомпилируются, поэтому они будут работать без новых библиотек в стабильных дистрибутивах Debian.

Чтобы добавить репозиторий backports, откройте (или создайте) файл + sources.list в вашей директории` + / etc / apt / + `:

sudo nano /etc/apt/sources.list

В нижней части файла добавьте следующую строку:

/etc/apt/sources.list.d/sources.list

. . .
deb http://ftp.debian.org/debian stretch-backports main

Сюда входят пакеты + main +, совместимые с Debian Free Software Guidelines (DFSG), а также + non-free + и `+ contrib + `компоненты, которые либо сами не совместимы с DFSG, либо содержат зависимости в этой категории.

Сохраните и закройте файл, нажав + CTRL + X +, + Y +, затем + ENTER +, затем обновите список пакетов:

sudo apt update

Затем установите Certbot с помощью следующей команды. Обратите внимание, что опция + -t + указывает + apt + искать пакет, просматривая только что добавленный репозиторий backports:

sudo apt install python-certbot-apache -t stretch-backports

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

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

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

Если вы следовали https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-9#step-5-%E2%80%94-setting -up-virtual-hosts- (рекомендуется) [шаг настройки виртуального хоста в руководстве по установке Apache], у вас должен быть блок + VirtualHost + для вашего домена в + / etc / apache2 / sites-available / .conf + директива + ServerName + уже установлена ​​соответствующим образом.

Чтобы проверить, откройте файл виртуального хоста для вашего домена, используя + nano + или ваш любимый текстовый редактор:

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

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

/etc/apache2/sites-available/example.com.conf

...
ServerName ;
...

Если это еще не сделано, обновите директиву + ServerName +, чтобы она указала на ваше доменное имя. Затем сохраните файл, выйдите из редактора и проверьте синтаксис изменений конфигурации:

sudo apache2ctl configtest

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

OutputSyntax OK

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

sudo systemctl reload apache2

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

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

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

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

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

sudo ufw status

Если вы выполнили шаг 2 нашего руководства на https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-9#step-2-%E2 % 80% 94-settinging-the-firewall [Как установить Apache в Debian 9], вывод этой команды будет выглядеть следующим образом, показывая, что веб-серверу разрешен только 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  -d

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

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

В случае успеха + certbot + спросит, как бы вы хотели настроить параметры HTTPS:

OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

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

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live//fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live//privkey.pem
  Your cert will expire on 2018-12-04. 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 Server Test, он получит оценку * A *.

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

Шаг 5 - Проверка автообновления Certbot

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

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

sudo certbot renew --dry-run

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

Заключение

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

Related