Как защитить свое веб-приложение Rancher с помощью Let’s Encrypt в Ubuntu 16.04

Вступление

Защита веб-приложений с помощью TLS/SSL считалась необходимой только для приложений, обрабатывающих конфиденциальную информацию, поскольку получение официального сертификата обходилось дорого и требовало дополнительной настройки. https://letsencrypt.org [Let’s Encrypt] позволяет нам создавать официальные сертификаты в автоматическом режиме без каких-либо затрат, то есть мы можем добавить этот уровень безопасности на любой веб-сайт без компромиссов.

http://rancher.com [Rancher] управляет контейнерами Docker интуитивно понятным способом с помощью простой в использовании панели инструментов. У Rancher есть catalog популярных приложений, который мы можем развернуть мгновенно, включая сервис Let’s Encrypt, который может генерировать сертификаты, а также позаботится обновления при необходимости. После создания сертификаты хранятся в Rancher и доступны для использования без каких-либо сложностей.

Процесс настройки Let Encrypt in Rancher состоит из трех основных этапов: мы развертываем службу Let Encrypt, применяем генерируемый ею сертификат к балансировщику нагрузки и настраиваем перенаправление HTTP на HTTPS. Этот учебник проведет вас через весь процесс.

Предпосылки

Для завершения этого урока вам понадобится:

  • Один 1 ГБ сервер Ubuntu 16.04 с установленным Rancher. Чтобы настроить это, следуйте инструкциям https://www.digitalocean.com/community/tutorials/how-to-manage-multi-node-deployments-with-rancher-and-docker-machine-on-ubuntu-16-04 Как управлять многоузловыми развертываниями с помощью Rancher и Docker Machine в Ubuntu 16.04. В этом руководстве вы создадите дополнительные серверы, которые будут действовать как хосты для ваших контейнеров Docker.

  • Приложение, развернутое с помощью Rancher, которое использует встроенную службу балансировки нагрузки Rancher. Несмотря на то, что вы можете следовать этому руководству для любого приложения, в том числе из каталога Rancher, вы также можете ознакомиться с нашим руководством о https://www.digitalocean.com/community/tutorials/how-to-deploy-a-node- js-and-mongodb-application-with-rancher-on-ubuntu-16-04 [Как развернуть приложение Node.js и MongoDB с Rancher в Ubuntu 16.04], чтобы начать. Какой бы маршрут вы ни выбрали, убедитесь, что в вашей конфигурации используется встроенная служба балансировки нагрузки Rancher для пересылки запросов в контейнеры приложений.

  • Полное доменное имя (FQDN) с записью * A * для + your_domain + указывает на общедоступный IP-адрес вашего хоста, на котором запущена служба Rancher Load Balancer. Это необходимо из-за того, что Let’s Encrypt проверяет, что вы являетесь владельцем домена, для которого выдается сертификат. Для настройки запись. Убедитесь, что вы можете просмотреть развернутое приложение по адресу + http: // +, прежде чем приступить к изучению этого руководства.

[[step-1---deploying-the-let’s-encrypt-service]] === Шаг 1. Развертывание сервиса Let Encrypt

Мы собираемся развернуть службу Let Encrypt в качестве контейнера Docker, который будет размещен на одном из наших хостов Rancher. Процесс состоит из выбора службы Let Encrypt из каталога Rancher и заполнения необходимой информации. Как только вы закончите этот шаг, у вас будет сертификат, доступный в Rancher. Лучше всего то, что служба автоматически продлит сертификат, когда он близок к истечению срока действия, без каких-либо дополнительных действий с вашей стороны.

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

  1. Выберите последнюю версию шаблона. В этом руководстве используется версия * 0.4.0 *.

  2. Дайте новому стеку приложений отличительное имя. Мы назовем его «Сертификаты» в этом руководстве, но подойдет любое имя.

  3. Выберите опцию * Да * в поле * Я согласен с полем Let Encrypt TOS * после прочтения информации, если вы согласны с условиями.

  4. Выберите версию * Production * API Let Encrypt.

  5. Введите свой действующий адрес электронной почты в поле * Ваш адрес электронной почты *.

  6. В поле * Имя сертификата * введите имя сертификата, чтобы его можно было легко идентифицировать в пользовательском интерфейсе Rancher. Вы можете использовать ваше доменное имя для этого.

  7. Для * Доменные имена * введите доменное имя, которое вы хотите защитить. Если вы хотите защитить несколько доменов, введите каждый домен через запятую.

  8. Для * алгоритма открытого ключа * выберите по умолчанию * RSA-2048 *, который является наиболее распространенным алгоритмом, используемым в веб-приложениях, или выберите алгоритм, который соответствует вашим потребностям.

  9. Для * Обновление времени суток * выберите время в UTC, в которое вы хотите продлить сертификат. Значение по умолчанию * 12 * будет работать нормально, если у вас нет особых ограничений.

  10. Для * Метод проверки домена * выберите * HTTP * для этого учебника. Есть другие методы, которые вы можете выбрать, которые работают с поставщиком DNS, который вы используете для своего домена. DigitalOcean включен в список вместе с Cloudflare, DNSimple, Dyn, Gandi, Ovh, Route53 и Vultr. Параметр * HTTP * работает независимо от поставщика и является подходом, который мы будем использовать в этом руководстве.

  11. Остальные поля связаны с конкретными провайдерами DNS. Поскольку вы выбрали метод * HTTP *, вы можете оставить их пустыми.

  12. Затем снимите флажок * Запустить службу после создания * флажок. Мы запустим службу после внесения дополнительных изменений в конфигурацию.

  13. Наконец, нажмите кнопку * Launch * в нижней части страницы, чтобы запустить службу и дождаться ее развертывания.

Далее нам нужно сообщить службе балансировки нагрузки Racher о переадресации запросов на + /. Всем известный / acme-challenge + нашей новой службе * Certificate *. Без этого Let Encrypt не сможет подтвердить, что мы являемся владельцем домена. Для завершения процесса выполните следующие действия:

  1. Найдите службу балансировки нагрузки в Rancher и нажмите кнопку * Upgrade / Edit *.

  2. Добавить новое * Сервисное правило *.

  3. Для нового правила:

  4. Убедитесь, что для * Access * установлено * Public *.

  5. Убедитесь, что для * Protocol * установлено * HTTP *.

  6. Убедитесь, что для * Port * установлено значение + 80 +.

  7. Установите * Path * в + /. Широко известный / acme-challenge.

  8. Установите * Target * для службы * Certificate *.

  9. Нажмите стрелку * Up * для этого нового сервиса, чтобы убедиться, что это первый сервис в списке.

  10. Нажмите * Edit * в нижней части экрана, чтобы сохранить конфигурацию.

С новым правилом запустите службу Let Encrypt:

  1. Найдите свой стек * Certificate *, выбрав меню * Stacks * в верхней части интерфейса.

  2. Выберите стек * Certificates *, чтобы открыть сервис * letsencrypt *.

  3. Нажмите кнопку * Пуск *, чтобы запустить службу.

На этом этапе служба Let Encrypt должна быть запущена и сертификат будет создан. Процесс может занять от 5 до 15 минут. Выберите меню * Инфраструктура * и выберите * Сертификаты *, чтобы просмотреть сертификаты. Вскоре вы увидите новый сертификат, хотя вам может потребоваться обновить страницу. Как только вы увидите сертификат, вы можете использовать его со своим приложением.

Шаг 2 - Связывание сертификата с приложением

Как только сертификат Let Encrypt станет доступен в Rancher, вы можете выбрать его для использования в службе Rancher Load Balancer. Для этого вы измените правило в вашем балансировщике нагрузки на использование HTTPS и примените сертификат. Выполните следующие шаги, чтобы внести эти изменения конфигурации:

  1. Найдите службу балансировки нагрузки в Rancher и нажмите кнопку * Upgrade / Edit *, чтобы получить доступ к ее настройкам.

  2. В разделе * Port Rules * найдите запись, которая перенаправляет запросы в ваше приложение, измените * Protocol * на * HTTPS * и измените * Request Host Port * на * 443 *, который является портом по умолчанию для HTTPS.

  3. Перейдите на вкладку * SSL Termination * в нижней части страницы и выберите сертификат, который вы хотите использовать, в поле * Certificate *. Если вы хотите добавить несколько сертификатов, вы можете выбрать их в поле * Alternate Certs *. Когда вы выбираете сертификат, он автоматически связывается с соответствующим доменом.

  4. Нажмите кнопку * Создать * внизу страницы.

Если вы заходите на веб-сайт по протоколу HTTPS (+ https: // +), вы можете видеть, что соединение теперь защищено. Но поскольку вы заменили порт + 80 + на порт + 443 +, любой запрос через HTTP больше не будет работать. Чтобы решить эту проблему, мы могли бы просто добавить правило для HTTP и порта + 80 +, которое у нас было раньше, но вместо этого мы настроим наш балансировщик нагрузки для перенаправления трафика с HTTP на HTTPS. Это гарантирует, что люди всегда посещают сайт безопасным способом.

Шаг 3 - Перенаправление HTTP на HTTPS

Служба балансировки нагрузки Rancher имеет поддержку пользовательских настроек конфигурации HAProxy. Мы собираемся использовать эту функцию для включения некоторой конфигурации, которая будет перенаправлять весь трафик, поступающий с HTTP на HTTPS. Подход, описанный в этом разделе, использует ранее настроенную службу Let Encrypt, поскольку в настоящее время она прослушивает порт «+ 80 +» для пересылки запросов на проверку домена.

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

Добавьте следующий фрагмент кода для создания перенаправления:

Custom haproxy.cfg

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

Это создает правило для балансировщика нагрузки, которое перенаправляет весь трафик на HTTPS, но игнорирует запросы на путь «+ /. Хорошо известный / acme-challenge », который мы настроили для проверки домена Let Encrypt. Мы используем ` код 301 +`, чтобы указать, что мы хотим постоянное перенаправление для этого домена. Чтобы узнать больше о настройках перенаправления, вы можете посмотреть документацию HAProxy.

Нажмите кнопку * Редактировать * внизу страницы, чтобы применить эти изменения.

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

Шаг 4 - Тестирование установки

Чтобы проверить свой веб-сайт, откройте адрес в веб-браузере, используя протокол HTTP (+ http: // +), а затем найдите индикатор безопасности в адресной строке. Вы также можете проверить это с помощью утилиты + curl +, выполнив следующую команду, которая отправляет запрос на сервер, выполняет любые перенаправления и возвращает только заголовки ответа:

curl -I -L http://

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

OutputHTTP/1.1 301 Found
Cache-Control: no-cache
Content-length: 0
Location:
Connection: close

HTTP/1.1
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 Найдено +», в котором говорится, что добавленное нами правило HAProxy сработало. Раздел ` Location ` показывает новое местоположение запрошенного ресурса. Второй блок вывода показывает, что ` curl +` следовал за перенаправлением на новое место. Это также показывает, что веб-сайт был найден в новом месте, как указано в ответе «+200 OK +».

Заключение

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

Related