Самый простой способ добавить HTTPS в Home Assistant

Обновление от 08.03.2019 Последняя (0.5.0) версия аддона Nginx Proxy Manager требует явной установки другого официального аддона - MariaDB. Хочется успокоить тех, кто справедливо возмутится необходимостью держать целую базу данных для хранения настроек какого-то мелкого аддона. Дело в том, что предыдущие версии аддона также требовали наличия полноценной реляционной базы данных для работы и устанавливали её незаметно для пользователя в тот же контейнер. В последней версии Френк, отвечающий за поддержку практически всех Community аддонов Home Assistant, просто вынес эту зависимость наружу, что позволило другим пользователям, имеющим MariaDB для хранения истории Home Assistant, использовать один экземпляр аддона и тем самым оптимизировать место на диске и затраты процессорного времени.

Вступление

Если вы всё-таки решились выставить ваш сервер Home Assistant голым, эм.. бэкендом в дикий, полный злобных хакеров интернет, необходимо обеспечить хотя бы минимальный уровень защиты вашего соединения. Ниже я покажу один из самых простых способов включения HTTPS/SSL. Америку не открою, но одна из фишек данного метода в том, что никаких изменений в конфигурацию Home Assistant вносить не требуется, по-научному этот способ называется SSL termination. Зашифрованный входящий трафик расшифровывается специальным прокси-сервером (работающем в вашей условно безопасной домашней сети) и дальше передаётся сервису-получателю (Home Assistant), который даже не подозревает о наличии шифрования. При желании, в домашней сети можно продолжать использовать внутренний адрес вида hassio.local:8123.

Данный способ прекрасно работает с Google Home, Алисой и прочими сервисами, требующими HTTPS. Поехали.

Что понадобится

  1. Статический белый IP (с динамическим тоже будет работать, но настройка duckdns клиента, отправляющего информацию об изменении вашего адреса, выходят за рамки данной статьи)
  2. Аккаунт на duckdns.org (или ваш собственный домен, если вы знаете, что делаете)
  3. Установленный и работающий Hass.io

Настраиваем переадресацию портов на роутере

Пробрасываем входящий трафик на портах 443 и 80 на машину, на которой крутится наш инстанс Home Assistant (адрес в вашей домашней сети). Тут я могу только посоветовать погуглить решение для вашего роутера запросом вида port forwarding имя роутера. В моём роутере настройки выглядят так (192.168.1.62 - внутренний фиксированный адрес Home Assistant в домашней сети):

image-20200127222831988

Создаём домен на duckdns.org

Заходим в https://ducksns.org и добавляем домен по вкусу (в примере ниже - http://dummytest.duckdns.org):

image-20200127220358930

В поле current ip будет указан ваш внешний IP адрес, определённый сайтом, если он по какой-то причине неправильный (например, вы настраиваете домен из другой сети) - здесь его можно поменять.

Устанавливаем Hass.io аддон Nginx Proxy Manager

Идём в список доступных аддонов Hassio и устанавливаем два аддона: Nginx Proxy Manager и MariaDB.

Для того, чтобы аддон MariaDB запустился, достаточно указать произвольный пароль пользователя homeassistant, он вам понадобится если вы захотите перенастроить компонент recorder, отвечаюищий за сохранение истории Home Assistant, на хранение данных истории в MariaDB. Крайне рекомендую попробовать, это драматическим образом ускоряет работу разделов Logbook и History в Home Assistant.

После того, как пароль будет прописан, аддон MariaDB должен запуститься без всяких проблем. Теперь можно перейти к Nginx Proxy Manager. Соединение с MariaDB будет установлено автоматически, никаких дополнителных настроек этот аддон не требует, поэтому просто запускаем его командой Start и открываем веб-интерфейс командой Open Web UI:

image-20200127220641303

Авторизуемся под учётной записью admin@example.com и паролем changeme, благоразумно меняем пароль на более безопасный. Видим очень простой интерфейс с настройками аддона:

image-20200127220756519

В разделе Proxy Hosts добавляем наш хост и сохраняем результат:

image-20200127220952835

Уже на этом этапе можно (и даже нужно) открыть веб-интерфейс home assistant по адресу http://dummytest.duckdns.org и убедиться, что доступ по http работает (он понадобится для получения сертификата letsencrypt на следующем шаге). Если доступа нет, скорее всего переадресация портов на роутере не работает как надо. Также имеет смысл проверить настройки файрволла на роутере.

Убедившись, что доступ по HTTP работает, открываем на редактирование наш хост и изменяем параметр Scheme на https:

image-20200127221211598

Переходим на закладку SSL и выбираем в выпадающем списке Request a new SSL Certificate, а также устанавливаем флажки Force SSL и I Agree to…, сохраняем настройки:

image-20200127221957539

Это всё! Заходим по адресу https://dummytest.duckdns.org и убеждаемся, что теперь наше соединение надёжно защищено:

image-20200127222715606

Аддон самостоятельно позаботится о своевременном обновлении сертификата Let’s Encrypt. Несмотря на то, что соединение защищено, крайне рекомендую настроить двухфакторную аутентификацию. В качестве второго фактора можно использовать любое TOTP приложение для смартфона, например Google Authenticator или Authy.