Buenas, he estado viendo de implementar esto y tal como está falla. Me he leído en diagonal todo el hilo y he visto alguna otra persona que le falla también.
El problema por lo que he visto, es que en la parte de envío de mails el script está tirando de otro script llamado
SendEmailFunction, que si no lo tienes no enviará emails claro. El resto de funciones funcionan, mete las ips en la lista negra, lee los logs propios y luego limpia el contenido, etc...
Total que me he googleado y me he encontrado un script, que si no es el mismo será parecido al que ha puesto
@diamuxin. Le he dado unas cuantas vueltas y no sé que huevos que no hay manera de que mande los mails, o errores TLS o errores AUTH o nada, nada de nada, parece que los manda pero no aparecen por ningún lado.
Al final he acabado tuneando el script así que lo dejo por aquí, por si alguien le sirve, este script tira del email definido en el propio routeros, así que debe estar configurado y funcionando en la ventana de tools -> email y luego lo probáis con:
Código:
/tool e-mail send to="pepito@gmail.com" start-tls=yes subject="MikroTik prueba" body="Hola ke ase."
Si os llega el mail es que está ok, ahora el script:
Código:
:local logBuffer "failedauth"
:local failthreshold 2
:local blocklist "Lst_AttemptLoginIP"
:local GTime [:pick [/system clock get time] 0 8]
:local DeviceName [/system identity get name];
# ----------------------------------------------------------------------------------------
: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 timeout=86400
# START Send Email Module
/tool e-mail send to="EMAILDESTINO@gmail.com" start-tls=yes subject="MikroTik alerta $datetime" body="Router ($DeviceName) intento de login por: $attackiparray a las $GTime. IP baneada 24 horas. $logEntryMessage"
# END Send Email Module
}
:set ($attackcountarray->$z) 0
:set z ($z+1)
}
La diferencia está al final en dos temas, la parte mail ya veis que usa directamente el comando /tool e-mail send al destinatario que pongáis. Ojo que al menos gmail sin el TLS bien puesto no funciona.
La segunda al añadir la IP a la lista de bloqueos le he metido un timeout de 24 horas, pasado el tiempo se borrará de la lista y podrá volver a acceder.
Si fallas 3 veces la contraseña te baneará 24 horas, el tiempo de fallo será el que defináis en la programación de la tarea.