Как обезопасить Apache с Let’s Encrypt в Ubuntu 18.04

Вступление

Let’s Encrypt - это центр сертификации (CA), который предоставляет простой способ получить и установить бесплатныеTLS/SSL certificates, тем самым обеспечивая зашифрованный HTTPS на веб-серверах. Это упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как в Apache, так и в Nginx.

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

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

Предпосылки

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

  • Один сервер Ubuntu 18.04, настроенный по этому руководствуinitial server setup for Ubuntu 18.04, включая пользователя sudo без полномочий root и брандмауэр.

  • Полностью зарегистрированное доменное имя. В этом руководстве в качестве примера будет использоватьсяyour_domain. Вы можете приобрести доменное имя наNamecheap, получить его бесплатно наFreenom или воспользоваться услугами регистратора доменов по вашему выбору.

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

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

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

  • Apache установлен следующим образомHow To Install Apache on Ubuntu 18.04. Убедитесь, что у вас естьvirtual host file для вашего домена. В этом руководстве в качестве примера будет использоваться/etc/apache2/sites-available/your_domain.conf.

[[step-1 -—- install-certbot]] == Шаг 1. Установка Certbot

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

Certbot находится в очень активной разработке, поэтому пакеты Certbot, предоставляемые Ubuntu, как правило, устарели. Однако разработчики Certbot поддерживают программный репозиторий Ubuntu с последними версиями, поэтому мы будем использовать этот репозиторий.

Сначала добавьте репозиторий:

sudo add-apt-repository ppa:certbot/certbot

Вам нужно будет нажатьENTER для подтверждения.

Установите пакет Certbot Apache сapt:

sudo apt install python-certbot-apache

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

[[step-2 -—- set-up-the-ssl-certificate]] == Шаг 2 - Настройте сертификат SSL

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

Если вы следовалиvirtual host set up step in the Apache installation tutorial, у вас должен быть блок VirtualHost для вашего домена в/etc/apache2/sites-available/your_domain.com.conf с уже установленной директивойServerName соответствующим образом.

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

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

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

/etc/apache2/sites-available/your_domain.conf

...
ServerName your_domain;
...

Если это произойдет, выйдите из редактора и перейдите к следующему шагу.

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

sudo apache2ctl configtest

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

sudo systemctl reload apache2

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

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

[[step-3 -—- Allow-https-through-the-firewall]] == Шаг 3. Разрешение HTTPS через брандмауэр

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

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

sudo ufw status

Вероятно, это будет выглядеть так, что означает, что веб-серверу разрешен только HTTP-трафик:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache                     ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache (v6)                ALLOW       Anywhere (v6)

Чтобы дополнительно включить HTTPS-трафик, разрешите полный профиль Apache и удалите избыточный допуск профиля Apache:

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

Ваш статус должен выглядеть следующим образом:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

Далее, давайте запустим Certbot и получим наши сертификаты.

[[шаг-4 -—- получение-an-ssl-сертификата]] == Шаг 4 - Получение сертификата SSL

Certbot предоставляет различные способы получения SSL-сертификатов через плагины. Плагин Apache позаботится о реконфигурации Apache и перезагрузке конфигурации при необходимости. Чтобы использовать этот плагин, введите следующее:

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

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

Если вы впервые запускаетеcertbot, вам будет предложено ввести адрес электронной почты и согласиться с условиями обслуживания. После этогоcertbot свяжется с сервером Let's 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/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/privkey.pem
   Your cert will expire on 2018-07-23. 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.

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

[[step-5 -—- verifying-certbot-auto-Renewal]] == Шаг 5. Проверка автоматического продления Certbot

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

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

sudo certbot renew --dry-run

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

Заключение

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

Related