Перейти к основному содержанию

Nginx Proxy Manager — настраиваем SSL для всех сайтов домашней лаборатории

SSL сертификат

Пришла пора навести порядок на всех своих сайтах домашней лаборатории. Есть несколько неудобств, которые хочется победить.

  1. Все сервисы крутятся на разных IP адресах и портах, пользоваться этим неудобно.
  2. У сервисов нет доменных имён.
  3. SSL сертификаты отсутствуют.

Проблему с разными IP адресами и портами можно решить с помощью проксирующего сервера. К примеру, можно развернуть Nginx или, чтобы уже было красиво, Nginx Proxy Manager.

Nginx Proxy Manager — это готовый Docker контейнер, который позволяем развернуть простой и доступный обратный прокси-сервер с возможностью терминации SSL.

Проблему с отсутствуем доменных имён можно решить, развернув собственный локальный DNS сервер, собственно, раньше я так и делал. Такой сервер можно развернуть даже на роутере, добавив нужные нам статические DNS записи.

Mikrotik — настройка DNS сервера

Проблему с SSL тоже можно решить, развернув собственный локальный центр сертификации и сгенерировав сертификаты для нужных доменных имён. Правда, придётся добавлять корневые сертификаты на каждое устройство в локальной сети. Не всегда это можно сделать.

Если всё обобщить, то придётся развернуть центр сертификации, DNS сервер, прокси сервер, всё это настроить, выпустить сертификаты, загрузить на все домашние устройства корневые сертификаты. Как-то избыточно для домашней лаборатории. Будем действовать по-другому, но нам понадобится домен, он у меня есть.

Прокси сервер

Используем Nginx Proxy Manager. Я разворачиваю его на TrueNAS.

TrueNAS — разворачиваем Nginx Proxy Manager

npm

Устанавливаю его как приложение.

npm

Nginx Proxy Manager заработал. Пользователь по умолчанию:

  • Email: admin@example.com
  • Пароль: changeme

На маршрутизаторе настраиваем переадресацию портов 80 и 443 на Nginx Proxy Manager.

Пока оставляем прокси и переходим к DNS.

DNS

В качестве DNS сервера будем использовать внешний DNS сервер CloudFlare. Он доступен на бесплатном тарифе, это нам не будет ничего стоить. Тариф FREE включает в себя "Быстрый и простой в использовании DNS".

https://www.cloudflare.com

npm

Регистрируем там аккаунт. Добавляем в сервисе DNS наш внешний домен.

В личном кабинете регистратора доменных имен в настройках домена прописываем NS серверы Cloudflare, при добавлении домена подскажут какие прописывать. После этого ждём когда изменения разлетятся по миру, на это может уйти до 48 часов.

По сути мы развернули DNS для нашего домена в Cloudflare.

npm

И добавляем в DNS A запись вида *.наш.домен с локальным IP адресом нашего сервиса Nginx Proxy Manager в нашей локальной сети. А почему бы и нет? Понятно что в Интернете он работать не будет, но в нашей домашней сети — вполне.

npm

Любой поддомен третьего уровня теперь будет резолвиться в IP адрес нашего прокси сервера. А нам это и нужно.

SSL

Займёмся сертификатами. Nginx Proxy Manager умеет автоматически запрашивать SSL сертификат Let's Encrypt. Для выпуска сертификата требуется подтвердить владение домена, для этого существует два способа:

  • Подтвердить владение по HTTP на 80 порту.
  • Подтвердить владение с помощью TXT записи в DNS сервере домена.

Для Let's Encrypt существует автоматическая среда управления сертификатами ACME, с её помощью всякие утилиты типа certbot автоматически могут выпускать и обновлять SSL сертификаты по HTTPS. Однако, классический способ работы с сертификатами по HTTP протоколу нам не подойдёт. Из-за того, что в DNS записях для сервисов домашней лаборатории прописывается локальный IP адрес, из Интернета некуда пойти проверить владение доменом. Остаётся второй способ.

Второй способ требует записать TXT запись на сервера DNS нашего домена. Вручную это делать неудобно, поэтому можно воспользоваться сервисами DNS, которые имеют API для управления DNS записями. Собственно, поэтому мы и перенесли наш DNS на Cloudflare. И Nginx Proxy Manager как раз умеет работать с этим API.

В Nginx Proxy Manager переходим в раздел сертификатов и запрашиваем новый Let's Encrypt сертификат.

ssl

Будем выпускать wildcard сертификат, указываем домен *.наш.домен. Соглашаемся с лицензионным соглашением. Ставим таймайт 120 секунд, указываем email. Включаем Use a DNS Challenge, в качестве провайдера выбираем Cloudflare. Понадобится токен "Cloudflare API token".

Токен генерируем в личном кабинете Cloudflare. Выбираем наш домен. Справа в разделе API находим ссылку Get your API token. Жмём.

ssl

Генерируем новый токен, Create Token.

ssl

Выбираем шаблон Edit zone DNS.

ssl

В качестве зоны выбираем наш домен. Continue to summary.

Сгенерированный токен вставляем в форму Nginx Proxy Manager, нажимаем Save. Начинает запрашиваться сертификат.

ssl

Через пару минут wildcard SSL сертификат выпущен! Мы близки к цели.

ssl

Создаём Access List, указываем в нём нашу домашнюю подсеть. Я это делаю потому, что у меня Nginx Proxy Manager будет обслуживать не только внутренние домены, но и внешние. Нужно запретить вход снаружи из Интернет на локальные ресурсы, а то хакеров полно.

ssl

Создаём новый хост прокси (если ранее его не создали), указываем любой поддомен третьего уровня нашего домена. Указываем IP адрес и порт нашего сервиса. У меня подопытный — это WebUI самого Nginx Proxy Manager. Не забываем включить Access List.

ssl

Включаем SSL и выбираем созданный ранее wildcard сертификат. Save.

ssl

Пробуем зайти на придуманный нами поддомен, попытка успешна. Домен открылся. SSL присутствует. Добавлю ещё пачку поддоменов для остальных своих сервисов. Этот процесс значительно проще, новые поддомены добавляются несколькими кликами.

npm

Работает. Естественно, где-то пришлось подкручивать гайки. К примеру, TrueNAS захотел включённые вебсокеты. Jellyfin не стал без установленной галки передавать данные за прокси. ESXi работает на HTTPS, нужно внимательно прописывать протоколы. Zabbix без проблем заработал.

Теперь домашние сайты работают по SSL.

У если нет домена?

Если собственного домена нет, не беда. Некоторые DNS серверы для этих целей предлагают свои поддомены третьего уровня. Вот подробное видео:

Теги

 

Похожие материалы

Zabbix — срок действия SSL сертификата (2)

Сегодня напишем скрипт для мониторинга срока действия SSL сертификатов наших сайтов. Этот мониторинг пригодится многим. Системным администраторам в крупных компаниях, чтобы не пропустить момент перевыпуска сертификатов. Особенно, если количество сайтов — сотни. Владельцам собственных сайтов. Многие пользуются сервисом Let's Encrypt, особенностью сертификатов которого является короткий срок жизни. Если автоматика обновления сертификатов выйдет из строя, то мониторинг SSL сертификатов поможет выявить проблему до того, как она себя проявит.

Теги