Получаем скриптом состояние правила - enabled или disabled

Обсуждение ПО и его настройки
Ответить
tanukker
Сообщения: 3
Зарегистрирован: 31 янв 2017, 13:54

В firewall есть несколько правил управляемых через SSH путем запуска соответствующего скрипта на микротике. Иногда требуется опять же через SSH узнать в каком состоянии находится правило в настоящий момент - enabled или disabled. У правила есть соответствующий флаг, как его получить скриптом?

В идеале нужен скрипт, который бы опросил все правила содержащие в комментарии определенное слово, например "policy" и отправил на email список этих правил с указанием их состояния, включено или нет.

Кто нибудь решал подобную задачу?


DmNuts
Сообщения: 120
Зарегистрирован: 18 май 2016, 18:33
Откуда: Иркутск

Вот такой командой можно получить ID всех правил, отключенных в данный момент:

Код: Выделить всё

:put [/ip firewall filter find disabled=yes]

Остаётся прикрутить переменные, условия, цикл.


tanukker
Сообщения: 3
Зарегистрирован: 31 янв 2017, 13:54

В целом получилось реализовать задуманное:

  • В цикле отбираются правила содержащие в комментарии ключевое слово
  • Извлекается состояние правила - вкл или выкл
  • Все это отправляется по email

Код: Выделить всё

:local i;
:local fcomment;
:local fstate;
:local flist "";

/ip firewall filter;
:foreach i in=[find where comment~"policy"] do={
   :set fcomment [get $i comment];
   :set fstate [get $i value-name=disabled];
   :set flist ($flist . $fcomment . " > " . $fstate . "\n");
};

/tool e-mail send to="mail@example.com" subject="$[/system identity get name] firewall policy filters state" body=$flist;

На почту падает в таком виде:

Код: Выделить всё

policy - deny access to blacklist.domains > false
policy - deny access to WAN > true

Только вот не смог сделать замену, чтобы вместо false и true выводилось "Enabled" и "Disabled" соответственно, т.к. истина возвращается при выключенном правиле. И в целом, можно ли это как-то упростить?


tanukker
Сообщения: 3
Зарегистрирован: 31 янв 2017, 13:54

В итоге получилось вот так:

Код: Выделить всё

:local email "mail@example.com";
:local mask "policy";

:local i;
:local fcomm;
:local fstate;
:local flist "";

/ip firewall filter;
:foreach i in=[find where comment~"$mask"] do={
   :set fcomm [get $i comment];
   :set fstate [get $i value-name=disabled];
   :if ($fstate=true) do={
      :set fstate "Disabled";
      } else={
      :set fstate "Enabled";
   };
   :set flist ($flist . $fcomm . "\n" . "> " . $fstate . "\n\n");
};

/tool e-mail send to="$email" subject="$[/system routerboard get serial-number] firewall policy filters" body=$flist;

Скрипт отправляет на почту состояние (вкл/выкл) правил содержащих ключевое слово "policy" в комментарии:

Код: Выделить всё

policy - deny access to blacklist.domains
> Enabled

policy - WAN allow for whitelist.hosts
> Disabled

policy - WAN deny for all
> Disabled

Сам спросил как - сам себе же и ответил :)


Аватара пользователя
hulitolku
Сообщения: 34
Зарегистрирован: 07 окт 2018, 11:59

а как получить состояния enabled или disabled у интерфейса?


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

В смысле? Список включённых интерфейсов?

Код: Выделить всё

:foreach yu in=[/interface find running] do={:put [/interface get $yu name]}
Список всех интерфейсов в том же формате поиска

Код: Выделить всё

{:foreach yu in=[/interface find running!=""] do={:put [/interface get $yu name]}}
Состояние определённого? Там три состояния возможных. true - включен, false - выключен и no such item - неверный критерий поиска (неправильное имя)

Код: Выделить всё

/interface get [find name=ether4] running


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить