Организация защищенного доступа к 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
Сейчас можем перейти к проверке работоспособности.
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, Просмотров: 16870
hass, vpn, ssl, nginx, home assistant, умный дом