Previo a tener un sistema de bloqueo automático basado en Fail2Ban con IPset, se puede complementar con un proceso (también) automático para detectar intentos de acceso y en consecuencia, bloquear:
Apr 17 15:32:09 node01 sshd[316028]: Failed password for invalid user zabbix from 138.68.150.255 port 40918 ssh2
Apr 17 15:32:53 node01 sshd[316035]: Failed password for invalid user git from 138.68.150.255 port 33000 ssh2
Apr 17 15:33:34 node01 sshd[316042]: Failed password for invalid user apache from 138.68.150.255 port 38994 ssh2
Apr 17 15:34:15 node01 sshd[316050]: Failed password for invalid user git from 138.68.150.255 port 39646 ssh2
Apr 17 15:34:54 node01 sshd[316057]: Failed password for invalid user git from 138.68.150.255 port 57886 ssh2
Apr 17 15:35:36 node01 sshd[316067]: Failed password for invalid user test from 138.68.150.255 port 50442 ssh2
Vamos a crear un script con el siguiente contenido:
#!/bin/bash
for IP in `grep "Failed password for " /var/log/secure | tail -50 | grep -E -o "([0-9]{1,3}[.]){3}[0-9]{1,3}" | sort | uniq`;do
if grep -q ${IP} /etc/hosts.deny;then
echo "FILTER ${IP}"
else
echo "# `date "+%d/%m/%Y %H:%M:%S"`" >> /etc/hosts.deny
echo "sshd: ${IP}" >> /etc/hosts.deny
echo "BLOCK ${IP}"
/sbin/service sshd reload > /dev/null
fi
done
y por ejemplo, cada 15 minutos lo ejecutaremos:
*/15 * * * * /scripts/SSHD_BLOCK.sh
No es esta la mejor opción, porque de forma recurrente aparecerán mas IP’s y será de difícil gestión, pero para minimizar intentos de acceso si que nos puede servir.