Другими словами, настраиваем изолированную Wi-Fi сеть для недоверенных устройств и запрещаем им доступ в интернет (DMZ).
Статья для параноиков типа меня 😅 Я не хочу, чтобы моя Wi-Fi камера отправляла видеопоток в облако (тем более я использую локальный motionEye).
Я не хочу, чтобы в один «прекрасный» день мой ночник стал частью ботнета для проведения DDoS-атак.
Я не хочу, чтобы кто-то добрался до моих умных розеток — сервера производителя могут и взломать. Конкретно в моем случае, умные розетки ничем критичным не управляют, но у кого-то таким образом может быть подключен котел или обогреватель.
На 100% от всех угроз не защититься, но можно оградить умный дом от интернета фаерволом. Производители предоставляют свой софт для управления розетками, камерами и прочими девайсами через свои серверы, но многими устройствами можно управлять и по локальной сети тоже.
Например, у меня есть светильник от Xiaomi, пара розеток Tp-Link и IP-камера. После первоначальной настройки девайсов через фирменное приложение, я включил управление по локальной сети, интегрировал все это с локальным Home Assistant и заблокировал устройствам доступ в интернет. То есть доступ к облаку производителя.
В итоге взломать умный дом удаленно получится, только если взломать сам Home Assistant, но это уже совсем другая история 😉
Настройка OpenWrt
Итак, чтобы выделить недоверенные устройства в отдельную сеть без интернета, нам потребуется:
- Настроить обособленную Wi-Fi сеть;
- Добавить новую зону фаервола;
- Запретить устройствам из этой зоны доступ в интернет (wan);
- Запретить доступ к локальной сети (lan) — мы не хотим, чтобы через умные девайсы можно было получить доступ к доверенной сети;
- Разрешить серверу умного дома доступ к Wi-Fi-камерам, реле и остальным устройствам в изолированной сети.
- Опционально: разрешить синхронизацию времени — актуально для камер видеонаблюдения.
Я не пользуюсь веб интерфейсом, поэтому ниже будет много конфигов, которые нужно будет обновить по SSH.
Но вообще настройки почти такие же, как и в случае с гостевой сетью. Поэтому первые 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'
Далее в /etc/config/wireless
добавим новую точку доступа:
Если у вас двухдиапазонный роутер, то в конфиге будет несколько 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/config/firewall
:
config zone
option name iot
list network 'iot'
option input REJECT
option output ACCEPT
option forward REJECT
input=REJECT
закрывает порты роутера для устройств из изолированной сети, а forward=REJECT
запрещает доступ в интернет и другие сети. Но на первое время доступ в интернет лучше пока оставить:
Так же нужно открыть порты 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
И в конце выполним:
По-хорошему домашний сервер тоже стоит изолировать в отдельной DMZ, особенно если он доступен из интернета. Но для этого потребуется настроить VLAN, что выходит за рамки данной статьи.
Доступ к NTP (опционально)
Обычно IP камеры отображают текущее время поверх видео, но для этого камере нужен доступ к NTP-серверам. А чтобы получить адрес NTP-сервера, нужен доступ к DNS 🙂
Но мы не будем разрешать любые исходящие соединения на 123-ий и 53-ий порты, потому что это потенциальная дыра. Вместо легитимного NTP-сервера на 123-ем порту, может запросто скрываться OpenVPN. Поэтому завернем трафик на локальные порты роутера:
Правда, локальный 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
умные девайсы должны потерять доступ к облаку:
Дальше остается только подключить это все к Home Assistant или другому умному дому.
Теперь вы в безопасности. Но это не точно.