Как защитить Nginx с помощью Let’s Encrypt в Ubuntu 18.04
Введение
Let’s Encrypt — это центр сертификации (ЦС), который предоставляет способ получения и установки бесплатных сертификатов TLS/SSL, тем самым обеспечивая шифрование HTTPS на веб-серверах. Он упрощает процесс, предоставляя программный клиент Certbot, который пытается автоматизировать большинство (если не все) необходимых шагов. В настоящее время весь процесс получения и установки сертификата полностью автоматизирован как на Apache, так и на Nginx.
В этом руководстве вы будете использовать Certbot, чтобы получить бесплатный SSL-сертификат для Nginx в Ubuntu 18.04 и настроить автоматическое обновление сертификата.
В этом руководстве будет использоваться отдельный файл блока сервера Nginx вместо файла по умолчанию. Мы рекомендуем создавать новые файлы блоков сервера Nginx для каждого домена, поскольку это помогает избежать распространенных ошибок и поддерживает файлы по умолчанию в качестве резервной конфигурации.
Предпосылки
Чтобы следовать этому руководству, вам понадобятся:
- Один сервер Ubuntu 18.04, настроенный в соответствии с этим руководством по начальной настройке сервера для Ubuntu 18.04, включая пользователя без полномочий root и брандмауэр.
- Полностью зарегистрированное доменное имя. В этом руководстве будет использоваться your_domain. Вы можете приобрести доменное имя на Freenom или воспользоваться услугами регистратора доменов по вашему выбору.
- Обе следующие записи DNS настроены для вашего сервера. Вы можете следовать этому введению в DNS DigitalOcean, чтобы узнать, как их добавить.
- Запись A с
your_domain
, указывающая на общедоступный IP-адрес вашего сервера. - Запись A с
www.your_domain
, указывающая на общедоступный IP-адрес вашего сервера.
Nginx установлен следующим блоком сервера для вашего домена. Опять же, в этом руководстве в качестве примера будет использоваться
/etc/nginx/sites-available/your_domain
.Шаг 1 — Установка Certbot
Первым шагом к использованию Let’s Encrypt для получения SSL-сертификата является установка программного обеспечения Certbot на ваш сервер.
Проект Certbot рекомендует большинству пользователей устанавливать программное обеспечение с помощью
snap
, менеджера пакетов, первоначально разработанного Canonical (компания, стоящая за Ubuntu) и теперь доступного во многих дистрибутивах Linux:- sudo snap install --classic certbot
Ваш вывод будет отображать текущую версию Certbot и успешную установку:
Outputcertbot 1.21.0 from Certbot Project (certbot-eff✓) installedЗатем создайте символическую ссылку на только что установленный исполняемый файл
/snap/bin/certbot
из каталога/usr/bin/
. Это обеспечит правильную работу командыcertbot
на вашем сервере. Для этого выполните следующую командуln
. Он содержит флаг-s
, который создаст символическую или мягкую ссылку, а не жесткую ссылку:- sudo ln -s /snap/bin/certbot /usr/bin/certbot
Теперь Certbot готов к использованию, но для того, чтобы он мог настроить SSL для Nginx, вам необходимо проверить некоторые настройки Nginx.
Шаг 2 — Подтверждение конфигурации Nginx
Certbot должен иметь возможность найти правильный блок
server
в вашей конфигурации Nginx, чтобы он мог автоматически настроить SSL. В частности, он делает это путем поиска директивыserver_name
, которая соответствует домену, для которого вы запрашиваете сертификат.Если вы выполнили рекомендуемый шаг настройки блока сервера в руководстве по установке Nginx, у вас будет блок сервера для вашего домена в
/etc/nginx/sites-available/your_domain
. с директивойserver_name
, уже установленной соответствующим образом.Для проверки откройте файл блока сервера для вашего домена с помощью
nano
или вашего любимого текстового редактора:- sudo nano /etc/nginx/sites-available/your_domain
Найдите существующую строку
server_name
. Это должно выглядеть следующим образом:... server_name your_domain www.your_domain; ...
Если это так, выйдите из редактора и перейдите к следующему шагу.
Если это не так, обновите его, чтобы он соответствовал. Затем сохраните файл и выйдите из редактора. Если вы используете
nano
, вы можете сделать это, нажавCTRL + X
, затемY
иENTER
.Теперь проверьте синтаксис ваших изменений конфигурации:
- sudo nginx -t
Если вы получили сообщение об ошибке, повторно откройте файл блока сервера и проверьте наличие опечаток или отсутствующих символов. Как только синтаксис вашего файла конфигурации будет правильным, перезагрузите Nginx, чтобы загрузить новую конфигурацию:
- sudo systemctl reload nginx
Теперь Certbot может найти правильный блок
server
и обновить его.Затем вы обновите брандмауэр, чтобы разрешить HTTPS-трафик.
Шаг 3 — Разрешение HTTPS через брандмауэр
Если у вас включен брандмауэр
ufw
, как рекомендовано в руководствах по предварительным требованиям, вам необходимо изменить настройки, чтобы разрешить HTTPS-трафик. К счастью, Nginx регистрирует несколько профилей вufw
при установке.Вы можете проверить текущую настройку, выполнив следующее:
- sudo ufw status
Вы должны получить такой вывод, указывающий, что к веб-серверу разрешен только 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 и удалите избыточный профиль Nginx HTTP:
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
Теперь, когда вы запускаете команду
ufw status
, она будет отражать эти новые правила:- 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 your_domain -d your_domain
Это запускает
certbot
с плагином--nginx
, используя-d
, чтобы указать имена, для которых вы хотите, чтобы сертификат был действительным.Если вы впервые запускаете
certbot
, вам будет предложено ввести адрес электронной почты и принять условия обслуживания. После этогоcertbot
свяжется с сервером Let’s Encrypt, чтобы запросить сертификат для вашего домена. В случае успеха вы получите следующий вывод:OutputSuccessfully 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-01-27. 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/nginx/sites-enabled/your_domain Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain 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.Теперь, когда вы получили сертификат SSL, последний шаг — протестировать процесс обновления.
Шаг 5 — Проверка автоматического продления Certbot
Сертификаты Let’s Encrypt действительны только в течение девяноста дней. Это сделано для того, чтобы пользователи автоматизировали процесс обновления своих сертификатов. Установленный вами пакет
certbot
позаботится об этом, добавив скрипт обновления в/etc/cron.d
. Этот скрипт запускается два раза в день и автоматически продлевает любой сертификат, срок действия которого истекает в течение тридцати дней.Чтобы протестировать процесс обновления, вы можете выполнить пробный запуск с помощью
certbot
:- sudo certbot renew --dry-run
Если вы не получаете ошибок, все готово. При необходимости Certbot обновит ваши сертификаты и перезагрузит Nginx, чтобы применить изменения. Если автоматический процесс продления когда-либо завершится с ошибкой, Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия вашего сертификата скоро истечет.
Заключение
В этом руководстве вы установили клиент Let’s Encrypt
certbot
, загрузили SSL-сертификаты для своего домена, настроили Nginx для использования этих сертификатов и настроили автоматическое обновление сертификатов. Если у вас есть дополнительные вопросы об использовании Certbot, их документация — хорошее место для начала. - Запись A с