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

https://www.youtube.com/watch?v=O5_gmpL9F4E

Dodaj komentarz

Brak komentarzy, bądź pierwszy i dodaj swój komentarz