OpenWrt: запираем устройства умного дома в сети без интернета

OpenWrt: запираем устройства умного дома в сети без интернета

Другими словами, настраиваем изолированную Wi-Fi сеть для недоверенных устройств и запрещаем им доступ в интернет (DMZ).

Статья для параноиков типа меня 😅 Я не хочу, чтобы моя Wi-Fi камера отправляла видеопоток в облако (тем более я использую локальный motionEye).

Я не хочу, чтобы в один «прекрасный» день мой ночник стал частью ботнета для проведения DDoS-атак.

Я не хочу, чтобы кто-то добрался до моих умных розеток — сервера производителя могут и взломать. Конкретно в моем случае, умные розетки ничем критичным не управляют, но у кого-то таким образом может быть подключен котел или обогреватель.

Не подключайте индуктивную нагрузку через умные розетки
Не подключайте индуктивную нагрузку через умные розетки, так как это может привести к привариванию контактов реле внутри розетки.

На 100% от всех угроз не защититься, но можно оградить умный дом от интернета фаерволом. Производители предоставляют свой софт для управления розетками, камерами и прочими девайсами через свои серверы, но многими устройствами можно управлять и по локальной сети тоже.

Например, у меня есть светильник от Xiaomi, пара розеток Tp-Link и IP-камера. После первоначальной настройки девайсов через фирменное приложение, я включил управление по локальной сети, интегрировал все это с локальным Home Assistant и заблокировал устройствам доступ в интернет. То есть доступ к облаку производителя.

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

Настройка OpenWrt

Итак, чтобы выделить недоверенные устройства в отдельную сеть без интернета, нам потребуется:

  1. Настроить обособленную Wi-Fi сеть;
  2. Добавить новую зону фаервола;
  3. Запретить устройствам из этой зоны доступ в интернет (wan);
  4. Запретить доступ к локальной сети (lan) — мы не хотим, чтобы через умные девайсы можно было получить доступ к доверенной сети;
  5. Разрешить серверу умного дома доступ к Wi-Fi-камерам, реле и остальным устройствам в изолированной сети.
  6. Опционально: разрешить синхронизацию времени — актуально для камер видеонаблюдения.

Я не пользуюсь веб интерфейсом, поэтому ниже будет много конфигов, которые нужно будет обновить по SSH.

🗨️
Дайте знать в комментариях, если вдруг возникнут трудности и нужна инструкция с картинками. Или если не получается выйти из vim 😅

Но вообще настройки почти такие же, как и в случае с гостевой сетью. Поэтому первые 2 пункта можно настроить через веб-интерфейс по инструкции на сайте OpenWrt.

Создание отдельной точки доступа Wi-Fi

Прежде чем трогать конфигурацию Wi-Fi, нужно добавить новую сеть в /etc/config/network:

config interface 'iot'
        option proto 'static'
        option ipaddr '192.168.3.1'
        option netmask '255.255.255.0'
🗨️
Честно говоря, я сам так и не осилил vim и обычно использую nano, который можно поставить, выполнив opkg update && opkg install nano. Только не надо меня за это осуждать!

Далее в /etc/config/wireless добавим новую точку доступа:

config wifi-iface 'iot_radio1'
        option device 'radio1'
        option ifname wlan-iot
        option network 'iot'
        option mode 'ap'
        option ssid 'IoT' # имя сети
        option encryption 'psk2'
        option key 'qwerty' # пароль

radio1 нужно заменить на корректное устройство.

Если у вас двухдиапазонный роутер, то в конфиге будет несколько wifi-device, но для IoT будет достаточно настроить только сеть на 2.4 ГГц. Найти правильный device можно выполнив:

uci show wireless | grep -E 'band|hwmode'

У искомого устройства будет band='2g' или hwmode='11g' (на старых прошивках).

Так же настроим DHCP сервер в /etc/config/dhcp:

config dhcp 'iot'
        option interface 'iot'
        option start '100'
        option limit '150'
        option leasetime '168h'
        option dhcpv6 'server'
        option ra 'server'

После редактирования всех конфигов остается только выполнить:

/etc/init.d/network reload
/etc/init.d/dnsmasq restart

Чтобы применить настройки.

Настройка зоны фаервола

Для начала добавим зону для новой сети в /etc/config/firewall:

config zone
        option name             iot
        list   network          'iot'
        option input            REJECT
        option output           ACCEPT
        option forward          REJECT

input=REJECT закрывает порты роутера для устройств из изолированной сети, а forward=REJECT запрещает доступ в интернет и другие сети. Но на первое время доступ в интернет лучше пока оставить:

config forwarding
       option src              iot
       option dest             wan
       option enabled          1

После подключения умных девайсов это правило можно выключить.

Так же нужно открыть порты DHCP сервера, чтобы нормально выдавались IP-адреса:

config rule
        option name             'Allow DHCP requests from iot'
        option src              iot
        option src_port         '67-68'
        option dest_port        '67-68'
        option proto            udp
        option target           ACCEPT

В итоге у нас получилась крепость со сплошной стеной по периметру. Осталось добавить несколько маленьких ворот 🙂

Доступ для домашнего сервера

Чтобы сервер умного дома мог подключаться к камерам и розеткам, разрешим ему (и всему lan) доступ в iot:

config forwarding
        option src              lan
        option dest             iot

И в конце выполним:

/etc/init.d/firewall restart

Чтобы применить настройки фаервола.

По-хорошему домашний сервер тоже стоит изолировать в отдельной DMZ, особенно если он доступен из интернета. Но для этого потребуется настроить VLAN, что выходит за рамки данной статьи.

Доступ к NTP (опционально)

Обычно IP камеры отображают текущее время поверх видео, но для этого камере нужен доступ к NTP-серверам. А чтобы получить адрес NTP-сервера, нужен доступ к DNS 🙂

Но мы не будем разрешать любые исходящие соединения на 123-ий и 53-ий порты, потому что это потенциальная дыра. Вместо легитимного NTP-сервера на 123-ем порту, может запросто скрываться OpenVPN. Поэтому завернем трафик на локальные порты роутера:

config rule
        option name             'Allow access to local DNS from iot'
        option src              iot
        option dest_port        53
        option proto            tcpudp
        option target           ACCEPT

config rule
        option name             'Allow access to local NTP from iot'
        option src              iot
        option dest_port        123
        option proto            udp
        option target           ACCEPT

config redirect
        option name             'Redirect DNS for iot'
        option src              iot
        option proto            tcpudp
        option src_dport        53
        option dest_ip          192.168.3.1
        option dest_port        53
        option target           DNAT

config redirect
        option name             'Redirect NTP for iot'
        option src              iot
        option proto            udp
        option src_dport        123
        option dest_ip          192.168.3.1
        option dest_port        123
        option target           DNAT

/etc/config/firewall

Правда, локальный NTP по умолчанию выключен, но его легко включить:

uci set system.ntp.enable_server="1"
uci commit system
/etc/init.d/sysntpd restart

Для применения настроек фаервола так же нужно выполнить:

/etc/init.d/firewall restart

Подключение устройств

Девайсы к изолированной сети подключаются как обычно, только нужно будет отыскать кнопку сброса настроек, чтобы ввести параметры новой Wi-Fi сети.

Когда закончите с настройками в приложении производителя главное не забыть, что в начале статьи мы временно включали устройствам доступ в интернет. Чтобы выключить, нужно указать enabled 0 :

config forwarding
       option src              iot
       option dest             wan
       option enabled          0

После выполнения /etc/init.d/firewall restart умные девайсы должны потерять доступ к облаку:

Скриншот приложения Tapo.

Дальше остается только подключить это все к Home Assistant или другому умному дому.

Теперь вы в безопасности. Но это не точно.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.