скрипт переделал не на подсеть а на отдельные ipbear писал(а): ↑03 апр 2024, 14:30почему-то был уверен, что выше выкладывал
примеры записей в логе:скрипт, который отловит все эти варианты и запишет 0/24 подсеть в выбраный адреслистКод: Выделить всё
123.123.111.123 phase1 negotiation failed. 123.123.122.123 parsing packet failed, possible cause: wrong password phase1 negotiation failed due to time up 100.100.100.100[500]<=>123.123.133.123[500] e0c091b198818b39:6b463379b059196c <123.123.144.123>: user Admin authentication failed
в моём примере это лист block_vpn_access (не забываем про фаервол, который должен дропать инпуты из этого листа)Код: Выделить всё
:foreach i in=[/log/find message~"^\\d+\\.\\d+\\.\\d+\\.\\d+ phase1 negotiation failed\\."] do={ :local msg [/log get $i message]; :local ip ([:pick $msg 0 [:find $msg "." ([:find $msg "." ([:find $msg "."] + 1)] + 1)]].".0/24"); do {/ip/firewall/address-list/add list=block_vpn_access address=$ip} on-error={} } :foreach i in=[/log/find message~"^\\d+\\.\\d+\\.\\d+\\.\\d+ parsing packet failed, possible cause: wrong password"] do={ :local msg [/log get $i message]; :local ip ([:pick $msg 0 [:find $msg "." ([:find $msg "." ([:find $msg "."] + 1)] + 1)]].".0/24"); do {/ip/firewall/address-list/add list=block_vpn_access address=$ip} on-error={} } :foreach i in=[/log/find message~"^phase1 negotiation failed due to time up"] do={ :local logMessage [/log get $i message]; :local startPosition [:find $logMessage ">"]; :local msg [:pick $logMessage ($startPosition + 1) [:len $logMessage]]; :local ip ([:pick $msg 0 [:find $msg "." ([:find $msg "." ([:find $msg "."] + 1)] + 1)]].".0/24"); do {/ip/firewall/address-list/add list=block_vpn_access address=$ip} on-error={} } :foreach i in=[/log/find message~".*>: user [^ ]+ authentication failed"] do={ :local logMessage [/log get $i message]; :local startPosition [:find $logMessage "<"]; :local msg [:pick $logMessage ($startPosition + 1) [:len $logMessage]]; :local ip ([:pick $msg 0 [:find $msg "." ([:find $msg "." ([:find $msg "."] + 1)] + 1)]].".0/24"); do {/ip/firewall/address-list/add list=block_vpn_access address=$ip} on-error={} }
заменив :local ip [:pick $msg 0 [:find $msg "["]];
и добавил уведомления после добавления в адрес лист))
:local alerttext "$currdatetime Mikrotik $[/system identity get name] $ip IP was added to block_vpn_access-list";
/log info ">>> Script L2TP IPsec protector: $ip IP was added to block_vpn_access. <<<";
/tool fetch keep-result=no url="https://api.telegram.org/bot$BotToken/s ... $alerttext";
а как можно сделать проверку на то, что ip адрес уже есть в адрес листе? и не добавлять такой ip повторно