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

Как защитить 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:

    1. sudo snap install --classic certbot

    Ваш вывод будет отображать текущую версию Certbot и успешную установку:

    Output
    certbot 1.21.0 from Certbot Project (certbot-eff✓) installed

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

    1. 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 или вашего любимого текстового редактора:

    1. sudo nano /etc/nginx/sites-available/your_domain

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

    ...
    server_name your_domain www.your_domain;
    ...
    

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

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

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

    1. sudo nginx -t

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

    1. sudo systemctl reload nginx

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

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

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

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

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

    1. sudo ufw status

    Вы должны получить такой вывод, указывающий, что к веб-серверу разрешен только HTTP-трафик:

    Output
    Status: 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:

    1. sudo ufw allow 'Nginx Full'
    2. sudo ufw delete allow 'Nginx HTTP'

    Теперь, когда вы запускаете команду ufw status, она будет отражать эти новые правила:

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

    1. sudo certbot --nginx -d your_domain -d your_domain

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

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

    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-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:

    1. sudo certbot renew --dry-run

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

    Заключение

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