¿Que es Fail2ban?
Es una
herramienta escrita en
Python que sirve para
securizar un
servidor monitoreando
logs y bloqueando conexiones de intrusos en base a ciertos patrones predefinidos. Es decir, cuando por ejemplo detecta que en un
log hay cierta cantidad de intentos fallidos de conexión, en base a la configuración que hayamos definido bloquea la IP del intruso a través de
iptables para impedir que el mismo siga intentando conectarse. Este
bloqueo/
baneo de la IP puede ser
permanente o
temporal, dependiendo de como lo hayamos definido nosotros.
La ubicación que contiene la totalidad de filtros de
fail2ban es
/etc/fail2ban/filter.d:
Entre sus
filtros mas destacables se encuentran:
sshd.conf: Para los intentos fallidos a
SSH.
proftp.conf: Para los intentos fallidos hacia el
FTP ProFTP del cual hice un
post de instalación y configuración.
exim.conf: Para detectar autenticaciones al servidor de correo
Exim.
squid.conf: Para los intentos de omitir este famoso
proxy del cual tambien hice un post
aca y
aca.
Los
filtros contienen principalmente
expresiones regulares que se utilizan para detectar intentos de intrusión, fallas de contraseña, etc.
Una vez definida una
expresión regular se irá comprobando que la misma no aparezca en ninguno de los
logs que
Fail2ban esta monitoreando. En el caso que la expresión regular aparezca en los
logs se contabilizará un intento fallido de autenticación, el mismo se ira incrementando hasta llegar al numero que configuramos, una vez que llegue tomará una
acción, que generalmente sera
bloquear la IP.
Si vamos a usar los servicios estándares predeterminados (que son los que vemos mas arriba) no será necesario modificar ni crear ningún
filtro, podemos utilizar los que vienen por defecto.
En cuanto a las
acciones, las mismas se encuentran en la ruta
/etc/fail2ban/action.d. Allí una serie de
scripts definen las
acciones a realizar al detectar los
ataques definidos en las expresiones regulares de los
filtros.
Como con los
filtros, estas
acciones que ya nos trae por defecto deberían ser suficientes, pero esta la posibilidad de crear acciones nuevas.
Archivo jail.conf:
jail.conf es el archivo de configuración más importante. En este
archivo es donde indicamos que
servicios debe proteger
Fail2ban (por defecto vienen todos, o casi, activados), entre otras cosas podemos:
- Definir que servicios queremos que monitoree
Fail2ban.
- Que
filtro y
acción aplicar.
- Definir el
puerto del servicio, para casos como por ejemplo
ssh donde se suele cambiar el puerto 22 que viene por defecto.
- Elegir que
log del servicio vamos a monitorear.
- Definir la cantidad de intentos fallidos y el tiempo de bloqueo.
Algunos parámetros:
Sección [DEFAULT]
ignoreip: Acá van las IPs que no queres que se bloqueen, generalmente va la
red o subredes internas.
maxretry: Número de intentos antes de banear la IP.
findtime: Definimos en cuanto tiempo el contador de intentos fallidos se va a resetear.
bantime: Duración (en segundos) para la prohibición de la IP. Usar número negativo para la prohibición "permanente".
ignorecommand: Acá podemos definir un comando que sera exceptuado cuando una determinada IP intente conectarse a nuestro servidor.
logtarget: Es para indicar en que ubicación se van a almacenar los logs de
Fail2ban, por defecto
/var/log/fail2ban.log
En [ACTION]:
Podemos definir la dirección del mail a la que queremos que lleguen los avisos de bloqueo:
destemail = root@localhost
En [JAILS]:
enable: Activamos o desactivamos el monitoreo del servicio con true o false.
port: Definimos el puerto del servicio.
filter: Nombre del filtro que utilizará la "cárcel" para detectar coincidencias.
logpath: Definimos que
log tiene que monitorear.
A modo de ejemplo:
[DEFAULT]
ignoreip = 127.0.0.1 (Ignora la propia ip)
bantime = 600
findtime = 600
maxretry = 3
backend = auto
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
#logpath = /var/log/secure
#logpath = /var/log/auth.log
maxretry = 3
Si
modificamos parámetros para que los mismos se hagan efectivos
tenemos que reiniciar el servicio de Fail2ban:
sudo service fail2ban restart
Ahora vamos a lo importante:
Instalar Fail2ban:
sudo apt-get install fail2ban
Hacer backup del archivo de configuración:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.orig
Ver reglas de iptables cargadas:
sudo iptables -L -n
Como mencionamos mas arriba,
Fail2ban no se limita a
SSH. Contiene
filtros y
acciones predeterminados para muchos
demonios y
servicios. Se pueden modificar o crear otros nuevos. En este caso como la idea es mostrar el de
SSH vamos a probar loguearnos fallidamente a la IP de nuestro servidor con
Fail2ban para ver si nos
banea:
|
Intentos fallidos hasta el bloqueo |
Vemos que ya no nos deja seguir intentando, se queda ahí. Esto es porque tengo configurado 5 intentos fallidos. Si reviso el log de Fail2ban se ve con mas claridad:
sudo cat /var/log/fail2ban.log | more