Позволяет зашифровать

Обратный прокси Nginx с HTTPS через LetsEncrypt

Обратный прокси Nginx с HTTPS через LetsEncrypt
Это продолжение моего предыдущий пост где мы настраиваем простой обратный прокси-сервер с использованием Nginx. В этом посте мы защитим соединение между клиентом и обратным прокси-сервером с помощью бесплатного TLS (.k.SSL) сертификат от LetsEncrypt. Я рекомендую вам ознакомиться с вышеупомянутым сообщением об обратном прокси-сервере для получения основ.

Предпосылки

  1. Сервер со статическим публичным IP. Здесь работает Nginx.
  2. Бэкэнд-серверы с предполагаемым веб-сайтом, работающие через HTTP
  3. Зарегистрированное доменное имя. Я буду использовать ranvirslog.com в качестве моего основного доменного имени, а два веб-сайта имеют полные доменные имена - ww1.Ranvirslog.com и ww2ranvirslog.ком

Настраивать

Итак, IP-адреса изменились с прошлого раза, так как я снова делаю эту настройку. Вот новые IP-адреса и имена хостов.

ВМ / имя хоста Публичный IP Частный IP Роль / Функция
Обратный прокси 68.183.214.151 10.135.127.136 Точка завершения TLS и обратный прокси-сервер
web1 N / A 10.135.126.102 Хостинг ww1.Ranvirslog.ком

веб-сайт через порт 80 HTTP

web2 N / A 10.135.126.187 Хостинг

ww2.Ranvirslog.ком

веб-сайт через порт 80 HTTP

Записи DNS настроены таким образом, что оба веб-сайта (разные поддомены) указывают на один и тот же статический общедоступный IP-адрес. Это IP-адрес нашего обратного прокси-сервера Nginx:

Запись Значение
ww1.Ranvirslog.ком 68.183.214.151
ww2.Ranvirslog.ком 68.183.214.151

Чтобы наш обратный DNS работал через незашифрованный HTTP, мы создали два файла в / etc / conf.d / по имени ww1.conf и ww2.conf каждый со следующей конфигурацией:

/ etc / conf.d / ww1.conf

server
слушать 80;
слушать [::]: 80;
имя_сервера ww1.Ranvirslog.com;
место расположения /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering выключен;
proxy_set_header X-Real-IP $ remote_addr;

/ etc / conf.d / ww2.conf

server
слушать 80;
слушать [::]: 80;
имя_сервера ww2.Ranvirslog.com;
место расположения /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering выключен;
proxy_set_header X-Real-IP $ remote_addr;

Мы используем операционную систему Ubuntu 18.04 LTS и у нас есть удаленный файл / etc / nginx / sites-enabled / default, чтобы Nginx мог действовать исключительно как обратный DNS, используя конфигурации, показанные выше.

Цель

Поскольку обратный DNS (и серверные веб-сайты) уже запущены и работают, наша цель - установить один сертификат TLS для обоих полных доменных имен (это ww1.Ranvirslog.com и ww2.Ranvirslog.com) на нашем обратном прокси-сервере Nginx.

Трафик между любым клиентом и обратным прокси-сервером будет зашифрован, но трафик между обратным прокси-сервером и внутренними серверами не зашифрован. Тем не менее, это по-прежнему гораздо более безопасный вариант, чем отсутствие HTTPS вообще. В случаях, когда обратный прокси-сервер и различные веб-серверы находятся на одном хосте, скажем, если вы используете контейнеры Docker для размещения всех на одном VPS, тогда даже этот незашифрованный трафик содержится на одном хосте.

Установка Certbot

Certbot - это клиентская программа, которая будет работать на нашем обратном прокси-сервере и согласовывать сертификат TLS с LetsEncrypt. Это докажет LetsEncrypt, что сервер действительно имеет контроль над полными доменными именами, которые он утверждает, что контролирует. Мы не будем беспокоиться о том, как это делает Certbot.

Традиционно вы можете использовать Certbot как отдельное программное обеспечение, которое просто получит сертификаты (которые в основном представляют собой длинные криптографические ключи) и сохранит их на сервере. Но, к счастью, для большинства операционных систем есть собственные плагины для Nginx, Apache и другого программного обеспечения. Мы установим Certbot с плагином Nginx. Это автоматически настроит Nginx для использования вновь полученных ключей и избавится от небезопасных правил, таких как прослушивание HTTP на порту 80.

Если вы используете системы на основе Debian, как в моем случае, я использую Ubuntu 18.04 LTS, тогда установка очень проста.

$ sudo подходящее обновление
$ sudo apt install software-properties-common
Вселенная $ sudo add-apt-repository
$ sudo add-apt-репозиторий ppa: certbot / certbot
$ sudo подходящее обновление
$ sudo apt установить python-certbot-nginx

Другие операционные системы, RedHat, Gentoo, Fedora могут следовать официальным инструкциям, приведенным здесь.

После установки Certbot с плагином Nginx для вашей комбинации ОС мы можем приступить к делу.

Получение сертификатов TLS

Чтобы получить сертификат TLS в первый раз, выполните следующую команду:

$ sudo certbot --nginx

Это будет проходить через серию интерактивных вопросов, как показано ниже:

  1. Введите адрес электронной почты

Сохранение журнала отладки в / вар / журнал / letsencrypt / letsencrypt.бревно
Выбранные плагины: Authenticator nginx, Installer nginx
Введите адрес электронной почты (используется для срочного продления и уведомлений о безопасности) (введите «c» для отмены): [электронная почта защищена]

  1. Согласен с TOS

Пожалуйста, прочтите Условия использования по адресу https: // letsencrypt.org / documents / LE-SA-v1.2-ноября-15-2017.pdf. Вы должны согласиться, чтобы зарегистрироваться на сервере ACME по адресу https: // acme-v02.api.Letsencrypt.org / каталог
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A

  1. Дополнительный информационный бюллетень

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Не могли бы вы поделиться своим адресом электронной почты с Electronic Frontier Foundation, партнером-основателем проекта Let's Encrypt и некоммерческой организацией, разрабатывающей Certbot?? Мы хотели бы отправить вам электронное письмо о нашей работе по шифрованию Интернета, новостях EFF, кампаниях и способах поддержки цифровой свободы.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (N) o: Y

  1. Затем он обнаружит доменные имена на вашем сервере, и если вы хотите выбрать все домены, просто нажмите

Для каких имен вы хотите активировать HTTPS?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: ww1.Ranvirslog.ком
2: ww2.Ranvirslog.ком
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Выберите соответствующие числа, разделенные запятыми и / или пробелами, или оставьте поле ввода пустым, чтобы выбрать все показанные параметры (для отмены введите 'c'):

  1. Перенаправить все на TLS. Я выбрал вариант 2, чтобы перенаправить все на SSL, но ваш вариант использования может отличаться. Для новых бэкэнд-инсталляций можно с уверенностью выбрать вариант 2.

Пожалуйста, выберите, следует ли перенаправлять HTTP-трафик на HTTPS, удаляя HTTP-доступ.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Без перенаправления - больше не вносите изменений в конфигурацию веб-сервера.
2: Перенаправление - сделайте все запросы перенаправленными для безопасного доступа HTTPS. Выберите это для новых сайтов или если вы уверены, что ваш сайт работает по HTTPS. Вы можете отменить это изменение, отредактировав конфигурацию вашего веб-сервера.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Выберите соответствующий номер [1-2], затем [введите] (нажмите 'c' для отмены): 2

Если все прошло хорошо, он покажет вам это сообщение, только для ваших доменных имен.

Поздравления! Вы успешно включили https: // ww1.Ranvirslog.com и https: // ww2.Ranvirslog.ком Вы можете посетить полные доменные имена и заметить, что на веб-сайтах теперь есть значок замка, говорящий о том, что все зашифровано.

Посмотрите файлы конфигурации

Если вы просмотрите файлы конфигурации, которые мы создали ранее, а именно / etc / conf.d / ww1.conf и / etc / conf.d / ww2.conf, вы заметите, что все правила «Listen 80» исчезли, и было добавлено несколько новых строк, сообщающих серверу, что связь должна быть зашифрована, а также расположение сертификатов и ключей для выполнения указанного шифрования.

Я настоятельно рекомендую просмотреть файлы конфигурации, так как они также могут научить вас правильно устанавливать сертификаты и записывать файлы конфигурации.

Продление сертификации

Типичные сертификаты LetsEncrypt действительны в течение 90 дней, и до истечения срока их действия вам необходимо их продлить. Вы можете использовать Certbot для первого пробного запуска обновления, выполнив команду:

$ sudo certbot обновить --dry-run

Если операция завершится успешно, вы увидите следующее сообщение:

Поздравляю, все обновления прошли успешно. Продлены следующие сертификаты:

/ и т. д. / letsencrypt / жить / WW1.Ranvirslog.com / fullchain.pem (успех)
** СУХОЙ ЗАПУСК: имитация обновления certbot близко к истечению срока действия сертификата
** (Сертификаты испытаний выше не были сохранены.)

Теперь вы можете добавить задание Cron, которое будет пытаться обновляться каждую неделю или около того. Certbot не будет продлевать сертификаты, если они действительно не требуются для этого, поэтому вам не о чем беспокоиться. Команда для фактического обновления:

$ certbot обновить

Добавьте его в задание cron root, используя:

$ sudo crontab -e

В следующем запросе выберите свой любимый редактор (выберите Nano, если вы не уверены) и добавьте следующие строки в конец открытого файла:


# Например, вы можете запустить резервную копию всех своих учетных записей пользователей
# в 5 а.м каждую неделю с:
# 0 5 * * 1 tar -zcf / var / backups / home.tgz / home /
#
# Для получения дополнительной информации см. Справочные страницы crontab (5) и cron (8)
#
# m h dom mon dow команда
* 2 * * 2 обновления certbot

Это запустит команду обновления certbot в 2 часа ночи в любую случайную минуту второго дня каждой недели.

Заключение

Если вы новичок в сертификатах TLS, экспериментировать с такими вещами, как HSTS, может быть рискованно. Поскольку эти изменения необратимы. Тем не менее, если вы действительно хотите погрузиться в кроличью нору безопасности, я настоятельно рекомендую блог Троя Ханта, который является одним из основных источников вдохновения для этой статьи.

Как изменить направление прокрутки мыши и сенсорной панели в Windows 10
Мышь а также Сенсорная панельs не только упрощают вычисления, но и делают их более эффективными и требуют меньше времени. Мы не можем представить себе...
Как изменить указатель мыши и размер курсора, цвет и схему в Windows 10
Указатель мыши и курсор в Windows 10 - очень важные аспекты операционной системы. То же самое можно сказать и о других операционных системах, так что,...
Бесплатные движки с открытым исходным кодом для разработки игр для Linux
В этой статье будет рассмотрен список бесплатных игровых движков с открытым исходным кодом, которые можно использовать для разработки 2D- и 3D-игр в L...