В прошлой статье мы установили менеджер паролей Vaultwarden в оболочку CasaOS и узнали что менеджер требует для работы защищенное соединение. Вот эту задачу и решим с помощью прокси сервера Nginx.
1. Установка Nginx
Для установки опять проходим рутинную операцию - Заходим в "App Store" и жмем кнопку "Установить" под приложением "Nginx Proxy Manager". Перед установкой нас предупредят что Nginx займет порты 80, 81, 443.
Но мы же знаем что у нас на порту 80 висит CasaOS. Как быть?
В общем то все тривиально просто. Останавливаем установку прокси и переходим в настройки оболочки.
Меняем настройки порта Вэб интерфейса как пример на 88 порт чтобы освободить 80. После применения настроек не забываем к урлу CasaOS добавить в конце порт http://Url:88 и переходим по новому адресу в панель управления. Устанавливаем "Nginx Proxy Manager", мы же теперь знаем как это сделать ):
2. Настройка прокси
После установки жмем иконку менеджера и нам открывается страница входа. По умолчанию логин и пароль -
username admin@example.com
password changeme
Для начала конечно изменяем мыло и пароль на свои и продолжаем настройки.
3. Сертификаты для хостов
Вы наверное замечали, что некоторые сайты отмечаются браузером как опасные и выводят красный значок неподписанного сертификата. Мы с вами попробуем решить эту проблему. Зайдем во вкладку "SSL Certificates" и обнаружим для добавления два варианта сертификатов
1. Add Let's Encrypt Certificate - Он нам недоступен по причине локального расположения нашего сервера. Для этого сертификата нужен валидный интернет адрес IP4.
2. Add Custom Certificate - это для нас, здесь можно установить свой само подписной сертификат (качества ): ).
С чего начнем? Для валидации сертификата требуется "удостоверяющий центр" который подтверждает что нашему сертификату можно верить. Давайте создадим ключ удостоверяющего центра. Так как наш хостинг находится на Linux платформе мы этим и воспользуемся.
Для подключения к серверу по SSH я использую MobaXterm_Portable. Она хороша тем что заменяет сразу две программы Терминал и SFTP менеджер.
4. Создание сертификатов
Подключаемся к PVE машине рутом с вашим паролем. Во вкладе файлового менеджера создаем папку CRT в которой будем генерировать сертификаты.
Сперва нам необходимо создать сертификаты удостоверяющего центра. Переходим в папку CRT командой в терминале -
cd ~/CRT
Теперь создаем файлы удостоверяющего центра -
Сгенерировать RootCA.pem, RootCA.key & RootCA.crt:
openssl req -x509 -nodes -new -sha256 -days 1024 -newkey rsa:2048 -keyout RootCA.key -out RootCA.pem -subj "/C=RU/CN=Example-Root-CA"
Создаем сертификат СА
openssl x509 -outform pem -in RootCA.pem -out RootCA.crt
Поздравляю, мы создали свой удостоверяющий центр сертификации.
Следующим шагом создадим в папке /CRT файл domains.ext, в котором перечислены все ваши локальные домены:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = casaos.loc
DNS.2 = proxy.loc
DNS.3 = vault.loc
Для начала настроим 3 домена casaos.loc proxy.loc vault.loc
И наконец сгенерируем SSH ключ для этих доменов.
Сгенерировать localhost.key, localhost.csr и localhost.crt:
openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=RU/ST=RUS/L=Siti/O=Example-Certificates/CN=localhost.loc"
Подпишем корневым сертификатом:
openssl x509 -req -sha256 -days 1024 -in localhost.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile domains.ext -out localhost.crt
Теперь у нас в наличии все файлы для сертификации наших хостов и осталось их распределить по назначению.
5. Установка сертификатов на хост
Установка на "Nginx Proxy Manager":
Скачиваем localhost.key и localhost.crt RootCA.crt с сервера. Заходим в "Nginx Proxy Manager" во вкладку "SSL Certificates" -> Add Custom Certificate. Вводим название сертификата "Localhost". Выбираем файл для "Certificate Key" - localhost.key. Для "Certificate" - localhost.crt и жмем "Save". Сертификат установлен.
6. Настройка файла "hosts"
Для правильной адресации локальных доменов в системе, необходимо настроить локальный DNS файл hosts. для этого открываем его для редактирования по адресу - "C:\Windows\System32\drivers\etc\hosts" и приводим к такому содержанию исправив адрес 192.168.1.3 на тот который ведет к вашему серверу "Nginx Proxy Manager".
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
192.168.1.3 vault.loc # Адрес Vaultwarden порт 10380
192.168.1.3 proxy.loc # Адрес Nginx Proxy Manager порт 81
192.168.1.3 casaos.loc # Адрес CasaOS порт 88
Теперь, когда настроена переадресация хостов нужно настроить прокси на нужные нам хосты.
7. Настройка "Nginx Proxy Manager"
Настройка сводится к указанию имени хоста, прямого URL к хосту и параметров адресации. Для примера привожу настройки vault.loc -
Открываем вкладку "Proxy Hosts" и жмем "Add Proxy Host". Вводим "Domain Names" - vault.loc. "Scheme" - http. IP - "IP где сидит Vaultwarden". Порт - 10380.
Переходим во вкладку "SSL" и выбираем сертификат Localhost.
Остальные хосты настраиваем по аналогии.
8. Установка CA сертификата на ваш компьютер под WIN
На файле RootCA.crt клацаем правой кнопкой мыши и выбираем "Установить сертификат". Обязательно выберите «Доверенные корневые центры сертификации» и подтвердите.
Корневой сертификат установлен.
Теперь вы должны получить зеленую маркировку в Chrome, IE11 и Edge.
Windows 10: Firefox - Есть два способа получить доверенный центр сертификации в Firefox.
Самый простой - заставить Firefox использовать доверенные корневые центры сертификации Windows, перейдя в about:config и установив security.enterprise_roots.enabled значение true.
Другой способ - импортировать сертификат, перейдя по ссылке about:preferences#privacy > Certificats > Import > RootCA.pem Confirm for websites. Предварительно скачав RootCA.pem из папки "CRT".
9. Итог
В итоге мы получим доступ к casaos.loc proxy.loc vault.loc по протоколу HTTPS и браузер будет реагировать на наш сертификат как на валидный.
Всем удачи. Следующий раз будем настраивать менеджер паролей.