В firewall есть несколько правил управляемых через SSH путем запуска соответствующего скрипта на микротике. Иногда требуется опять же через SSH узнать в каком состоянии находится правило в настоящий момент - enabled или disabled. У правила есть соответствующий флаг, как его получить скриптом?
В идеале нужен скрипт, который бы опросил все правила содержащие в комментарии определенное слово, например "policy" и отправил на email список этих правил с указанием их состояния, включено или нет.
Кто нибудь решал подобную задачу?
Получаем скриптом состояние правила - enabled или disabled
-
- Сообщения: 120
- Зарегистрирован: 18 май 2016, 18:33
- Откуда: Иркутск
Вот такой командой можно получить ID всех правил, отключенных в данный момент:
Остаётся прикрутить переменные, условия, цикл.
Код: Выделить всё
:put [/ip firewall filter find disabled=yes]
Остаётся прикрутить переменные, условия, цикл.
-
- Сообщения: 3
- Зарегистрирован: 31 янв 2017, 13:54
В целом получилось реализовать задуманное:
На почту падает в таком виде:
Только вот не смог сделать замену, чтобы вместо false и true выводилось "Enabled" и "Disabled" соответственно, т.к. истина возвращается при выключенном правиле. И в целом, можно ли это как-то упростить?
- В цикле отбираются правила содержащие в комментарии ключевое слово
- Извлекается состояние правила - вкл или выкл
- Все это отправляется по 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" соответственно, т.к. истина возвращается при выключенном правиле. И в целом, можно ли это как-то упростить?
-
- Сообщения: 3
- Зарегистрирован: 31 янв 2017, 13:54
В итоге получилось вот так:
Скрипт отправляет на почту состояние (вкл/выкл) правил содержащих ключевое слово "policy" в комментарии:
Сам спросил как - сам себе же и ответил :)
Код: Выделить всё
: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
- Модератор
- Сообщения: 4361
- Зарегистрирован: 11 фев 2012, 18:49
- Откуда: МО
В смысле? Список включённых интерфейсов?
Список всех интерфейсов в том же формате поиска
Состояние определённого? Там три состояния возможных. true - включен, false - выключен и no such item - неверный критерий поиска (неправильное имя)
Код: Выделить всё
:foreach yu in=[/interface find running] do={:put [/interface get $yu name]}
Код: Выделить всё
{:foreach yu in=[/interface find running!=""] do={:put [/interface get $yu name]}}
Код: Выделить всё
/interface get [find name=ether4] running
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...