Table of Contents

Захищений доступ до веб-інтерфейсу LuCI

Якщо ви виконуєте адміністративні дії через веб-інтерфейс LuCI, існує ризик, що інший користувач вашої мережі OpenWrt може перехопити ваш трафік. У результаті ви можете випадково передати свої облікові дані доступу до LuCI зловмиснику.

Існують способи зменшити цей ризик.

Варто уважно обрати метод, який відповідає вашим вимогам до безпеки. Не слід настільки прив’язуватись до одного методу, щоб відкидати інші. Безпека — це про те, щоб робити речі безпечно.

Про HTTPS в OpenWrt

Це стандартна практика для захисту протоколу HTTPS.

Переваги Недоліки
1 Простий доступ Заважке для пристроїв з малим обсягом памʼяті
2 Стандартизований протокол Сертифікат без належного підпису може показувати попередження в браузері

Основна перевага HTTPS — це стандартизований протокол захищеного HTTP-з’єднання. Щоб отримати доступ до HTTPS-сторінки, достатньо ввести `https://openwrt.lan/` замість ~~http://openwrt.lan/~~. Це просто. Потрібно лише переконатися, що `luci-ssl` та його залежності встановлені.

Але є й недоліки:

1. Зовнішні бібліотеки збільшують розмір системи.

На пристроях із 4 МБ флеш-пам’яті часто неможливо ввімкнути HTTPS для LuCI. Чому? Бо з інтегрованими бібліотеками TLS образ не вміщується в 4 МБ флешу. Якщо ви не виконували додаткових дій (наприклад, розширення overlayfs), це непрактично.

2. Попередження браузера через самопідписаний сертифікат.

Це корисна функція браузера. Якщо самопідписаний сертифікат не додано до довірених у браузері, ви отримаєте попередження. Для захисту лише інтерфейсу управління своїм маршрутизатором купувати комерційний сертифікат — зайве.

Втім, можна:

Див. також: Як позбутись попереджень HTTPS у LuCI

Увімкнення переадресації LuCI з HTTP на HTTPS

Починаючи з OpenWrt 21.02, LuCI доступний через HTTPS за замовчуванням разом із HTTP, без потреби встановлювати додаткові пакети. Однак, автоматична переадресація на HTTPS не активується у свіжій установці OpenWrt 21.02. Вона буде увімкнена лише при оновленні з OpenWrt 19.07.

Увімкнути або вимкнути переадресацію на HTTPS можна так:

uci set uhttpd.main.redirect_https=1     # 1 — увімкнути, 0 — вимкнути
uci commit uhttpd
service uhttpd reload

ПРИМІТКА: Переадресація повинна бути вимкнена, якщо ви плануєте використовувати SSH-тунель.

Тунель HTTP LuCI через SSH

Цей трюк зручний для пристроїв з обмеженою памʼяттю.

Переваги Недоліки
1 Захищене шифрування через SSH Більш складне налаштування
2 Не потребує TLS-бібліотек

У типовому встановленні OpenWrt завжди доступний SSH-сервер. Це добра новина для пристроїв із малою памʼяттю, бо не потрібно встановлювати TLS-бібліотеки. Просто використовуйте улюблений SSH-клієнт для налаштування переадресації порту, і весь HTTP-трафік LuCI буде інкапсульовано у SSH-пакети.

Це означає, що ви отримаєте такий самий рівень захисту, як у SSH, уникаючи недоліків TLS на пристроях з низьким обсягом памʼяті. Звісно, потрібно налаштувати SSH-клієнт вручну. Але це лише при першому підключенні. Потім процес запуску тунелю буде простішим.

Захист від атак перебором (brute-force)

uHTTPd — це вебсервер, який обслуговує інтерфейс LuCI. За замовчуванням, `uHTTPd` слухає `0.0.0.0`, тобто доступний з локальної мережі.

Щоб запобігти атакам перебором на інтерфейс LuCI з локальної мережі, можна змінити конфігурацію `uHTTPd`, щоб він слухав лише `localhost`:

uci -q delete uhttpd.main.listen_http
uci add_list uhttpd.main.listen_http="127.0.0.1:80"
uci add_list uhttpd.main.listen_http="[::1]:80"
uci -q delete uhttpd.main.listen_https
uci add_list uhttpd.main.listen_https="127.0.0.1:443"
uci add_list uhttpd.main.listen_https="[::1]:443"
uci commit uhttpd
/etc/init.d/uhttpd restart

ПРИМІТКА: Можливо, вам доведеться додати перезапуск uHTTPd у ваш файл автозапуску (`/etc/rc.local`):

/etc/init.d/uhttpd restart

Бо на момент запуску система ще не налаштувала `localhost`.

Налаштування SSH-тунелю

Якщо ви готові витратити трохи часу на налаштування SSH-тунелю — ось простий приклад для популярних SSH-клієнтів. Цей спосіб полягає у локальній переадресації порту до LuCI.

Ця конфігурація перенаправлятиме весь трафік через порт 8000 на `127.0.0.1` (локальний ПК) на порт 80 пристрою OpenWrt, який теж використовує `127.0.0.1`.

Локальний ПК Пристрій OpenWrt
127.0.0.1:8000 127.0.0.1:80
надсилає пакети → приймає пакети
отримує відповідь ← надсилає відповідь

Увесь трафік, що йде через порт 8000 на локальному ПК, буде перенаправлено на порт 80 на пристрої OpenWrt. Ось чому це називається локальна переадресація порту.

OpenSSH (GNU/Linux, BSD)

Це стандартний SSH-клієнт для дистрибутивів GNU/Linux та BSD.

Щоб встановити SSH-тунель для доступу до веб-інтерфейсу LuCI, достатньо додати параметри локальної переадресації порту до командного рядка. Зробіть необхідні зміни (ім’я хоста, порт, файл ключа тощо).

ssh -L127.0.0.1:8000:127.0.0.1:80 root@openwrt.lan

SSH-тунель буде активний, доки активна SSH-сесія.

Для зручності можна створити профіль хоста. Відредагуйте файл `~/.ssh/config` та додайте такі рядки (зробіть зміни при потребі). Детальніше див. ssh_config.

Host luci-tunnel
  Hostname openwrt.lan
  Port 22
  User root
  LocalForward 127.0.0.1:8000 127.0.0.1:80

Після створення такої конфігурації тунель можна запускати командою:

ssh luci-tunnel

Команда прочитає профіль `luci-tunnel` та налаштує тунель відповідно.

PuTTY (Windows)

PuTTY — популярний SSH-клієнт для Windows.

Щоб встановити SSH-тунель, виконайте такі кроки:

  1. Перейдіть у ConnectionSSHTunnels.
  2. В полі Source port введіть `8000`.
  3. В полі Destination введіть `127.0.0.1:80`.
  4. Натисніть Add — тунель з’явиться в секції Forwarded ports як `L8000 127.0.0.1:80`.
  5. Перейдіть у Session, у полі Host Name введіть `[email protected]`, а в полі Port — `22` (або змінені значення, якщо у вас нестандартні).
  6. У полі Saved Sessions введіть ім’я, наприклад `OpenWrt LuCI Tunnel`, і натисніть Save, щоб зберегти сесію.
  7. Для запуску сесії натисніть Open. Тунель працює, поки активна SSH-сесія.
  8. Для повторного запуску в майбутньому — виберіть сесію `OpenWrt LuCI Tunnel`, натисніть Load, потім Open.

Доступ до LuCI через SSH-тунель

Для безпечного доступу до LuCI відкрийте у браузері:

http://127.0.0.1:8000/

замість http://openwrt.lan/ або http://192.168.1.1/.

Увесь трафік між браузером і вебсервером `uHTTPd` буде інкапсульований у SSH-тунелі — тобто отримає такий самий рівень шифрування, як і SSH.

Після завершення роботи з інтерфейсом LuCI не забудьте завершити SSH-сесію.

Безпечніша конфігурація

Для ще більшої безпеки можна повністю вимкнути вебсервер `uHTTPd` та запускати його вручну лише через SSH.

/etc/init.d/uhttpd disable
/etc/init.d/uhttpd stop

Такий підхід зменшує ризик атак перебором (brute-force) та захищає від несанкціонованого доступу — за умови, що SSH налаштовано безпечно (наприклад, вимкнено паролі, дозволено лише ключі).

Бонус: частину системних ресурсів (памʼять, CPU) буде вивільнено.

Див. також: Керування службами

Доступ з Інтернету

Якщо у вас є публічна IP-адреса, ви можете отримати віддалений доступ до LuCI або SSH оболонки з Інтернету.

Найбезпечніше — налаштувати VPN-сервер, наприклад:

Так ви зможете під’єднатися до мережі та працювати з OpenWrt, як із локальної мережі.

Але якщо ви все ж хочете надати прямий доступ із WAN, потрібно внести зміни до брандмауера.

⚠️ ОБЕРЕЖНО: Публічний доступ з Інтернету — це дуже небезпечно! Ваш маршрутизатор буде скануватися ботами, які шукатимуть відкриті порти, намагатимуться підібрати паролі чи надішлють експлойти. Пам’ятайте:

Для певних вебінтерфейсів (наприклад, Transmission на окремому порту) WAN-доступ може бути прийнятним, але доступ до LuCI через WAN — значно небезпечніший.

Рекомендації для обмеження доступу:

Дозвіл доступу до LuCI через HTTPS з Інтернету

Якщо ви хочете надати зовнішній доступ до LuCI, тобто до вебсерверу `uhttpd`, насамперед бажано мати домен (хоча б безкоштовний DDNS) і направити його на вашу IP-адресу.

Далі потрібно додати правило брандмауера для відкриття портів HTTP (80) та HTTPS (443):

config rule 'wan_https_allow'
  option name 'Allow external access from WAN to HTTP and HTTPS ports'
  option enabled '1'
  option target 'ACCEPT'
  option dest_port '80 443'
  option proto 'tcp'
  option src 'wan'

Або скористайтеся командами:

# створення правила у /etc/config/firewall
uci add firewall wan_https_allow
uci set firewall.wan_https_allow=rule
uci set firewall.wan_https_allow.name='Allow HTTP, HTTPS from WAN'
uci set firewall.wan_https_allow.src='wan'
uci set firewall.wan_https_allow.proto='tcp'
uci set firewall.wan_https_allow.dest_port='80 443'
uci set firewall.wan_https_allow.target='ACCEPT'
uci commit firewall
/etc/init.d/firewall reload

Ці команди використовують утиліту uci — зручний спосіб керування конфігураційними файлами OpenWrt через скрипти.

⚠️ У цьому прикладі також дозволено незашифрований HTTP на порт 80.
Це потрібно, бо деякі браузери можуть за замовчуванням спробувати використати HTTP.
Крім того, ACME webroot перевірка сертифікатів використовує порт 80.

Однак звичайний HTTP не слід використовувати. Натомість потрібно увімкнути переадресацію HTTPHTTPS:

uci set uhttpd.main.redirect_https=1
uci commit
/etc/init.d/uhttpd restart

Також потрібно дозволити `uhttpd` відповідати на запити з вашого приватного LAN до вашого доменного імені (наприклад `example.com` або `example.duckdns.org`). За замовчуванням `uhttpd` блокує запити до WAN-адреси з локальної мережі:

uci set uhttpd.main.rfc1918_filter='0'
uci commit uhttpd
/etc/init.d/uhttpd restart

У типовій конфігурації LuCI використовує самопідписаний TLS-сертифікат (“snake oil”), тому доступ буде можливим, хоча браузер покаже попередження.

Для зручності та безпеки рекомендовано налаштувати випуск TLS-сертифікатів через ACME.

Дозвіл доступу до SSH з Інтернету

Щоб дозволити доступ до SSH (порт 22) з Інтернету, створіть правило брандмауера:

uci add firewall wan_ssh_allow
uci set firewall.wan_ssh_allow=rule
uci set firewall.wan_ssh_allow.name='Allow SSH from WAN'
uci set firewall.wan_ssh_allow.src='wan'
uci set firewall.wan_ssh_allow.proto='tcp'
uci set firewall.wan_ssh_allow.dest_port='22'
uci set firewall.wan_ssh_allow.target='ACCEPT'
uci commit firewall
/etc/init.d/firewall reload

Зверніть увагу: перш ніж відкривати SSH на весь Інтернет, обов’язково ознайомтесь із міркуваннями безпеки для Dropbear — стандартного SSH-сервера в OpenWrt.