Защита приложения Rancher с помощью Let’s Encrypt в Ubuntu 16.04

Ранее защита веб-приложений с помощью TLS/SSL считалась необходимой только в том случае, если приложение хранит конфиденциальную информацию (поскольку получение официального сертификата требует материальных затрат и дополнительной настройки). Сервис Let’s Encrypt выдаёт бесплатные доверенные сертификаты в автоматическом режиме, что позволяет добавить этот уровень безопасности на любой веб-сайт или в любое приложение.

Rancher – это простой дашборд для управления контейнерами Docker. Rancher предоставляет каталог популярных приложений, которые можно быстро развернуть. Среди них можно найти и сервис Let’s Encrypt, который позволяет генерировать и обновлять сертификаты. Созданные сертификаты хранятся в Rancher.

Установка Let’s Encrypt в Rancher выполняется в три этапа:

  1. Развёртывание сервиса Let’s Encrypt.
  2. Добавление полученного сертификата на балансировщик нагрузки.
  3. Настройка перенаправления HTTP на HTTPS.

Данное руководство поможет выполнить все эти этапы.

Требования

  • Сервер Ubuntu 16.04 с 1 Гб памяти. Настройка такого сервера подробно описана в руководстве Многоузловое развёртывание с помощью Rancher и Docker Machine в Ubuntu 16.04 (также оно поможет создать дополнительные серверы, которые будут выступать в качестве нод для контейнеров Docker).
  • Приложение, развёрнутое с помощью Rancher и встроенного балансировщика нагрузки (пример развёртывания можно найти здесь). Балансировщик должен передавать запросы контейнеру приложения.
  • FQDN и запись A, направленная на внешний IP-адрес сервера, на котором работает балансировщик нагрузки Rancher. Это позволит сервису Let’s Encrypt подтвердить ваше право собственности на домен (прежде чем приступить к выполнению руководства, убедитесь, что вы можете просмотреть приложение по FQDN; в руководстве используется условный домен http://your_domain).

1: Развёртывание сервиса Let’s Encrypt

Сначала нужно развернуть сервис Let’s Encrypt как контейнер Docker, который будет размещён на одном из хостов Rancher. Для этого нужно выбрать Let’s Encrypt в каталоге Rancher и предоставить информацию о сервисе. После этого у вас будет сертификат для Rancher. Сервис сможет автоматически обновлять сертификат до окончания срока его действия.

Для начала откройте Rancher Catalog (выберите Catalog в верхнем меню интерфейса Rancher). Затем найдите в нём сервис Let’s Encrypt и нажмите кнопку View Details. Чтобы настроить сервис:

  1. Выберите последнюю версию шаблона (вэтом руководстве используется версия 0.4.0).
  2. Присвойте новому стеку приложений свое уникальное имя (в руководстве он называется Certificates).
  3. Выберите Yes в поле I Agree to the Let’s Encrypt TOS.
  4. Выберите версию Production интерфейса Let’s Encrypt.
  5. В поле Your Email Address укажите валидный почтовый адрес.
  6. В поле Certificate Name введите имя сертификата (это позволит вам быстро найти сертификат в пользовательском интерфейсе Rancher). Для этого можно использовать доменное имя.
  7. В поле Domain Names укажите домен, который нужно защитить с помощью сертификата. Вы можете указать несколько доменов, разделив их запятыми.
  8. В Public Key Algorithm оставьте RSA-2048 (используется по умолчанию) или выберите другой алгоритм.
  9. В Renewal Time of Day выберите время в формате UTC, в которое будет обновляться сертификат. Значение по умолчанию 12 подойдёт в большинстве случаев.
  10. В Domain Validation Method можно выбрать HTTP. Существуют и другие методы, которые вы можете выбрать для своего DNS-провайдера. Метод HTTP универсален, он будет работать вне зависимости от провайдера.
  11. Остальные поля предназначены для настройки определённого DNS-провайдера. Поскольку вы используете метод HTTP, можете пропустить их.
  12. Затем снимите флажок Start service after creating. Сервис лучше запустить после внесения дополнительных изменений в настройки.
  13. Нажмите кнопку Launch в конце страницы, чтобы запустить сервис, и подождите, пока он развернётся.

Теперь нужно настроить балансировщик нагрузки Racher для перенаправления запросов к /.well-known/acme-challenge на сервис Certificate. Без этого Let’s Encrypt не сможет подтвердить право собственности на домен.

Чтобы настроить перенаправление запросов:

  • Найдите балансировщик нагрузки и нажмите кнопку Upgrade/Edit.
  • Чтобы добавить новое правило, установите такие параметры: Access – Public, Protocol – HTTP, Port – 80, Path – /.well-known/acme-challenge, Target – Certificate.
  • Нажмите кнопку со стрелкой вверх, чтобы сервис был первым в списке.
  • Нажмите Edit в нижней части экрана, чтобы сохранить конфигурацию.

Новое правило добавлено. Теперь можно запустить сервис Let’s Encrypt:

  • Найдите стек Certificate в меню Stacks.
  • Выберите стек Certificates, чтобы открыть сервис letsencrypt.
  • Нажмите Start.

На этом этапе сервис Let’s Encrypt должен запуститься и создать сертификат. Процесс может занять от 5 до 15 минут. Выберите меню Infrastructure и выберите Certificates, чтобы просмотреть сертификаты. Через некоторое время вы увидите новый сертификат (для этого может понадобиться обновить страницу). Полученный сертификат можно использовать для защиты приложения.

2: Добавление сертификата

Теперь нужно добавить сертификат Let’s Encrypt в сервис балансировки нагрузки Rancher. Для этого нужно изменить правило балансировщика нагрузки, указав в нем HTTPS. Чтобы применить сертификат:

  • Найдите балансировщик нагрузки и нажмите Upgrade/Edit.
  • В разделе Port Rules найдите запись, которая перенаправляет запросы к приложению. Измените Protocol на HTTPS, а Request Host Port на 443 (стандартный порт HTTPS).
  • Откройте вкладку SSL Termination и в поле Certificate выберите сертификат, который нужно использовать. Чтобы добавить несколько сертификатов, выберите их в Alternate Certs. Выбирая сертификат, вы автоматически связываете его с соответствующим доменом.
  • Нажмите Create.

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

https://your_domain

Теперь соединение защищено. Однако теперь, когда в настройках указан только порт 443, приложение перестанет обслуживать запросы HTTP (порт 80). Чтобы решить эту проблему, можно снова добавить в настройки правило для HTTP и порта 80. Но вместо этого лучше настроить перенаправление всех HTTP-запросов на HTTPS.

3: Перенаправление HTTP на HTTPS

Сервис балансировки нагрузки Rancher поддерживает пользовательские настройки HAProxy. Эту функцию можно использовать, чтобы добавить правила перенаправления HTTP на HTTPS. После этого сервис сможет обслуживать HTTP-запросы.

Чтобы настроить перенаправление, найдите балансировщик нагрузки Rancher и нажмите Upgrade/Edit. На появившейся странице откройте вкладку Custom haproxy.cfg.

Добавьте следующий код:

frontend 80
acl lepath path_beg -i /.well-known/acme-challenge
redirect scheme https code 301 if  !lepath !{ ssl_fc }

Этот код создаст правило, с помощью которого балансировщик сможет перенаправлять весь трафик на HTTPS и игнорировать запросы к /.well-known/acme-challenge (который был необходим для подтверждения права собственности на домен). Параметр code 301 настроит постоянное перенаправление трафика.

Читайте также: Документация HAProxy

Чтобы обновить настройки, нажмите Edit.

Теперь все запросы HTTP будут перенаправлены на HTTPS, что сделает сайт безопасным. После этого можно перейти к тестированию сайта.

4: Тестирование настройки

Чтобы протестировать настройку попробуйте открыть сайт с помощью HTTP:

http://your_domain

Обратите внимание на адресную строку: http автоматически изменится на https.

Также проверить сайт можно с помощью утилиты curl. Она отправит запрос на сервер, выполнит все перенаправления и выведет заголовки ответов.

curl -I -L http://your_domain
HTTP/1.1 301 Found
Cache-Control: no-cache
Content-length: 0
Location: https://your_domain/
Connection: close
HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Date: Sun, 19 Feb 2017 03:42:47 GMT

Первый блок вывода показывает ответ при запросе веб-сайта через HTTP; как видите, сайт был найден, но теперь находится по другому адресу. Обратите внимание на раздел 301 Found: он значит, что добавленное правило HAProxy работает. В разделе Location показано новое местоположение запрашиваемого ресурса. Второй блок вывода показывает, что утилита curl проследовала за перенаправлением в новое местоположение, и что веб-сайт был найден в новом месте (об этом свидетельствует 200 OK).

Заключение

Теперь вы умеете настраивать HTTPS с помощью Rancher и сервиса Let’s Encrypt. Благодаря бесплатным доверенным сертификатам защитить сайт стало проще. Кроме того, вам не придется беспокоиться об обновлении сертификатов.

Tags: , , , , ,

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