15 октября 2020 г.

Создание переключателя Home Assistant для управления правилом фаервола Mikrotik

Потребовалось тут выключать\включать правило в ip/firewall/filter в микротике. На данный момент нашел три компонента для работы с микротиком. Стандартная, которая ничего не умеет, кроме как обнаружить есть ли микротик в сети. Простенький компонент, но без документации. Серьезный компонент, работающий по winbox api. 

Но мне хотелось более простого варианта. Чтобы не грузить лишние компоненты в Home Assistant (HA). И такой вариант есть - это работа через ssh.

Подключаем SSH Public Key Authentication


С паролем работать из HA с ssh непросто,  по-крайней мере я нашел кучу тем без ответа как это делать и сразу перешекл к рабочему и более правильному варианту - авторизация по публичному ключу. Там все стандартно, создем пару ключей на клиенте (HA), закидываем публичный на микротик:

ha_user@ha:~$ ssh-keygen -t rsa
ha_user@ha:~$ scp ~/.ssh/id_rsa.pub admin@192.168.1.1:mykey.pub

Далее импортируем файл публичного ключа в пользователя:



Тестируем, что можем зайти в mikrotik без пароля ssh admin@192.168.1.1 "/system resource print".

Настраиваем Switch в Home Assistant.


прописываем в configuration.yaml:

switch:
  - platform: command_line
    switches:
      rule_1:
        command_on: "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no admin@192.168.1.1 '/ip firewall filter disable 1'"
        command_off: "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no admin@192.168.1.1 '/ip firewall filter enable 1'"
        command_state: "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no admin@192.168.1.1 '/put [ip firewall filter get number=1 disabled]'"
        value_template: '{{ value == "true" }}'
        friendly_name: Rule 1 

value_template - параметр который работает с ответом от command_state. Так как command_state нам возвращает "true"\"false" а не "0" как трубет command_state, то используем его. Конечно, лучше завести нового пользователя в микротике, с ограничением прав только на данные операции. Выключатель готов: