Подскажите, вдруг кто брался за такую задачу, и нашёл решение: нужно закрыть доступ к WebUI с помощью reverse proxy (c HTTPS и аутентификацией).
Сам контроллер стоит в закрытой сети, доступ к которой есть только через VPN. Собственно, сейчас посмотреть WebUI можно, только подключившись к этой VPN. Хочется дать такую возможность без подключения к VPN, но соблюдая определённый уровень безопасности (т.е. логин/пароль и зашифрованное соединение). Решение “в лоб” не работает, т.к. помимо доступа к обычным ресурсам (по URL сайта), которые номально проксируются, тонкий клиент из браузера напрямую (через websockets) обращается к mqtt на WB (т.е. по другому порту и без HTTPS). Может быть есть какой-нибудь трюк, чтобы это дело тоже завернуть в основной reverse proxy с теми же самыми credentials, что и для сессии по основному URL?
И этот же WS можно получить через тот же 80 порт контроллера, в котором nginx его проксит.
посмотрите на конфиг /etc/nginx/sites-enabled/default в конце.
Try to connect to MQTT Broker on my.server.com:80 with username undefined and clientid contactless-jWilSGay3k main.20abb7d89361a250e473.js:1:1414
Uncaught DOMException: The operation is insecure. libs.e44a515bb30ccc6a7224.js:1
Это даже если оставить в стороне тот факт, что сама страница настроект порта Settings->WebUI не открывается, если оно не может достучаться по websocket туда, куда хочет, а стучится оно, по умолчанию, по порту 18883, который прибит гвоздями в коде…
Я, похоже, не вполня ясно описал проблему Страница конфигурации где можно поменять значение этого порта, в WebUI действительно есть, но эта страница (у меня) не открывается, если этот порт изначально не тот, что нужен. Получается замкнутый круг.
Но даже не в этом главная проблема. Если я открываю https://rev.proxy.com:1234 который проксирует запрос на WB на my.server.com:80, то клиент (судя по всему) пытается открыть ws://rev.proxy.com:80 вместо wss://rev.proxy.com:1234, чего современные браузеры не могут допустить из соображений безопасности.
P.S. А ‘80’ - да, берется из localStorage, где его можно отредактировать, если открывается соответствующая страница редактирования конфигурации (а она не открывается)
Прошу прощения, “был не прав, вспылил”… Настройки порта действительно открываются без доступа к websocket. Не открываются дэшборды. У меня, похоже, проблема была в чём-то другом.
Хочу понять, в чём. Помогите, пожалуйста, со сборкой.
Я поставил себе nodejs (12.22.10), поставил grunt-cli bower yo generator-karma generator-angular, сгрузил https://github.com/wirenboard/homeui
Но при попытке его собрать (как написано в README.md - командой ‘grunt’) получаю “Fatal error: Unable to find Gruntfilė”. И таки да, в репозитарии Gruntfile нету.
P.S. В nodejs angular и пр. я почти полный профан, так что могу упускать что-то, для всех очевидное…
Одолел я, хвала аллаху, этого монстра… Если кому интересно - прикладываю патч, который позволяет делать именно то, про что я спрашивал: устраивать внешний reverse proxy с SSL и аутентификацией для доступа из интернета к WB во внутренней сети.
Идея в том, что теперь, в зависимости от того, по какому протоколу (http/https) открыта страница homeui, подключение идёт через ws или через wss. И плюс к этому стало допустимо оставлять в настройках поле port/порт пустым. В этом случае подключение по websockets устанавливается с тем же портом, что и основная страница (что позволяет использовать https-сессию с той же авторизацией).
Конфигурация reverse proxy получается простейшая. Для apache она будет, в общих чертах, выглядеть так:
<VirtualHost _default_:4443>
SSLEngine on
ProxyPreserveHost On
ProxyPass /mqtt ws://ip.internal.srv:18883
ProxyPassReverse /mqtt ws://ip.internal.srv:18883
ProxyPass / http://ip.internal.srv:80/
ProxyPassReverse / http://ip.internal.srv:80/
ServerName ip.external.srv
<Proxy *>
Order deny,allow
Allow from all
Authtype Basic
Authname "Password Required"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Proxy>
<VirtualHost _default_:4443>
это в предположении, что apache слушает на порту 4443 вашего сервера ip.external.srv, который одним концом смотрит в интернет, а другим - во внутреннюю сеть, где по адресу ip.internal.srv доступен WirenBoard
Здравствуйте!
Это изменения показанные системой контроля версий git для файлов из репозитория https://github.com/wirenboard/homeui, которые внес пользователь.