Skrypt blokujący adres IP do 3 nieudanych próbach logowania.
1. Dodajem akcję logowania "zlylogin"
System -> Logging -> [Actions] -> [+] Name: zlylogin Type: memory
System -> Logging -> [Rules] -> [+] Topics: critical, system, error Action: zlylogin

2. Dodajemy skrypt skanujący logi w poszukiwaniu akcji "zlylogin".
Skypt wyszukuje takie wystąpienia i wycina z nich adres IP.
Następnie zlicza wystąpienia tego samego adresu IP. Jeśli jest ich więcej niż 2 to dodaje adres do listy "login_blacklist".
System -> Scripts -> [+] Name: Blokuj_login
:local logBuffer "zlylogin"
:local failthreshold 2
:local blocklist "login_blacklist"
# ----------------------------------------------------------------------------------------
:local attackiparray {0}
:local attackcountarray {0}
:local logEntryTopics
:local logEntryTime
:local logEntryMessage
:local clearedbuf
:local lines
:local datetime [/system clock get date]
:set clearedbuf 0
:local i 0
:foreach rule in=[/log print as-value where buffer=($logBuffer)] do={
# Now all data is collected in memory..
# Clear log buffer right away so new entries come in
:if ($clearedbuf = 0) do={
/system logging action {
:set lines [get ($logBuffer) memory-lines]
set ($logBuffer) memory-lines 1
set ($logBuffer) memory-lines $lines
}
:set clearedbuf 1
}
# End clear log buffer
:set logEntryTime ""
:set logEntryTopics ""
:set logEntryMessage ""
:set logEntryTime ($rule->"time")
:set logEntryTopics ($rule->"topics")
:set logEntryMessage ($rule->"message")
:if ($logEntryMessage~"login failure") do={
:local attackip [:pick $logEntryMessage ([:find $logEntryMessage "from "]+5) ([:find $logEntryMessage " via"])]
:local x 0
:foreach ip in=$attackiparray do={
:if ($ip = $attackip) do={
:set ($attackcountarray->$x) (($attackcountarray->$x)+1)
} else={
:set ($attackiparray->$i) $attackip
:set ($attackcountarray->$i) 1
}
:set x ($x+1)
}
}
:set i ($i+1)
# end foreach rule
}
:local z 0
:foreach ip in=$attackiparray do={
:if ($attackcountarray->$z > $failthreshold) do={
:set ($attackcountarray->$z) 0
/ip firewall address-list add address=($attackiparray->$z) list=$blocklist comment=\
"Bruteforce login prevention"
}
:set ($attackcountarray->$z) 0
:set z ($z+1)
}
3. Dodajemy wywoływanie skryptu co 20 sekund do harmonogramu.
System -> Scheduler -> [+]
Name: Blokuj_login Interval: 00:00:20 On Event: Blokuj_login
4. Dodajemy regułę do zapory blokującą ruch z adresów IP pobieranych z listy "login_blacklist"
IP -> Firewall -> [Filter Rules] -> [+]
Chain: input Src. Address List: "login_blacklist" Action: drop
Od teraz adresy będą blokowane automatycznie.
Źródło:
http://phallaccmt.blogspot.com/2016/12/93-mikrotik-email-alert-and-block.html