Direcciones bloqueadas por ssh_blocker
Hace tiempo que vengo usando un script para bloquear ataques al SSH, y la verdad es que ya me había olvidado de él.
Bueno, lo recordé un día este verano cuando me equivoqué al poner el nombre del usuario conectando desde casa de Sonia vía club radio
y el script me bloqueó el acceso :D. El caso es que... ¿cómo va la cosa? ¿Han descendido o aumentado los ataques al servicio SSH
?
La dirección IP
más vieja que tengo en los registros es del 25 de Noviembre del 2004.
# pfctl -t sshscan -T show | wc -l 232
Buena cifra :). Veamos, ya que mi debilidad son las gráficas de colores ;) y que tengo recientes mis pruebas con gnuplot, cual es la progresión de añadidos a la lista y la cantidad de ataques reinicidentes.
Obtenemos los datos de las IP
s listadas, haciendo un pequeño hack para añadir el año (en los logs no está).
awk ' BEGIN { i=2004 } $1 == "Jan" { i=2005 } $0 != NL { print $1 "-" $2 "-" i } ' \ < /var/log/ssh_blocker.log | uniq -c > blocked.data
Ahora añadimos a la gráfica los datos las intentos de conexión rechazados por el bloqueo. Primero obtenemos los datos que he registrado con packet filter
, aunque solo hay datos de los últimos 3 meses :(.
# rm log && touch log # for file in /var/log/pflog.*.gz; do echo $file; zcat $file | \ tcpdump -n -e -ttt -r - port 22 >> log; done # tcpdump -n -e -ttt -r /var/log/pflog port 22 >> log
Falta obtener el número único de estaciones que han sido filtradas por día. No me vale de mucho saber que una IP
haya realizado 1322 intentos de conexión (increible pero cierto) porque lo que quiero saber es cuántas máquinas de las bloqueadas han vuelto a intentar el ataque después de haber sido añadidas a la lista negra. El script queda algo raro, probablemente porque no se me ha ocurrido una forma mejor de tratar los datos :P.
$ awk ' $0 != NL { split($10, ip, "\."); print ip[1] "." ip[2] "." ip[3] "." \ ip[4], $1 "-" $2 "-2005" } ' < log | sort \ | uniq | awk ' { print $2 } ' | sort | uniq -c > filtered.data
El fichero para gnuplot
sería el siguiente:
set data style impulses set timefmt "%b-%d-%Y" set format x "%b" set xdata time set xlabel "Time" set ylabel "IP Address count" set title "Blocked IPs from SSH attacks" set terminal png small xffffff set size 500/640.0, 300/480.0 set output "blocked.png" set grid xtics ytics plot "blocked.data" using 2:1 title "Blocked" 1, \ "filtered.data" using 2:1 title "Filtered" with points 2
Y el resultado este:

En la gráfica se aprecia que, salvo un par de picos, las direcciones se van añadiendo a la lista de forma bastante uniforme, así que en unos 10 meses no han habido demasiados cambios en cuanto a ataques nuevos.
También es revelador que el número de máquinas filtradas, es decir, estaciones que han vuelto a realizar el ataque una vez fueron añadidas, es bastante bajo y muy cerca del valor para las máquinas nuevas. Tampoco tengo demasiados datos para verificar este último punto (Agosto y lo que llevamos de Septiembre principalmente), pero podríamos concluir que las máquinas que realizan un ataque rara vez vuelven: solo un 10.34% (24 ataques filtrados en total por parte de estaciones distintas, de un total de 232 bloqueadas).
Así que bloquear direcciones IP
en base a la detección de ataques funciona, pero no hay un gran beneficio a no ser que suframos una cantidad de ataques considerables, y en ese caso la tabla de direcciones a bloquear sería bastante grande para solo filtrar un 10% de ataques reincidentes.
Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.