Организация защищенного доступа к Home Assistant в домашней сети

В данном посте решил поделиться опытом настройки защищенного доступа к системе домашней автоматизации Home Assistant. В жилом помещении расположены различные датчики для контроля температуры, влажности, уровня углекислого газа, также используются элементы умного дома от Xiaomi.

В итоге, так как я использую Home Assistant в качестве основного шлюза для управления подключенными устройствами мне понадобилось организовать доступ к системе из любой точки, где бы я не находился. Чтобы я ввел в адресной строке браузера https://ha.mydomain.ru и мне стал доступен веб-интерфейс системы. Далее по тексту mydomain.ru необходимо будет заменить на ваш зарегистрированный домен.

Основные требования для реализации:

1. Наличие VPS с установленным OpenVPN и NGINX.

2. Наличие зарегистрированого домена.

3. Установленная система Home Assistant в домашней сети

4. Файл конфигурации vpn-клиента для домашнего сервера ha.ovpn

В данной статье я не буду останавливаться подробно о приобретении в аренду VPS, регистрации домена и настройке openvpn-сервера, т.к. информации довольно много по установке и настройке в сети.

Применительно к Home Assistant вначале создаю для удобства субдомен, в моем случае назову его ha.mydomain.ru. В панели управления зоной DNS настраиваем A-запись, указываем имя ha и IP адрес вашего openvpn-сервера.



1. Установка и настройка NGINX на vpn-сервере



В моем случае на VPS установлен дистрибутив Ubuntu 16.04.4 LTS, подключаемся по ssh к консоли и выполняем команды:

sudo apt update
sudo apt install nginx

Проверить, что nginx запущен

systemctl status nginx



Сам пользуюсь утилитой UFW для конфигурирования межсетевого экрана(в дополнительных ссылках есть подробное описание по работе с ней)

Смотрим список профилей:

sudo ufw app list

Нас интересует преднастроенный профиль Nginx Full, включаем его, он открывает порты 80 и 443.

sudo ufw allow Nginx Full

Смотрим, что профиль у нас включен и работает

sudo ufw status

Вы должны увидеть строку Nginx Full ALLOW Anywhere



2. Настройка виртуального хоста — ha.mydomain.ru



sudo mkdir -p /var/www/ha.mydomain.ru/html

Определить права на каталог с помощью переменной $USER:

sudo chown -R $USER:$USER /var/www/ha.mydomain.ru/html

Настраиваем права:

sudo chmod -R 755 /var/www/ha.mydomain.ru



Создаем файл конфигурации для вновь созданного виртуального хоста в папке /etc/nginx/sites-available/ha.mydomain.ru

sudo nano /etc/nginx/sites-available/ha.mydomain.ru

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



Содержимое файла ha.mydomain.ru до выпуска сертификата.

Включите файл, создав симлинк в каталоге sites-enabled:

sudo ln -s /etc/nginx/sites-available/ha.mydomain.ru /etc/nginx/sites-enabled/

И проверить конфигурацию:

sudo nginx -t



Перезапустите Nginx, чтобы активировать новые параметры:

sudo systemctl restart nginx

3. Выпуск ssl-сертификата для нашего домена от центра сертификации LetsEncrypt.



Для защиты соединения выпустим для нашего субдомена сертификат.

Здесь я опять же приведу основные команды и на что обратить внимание, более подробную информацию можно посмотреть в дополнительных ссылках в конце статьи. Необходимо установить утилиту Certbot

sudo add-apt-repository ppa:certbot/certbot

sudo apt update

sudo apt install python-certbot-nginx

Certbot предлагает различные способы получения сертификатов SSL через плагины. Плагин Nginx самостоятельно настроит Nginx и при необходимости перезагрузит конфигурацию.

Запустим certbot с плагином --nginx, а флаг -d определит имена, для которых предназначен сертификат:

sudo certbot --nginx -d ha.mydomain.ru -d www.ha.mydomain.ru



В диалогом окне жмем цифру 2 для перенаправления всех запросов с 80 порта к https. После успешного выпуска сертификата и ключа появится следующий текст:



4. Настройка конфигурации виртуального хоста для корректной работы c Home Assistant.



После выпуска сертификата нужно добавить необходимые параметры в файл ha.mydomain.ru, т.к. на предыдущем шаге утилита certbot добавила информацию о ключе и сертификате. Вы можете посмотреть рабочий пример файла /etc/nginx/sites-available/ha.mydomain.ru по ссылке и сделать по аналогии, в этом файле достаточно заменить mydomain на зарегистрированный вами домен, а vpn_lan_ip на ip-адрес vpn-клиента(к примеру 10.8.0.10)

Файл ha.mydomain.ru

5. Настройка vpn-клиента на сервере Home Assistant



У меня система HASS установлена на одноплатнике Orange Pi One c системой Armbian. Установим клиента для соединения с vpn-сервером:

sudo apt-get update

sudo apt-get install openvpn

Далее копируем файл конфигурации ha.ovpn в директорию /etc/openvpn/ha.conf

Желательно присутствие в файле ha.conf параметра keepalive 10 120, это необходимо для перезапуска туннеля в случае обрыва соединения.

Файл конфигурации должен быть с расширением *.conf, далее уберем комментарий с параметра AUTOSTART="all" в файле /etc/default/openvpn.

systemctl daemon-reload

sudo service openvpn restart

Проверим, что у нас есть туннель с vpn-сервером, при выполнении ifconfig

tun0: flags=4305 mtu 1500

Сейчас можем перейти к проверке работоспособности.

6. Подключение к Home Assistant



В адресной строке браузера пишем https://ha.mydomain.ru и должен загрузиться веб-интерфейс системы, еще раз убедимся, что соединение защищено, об этом свидетельствует зелёный замок.



7. Проверка обновления сертификатов

Сертификат от Letsencrypt действителен 3 месяца, поэтому за месяц до окончания срока действия утилита certbot его обновит, можно дополнительно

проверить перевыпуск в тестовом режиме следующей командой.

sudo certbot renew --dry-run



В результате получил возможность защищенного подключения к Home Assistant, установленного в домашней сети и, в случае необходимости, по такому же принципу легко организовать доступ к другим домашним сервисам. За основу использовались статьи по ссылкам ниже c учетом применения к HASS в моем случае.

Дополнительные ссылки:
Установка NGINX в Ubuntu
Сертификат Letsencrypt для nginx
Certbot — плагин для nginx
Home Assistant nginx subdomain
Установка openvpn ubuntu

Источник

19.07.2018 в 21:16, Просмотров: 602

умный дом,


Поиск



По всему сайту
По тэгам
По тэгам и заголовкам


Карта сайта
Обратная связь
RSS-канал



Рейтинг@Mail.ru