активация/дезактвация правила в файерволле по условию скриптом
Добавлено: 18 фев 2020, 23:48
Приветствую всех ! Эх давно я тут не был ...
Это не готовый, к сожалению, скрипт, а вопрос к знатокам ...
Можно ли (допустим при наступлении какого-то события) скриптом включить правило в /ip firewall mangle если оно выключено и выключить если оно включено, но с предварительной проверкой на "активность" этого правила ?
Поясню зачем и как это нужно ...
Допустим есть кусочек скрипта:
:local pcrule "redirection PC to ether1"
:if ([ping 8.8.8.8 interface=ether1 routing-table="ether1" count=3]>2) do={
:foreach i in=[/ip firewall mangle find comment=$pcrule] do={/ip firewall mangle enable numbers=$i}} else={:foreach i in=[/ip firewall mangle find comment=$pcrule] do= {/ip firewall mangle disable numbers=$i}}
Что он делает очевидно: если есть пинг до Мира то ищем в манглах все правила с комментарием "redirection PC to ether1" и включаем их (делаем их активными). Если же пинга в Мир нет - выключаем эти правила. Я это использую для того, чтобы управлять правилами меняющими трафик разных клиентов по разным маршрутам ... (но сейчас это не важно, это пример).
Важно другое: всё бы хорошо, но скрипт следит из Планировщика за всем этим хозяйством и исполняется скажем раз в 30 секунд. Тогда в лог постоянно идут сообщения типа mangle set pc rule (ну или что то в этом роде ...) и сильно при таком количестве засоряют лог. Логирование для мангл отключать не хочется (это кривое решение)..., а хочется сделать красиво. Решение мне видится следующее - перед действием по включению/отключению правила в мангле в вышеприведенном скрипте надо как-то добавить проверку типа "ЕСЛИ НАМ СЕЙЧАС НУЖНО ОТКЛЮЧАТЬ НО ПРАВИЛО УЖЕ НЕ АКТИВНО (ВЫКЛЮЧЕНО) ТО НЕ БУДЕМ НИЧЕГО ДЕЛАТЬ, А ЕСЛИ ПРАВИЛО АКТИВНО ТО ВЫКЛЮЧИМ ЕГО" и наоборот. Тогда в лог сообщения о действии над /ip firewall mangle выдалось бы только когда пинг через меченный маршрут действительно восстановится или пропадет, а не при каждом срабатывании скрипта в Планировщике.
Проблема в том, что я не знаю как скриптом получить статус правила в мангле - то есть как узнать активно оно в данный момент или задизейблено ... Ясно, что в WINBOX мы видим активно правило или неактивно, а как это узнать из скрипта ?
Прошу прощения за длинное объяснение. Может кто может помочь ?
Это не готовый, к сожалению, скрипт, а вопрос к знатокам ...
Можно ли (допустим при наступлении какого-то события) скриптом включить правило в /ip firewall mangle если оно выключено и выключить если оно включено, но с предварительной проверкой на "активность" этого правила ?
Поясню зачем и как это нужно ...
Допустим есть кусочек скрипта:
:local pcrule "redirection PC to ether1"
:if ([ping 8.8.8.8 interface=ether1 routing-table="ether1" count=3]>2) do={
:foreach i in=[/ip firewall mangle find comment=$pcrule] do={/ip firewall mangle enable numbers=$i}} else={:foreach i in=[/ip firewall mangle find comment=$pcrule] do= {/ip firewall mangle disable numbers=$i}}
Что он делает очевидно: если есть пинг до Мира то ищем в манглах все правила с комментарием "redirection PC to ether1" и включаем их (делаем их активными). Если же пинга в Мир нет - выключаем эти правила. Я это использую для того, чтобы управлять правилами меняющими трафик разных клиентов по разным маршрутам ... (но сейчас это не важно, это пример).
Важно другое: всё бы хорошо, но скрипт следит из Планировщика за всем этим хозяйством и исполняется скажем раз в 30 секунд. Тогда в лог постоянно идут сообщения типа mangle set pc rule (ну или что то в этом роде ...) и сильно при таком количестве засоряют лог. Логирование для мангл отключать не хочется (это кривое решение)..., а хочется сделать красиво. Решение мне видится следующее - перед действием по включению/отключению правила в мангле в вышеприведенном скрипте надо как-то добавить проверку типа "ЕСЛИ НАМ СЕЙЧАС НУЖНО ОТКЛЮЧАТЬ НО ПРАВИЛО УЖЕ НЕ АКТИВНО (ВЫКЛЮЧЕНО) ТО НЕ БУДЕМ НИЧЕГО ДЕЛАТЬ, А ЕСЛИ ПРАВИЛО АКТИВНО ТО ВЫКЛЮЧИМ ЕГО" и наоборот. Тогда в лог сообщения о действии над /ip firewall mangle выдалось бы только когда пинг через меченный маршрут действительно восстановится или пропадет, а не при каждом срабатывании скрипта в Планировщике.
Проблема в том, что я не знаю как скриптом получить статус правила в мангле - то есть как узнать активно оно в данный момент или задизейблено ... Ясно, что в WINBOX мы видим активно правило или неактивно, а как это узнать из скрипта ?
Прошу прощения за длинное объяснение. Может кто может помочь ?