Как защитить Nginx с помощью Let's Encrypt в Ubuntu 18.04

0 Акции
0
0
0
0

Введение

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

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

Предпосылки
  • Сервер Ubuntu 18.04 был настроен в соответствии с этой начальной настройкой сервера для Ubuntu 18.04, включая пользователя sudo без прав root и брандмауэр.
  • Полностью зарегистрированное доменное имя. В этом руководстве будет использоваться your_domain. Вы можете купить доменное имя на Namecheap, получить доменное имя бесплатно на Freenom или воспользоваться услугами регистратора доменов по своему выбору.
  • Обе записи DNS, перечисленные ниже, настроены для вашего сервера. Подробнее об их добавлении вы можете узнать в этом руководстве по DigitalOcean DNS.
  • Запись your_domain указывает на публичный IP-адрес вашего сервера.
  • Запись www.your_domain указывает на публичный IP-адрес вашего сервера.
  • Установка Nginx выполняется по инструкции Nginx в Ubuntu 18.04. Убедитесь, что у вас есть блок сервера для вашего домена. В этом руководстве в качестве примера используется /etc/nginx/sites-available/your_domain.

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

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

Проект Certbot рекомендует большинству пользователей устанавливать программное обеспечение через snap — менеджер пакетов, изначально разработанный Canonical (компанией, стоящей за Ubuntu) и теперь доступный во многих дистрибутивах Linux:

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, который создаёт символическую или гибкую ссылку, а не жёсткую:

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 может найти правильный блок сервера и обновить его.

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

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

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

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

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:

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

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

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

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, он получит оценку A.

Теперь, когда вы получили свой SSL-сертификат, последним шагом будет проверка процесса продления.

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

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

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

sudo certbot renew --dry-run

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

Результат

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться