Страница 1 из 1
Получаем скриптом состояние правила - enabled или disabled
Добавлено: 27 фев 2017, 15:28
tanukker
В firewall есть несколько правил управляемых через SSH путем запуска соответствующего скрипта на микротике. Иногда требуется опять же через SSH узнать в каком состоянии находится правило в настоящий момент - enabled или disabled. У правила есть соответствующий флаг, как его получить скриптом?
В идеале нужен скрипт, который бы опросил все правила содержащие в комментарии определенное слово, например "policy" и отправил на email список этих правил с указанием их состояния, включено или нет.
Кто нибудь решал подобную задачу?
Re: Получаем скриптом состояние правила - enabled или disabled
Добавлено: 27 фев 2017, 16:34
DmNuts
Вот такой командой можно получить ID всех правил, отключенных в данный момент:
Код: Выделить всё
:put [/ip firewall filter find disabled=yes]
Остаётся прикрутить переменные, условия, цикл.
Re: Получаем скриптом состояние правила - enabled или disabled
Добавлено: 27 фев 2017, 22:31
tanukker
В целом получилось реализовать задуманное:
- В цикле отбираются правила содержащие в комментарии ключевое слово
- Извлекается состояние правила - вкл или выкл
- Все это отправляется по 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" соответственно, т.к. истина возвращается при выключенном правиле. И в целом, можно ли это как-то упростить?
Re: Получаем скриптом состояние правила - enabled или disabled
Добавлено: 01 мар 2017, 17:10
tanukker
В итоге получилось вот так:
Код: Выделить всё
: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
Сам спросил как - сам себе же и ответил :)
Re: Получаем скриптом состояние правила - enabled или disabled
Добавлено: 23 май 2020, 16:31
hulitolku
а как получить состояния enabled или disabled у интерфейса?
Re: Получаем скриптом состояние правила - enabled или disabled
Добавлено: 24 май 2020, 15:29
podarok66
В смысле? Список включённых интерфейсов?
Код: Выделить всё
: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 - неверный критерий поиска (неправильное имя)