Tras darme cuenta de la cantidad de intentos de inicio de sesión que se producen en mi Raspberry todos los días, he decidido instalar Fail2ban.
Fail2ban es una aplicación que te ayudará a proteger tu servidor contra ataques maliciosos y con la que podrás mantener tus datos seguros.
Fail2ban evitará los accesos de bots, es decir, de máquinas automatizadas que realizan intentos de acceso indiscriminados a los servidores. Este tipo de bots son muy comunes en Internet y simplemente se dedican a intentar loguearse en los servidores, probando diferentes usuarios y claves de acceso, para autorizarse correctamente y tomar el control de la máquina.
Fail2ban se encarga de monitorizar los registros de acceso al servidor en busca de fallos de acceso e impidiendo nuevos intentos de login desde las direcciones IP involucradas, por un tiempo determinado.
Antes de instalar Fail2ban evita usar puertos como el 22 y 2222 ya que son muy comunes a estos servicios y son el primer punto de intentos de inicio de sesión elegidos por los bots.
Como instalar Fail2ban
Para instalar fail2ban deberemos abrir una terminal y escribir lo siguiente:
sudo apt install fail2ban python3-systemd
Configuración
La configuración de Fail2ban se encuentra en la carpeta «/etc/fail2ban/«. Allí encontraremos un archivo llamado «jail.conf» con las configuraciones del sistema.
Pero nosotros trabajaremos con una copia del archivo jail.conf a la que llamaremos jail.local, ya que así evitaremos que tras una actualización este pueda ser sustituido por la versión por defecto, cambiando así toda nuestra configuración.
El archivo jail.local se carga después de jail.conf y en él realizaremos nuestra configuración, por lo que todo lo que se escriba en jail.local es lo que se va a tener en cuenta definitivamente.
La copia del archivo jail.conf, la haremos desde la terminal con el comando cp (copy)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ahora abre el archivo en cuestión
sudo nano /etc/fail2ban/jail.local
Configuración Default (por defecto)
En la sección [DEFAULT] encontramos las configuraciones predeterminadas que afectarán a todos los jail. Todas las configuraciones que pongas en [DEFAULT] son heredadas por los jail
En la sección «[DEFAULT]» encontramos la configuración global de las opciones. Allí veremos diversas variables a definir como las siguientes:
- ignoreip: Aquí puedes añadir direcciones IP que nunca serán baneadas por Fail2ban. Por ejemplo, nuestra propia dirección IP.
- bantime: es el tiempo que una IP será baneada, expresado en segundos, minutos, horas, días …. (por defecto en 10 minutos)
- findtime: es el tiempo que transcurre entre intentos de conexión antes de ser baneado. (por defecto en 10 minutos)
- maxretry: es el número máximo de intentos de login que podrán realizarse antes de que la IP sea baneada. (por defecto en 5 intentos)
Nota si quieres que se ignoren todas las ips procedentes de tu red local, escribe la primera dirección IP (que suele ser la del router) seguido de un /24, esto hará que no se tengan en cuenta las direcciones de la 1 a la 254.
Seguimos cambiando otras cosas de la sección Default.
Como yo no uso iptables, ya que el firewall lo tengo activo a nivel de router, haremos algunos cambios.
Busca las siguientes líneas y comenta con el signo #
[Default]
banaction = iptables-multiport
banaction_allports = iptables-allports
Pega debajo las siguientes líneas.
banaction = nftables
banaction_allports = nftables[type=allports]
Quedando como en la siguiente imagen.
Configuración de Jail
El siguiente paso es configurar los jails.
Los Jails en Debian se se configuran sobre el archivo llamado defaults-debian.conf, que se encuentra en la ruta etc/fail2ban/jail.d/defaults-debian.conf.
Abre defaults-debian.conf desde la terminal
sudo nano /etc/fail2ban/jail.d/defaults-debian.conf
Nos muestra el contenido del archivo
[sshd]
enabled = true
Esto significa que tengo habilitado el jail sshd.
Este jail tiene los parámetros de configuración heredados por [Default], pero lo mejor será crear unos parámetros específicos.
Añade las líneas en negrita, que son, el puerto de conexión, la ruta de log de eventos y el backend
[sshd]
enabled = true
port = 2353
logpath = %(sshd_log)s
backend = systemd
Nota: Cambia port por el puerto que usas en tu servidor ssh
Reinicia el el servicio fail2ban así:
sudo systemctl restart fail2ban
Hasta aquí todo listo, ya solo queda comprobar que todo va bien.
Comprobaciones.
Vamos a realizar una serie comprobaciones para ver si se están ejecutando correctamente los servicios, estados y advertencias.
Test estado del servicio
Comprobamos el estado del servicio con:
sudo systemctl status fail2ban
Es posible que después de hacer una status, el servicio aparezca inactivo, como se muestra en la siguiente imagen.
Para arreglar esto haz lo siguente. En una terminal, escrbribe:
sudo echo "sshd_backend = systemd" >> /etc/fail2ban/paths-debian.conf
Reinicia el servicio con:
sudo systemctl restart fail2ban
Y volvemos a ver el estado de como está el servicio:
sudo systemctl status fail2ban
Ahora está todo correcto, el servicio aparece activo y corriendo.
Test estado general de fail2ban
Comprobamos el estado y la cantidad de jails en funcionamiento.
sudo fail2ban-client status
Test estado de Jails específicos
Comprobamos si una jail específica funciona, en mi caso solo tengo configurado ssh, así que ejecuta el siguiente comando:
sudo fail2ban-client status sshd
La salida nos muestra bastante información sobre las IPs baneadas, el número de intentos de conexión, el número de baneos etc etc
Visualizar el log de eventos
Veamos si el archivo log de fail2ban contiene algún error. Visualiza el archivo log en tiempo real para ver los cambios que se van produciendo instantáneamente.
Copia y pega el siguiente comando:
sudo tail -f /var/log/fail2ban.log
En la siguiente imagen verás que no aparece ningún error y se carga nuestro jail sshd
Test de Fail2ban
Fail2ban tiene un comando testear la configuración. Para esta comprobación tienes que usar este comando:
sudo fail2ban-client --test
Vaya! tenemos un mensaje de advertencia. No es un error, tampoco afectará al funcionamiento de fail2ban, pero se puede arreglar.
Corregir advertencia Warning IPV6
Para arreglar esto tendremos que abrir el archivo de configuración que se encuentra en /etc/fail2ban/fail2ban.conf
sudo nano /etc/fail2ban/fail2ban.conf
Ve al apartado [Definition], verás que está vacío y escribe debajo lo siguiente:
allowipv6 = auto
Quedando de la siguiente manera:
Volvemos a repetir el test y ahora se habrá quitado el mensaje de advertencia.
Test de Baneo
Provocamos un ban sobre nosotros para ver si la configuración es correcta.
Intento entrar por ssh desde mi teléfono móvil con una contraseña errónea. Debe de haber 5 intentos de conexión y un baneo de 10 minutos.
Al quinto intento nos banea y como vimos antes, hasta transcurridos 10 minutos no dejará que volvamos a probar.
Pasados 10 minutos, tal como está configurado en [Default] se levanta el baneo y dará permiso para volver a dejarnos entrar.
Mi teléfono vuelve a dejarnos escribir la contraseña.
Desbanear una IP
Las IP baneadas pueden ser sacadas de la lista de ban sin tener que esperar al tiempo de ban por defecto. Para ello usa unban y la ip a desbanear.
sudo fail2ban-client unban 192.168.1.1
Envío de alertas por email.
Para que fail2ban envíe alertas por email, debes de tener instalado y configurado algún programa que envíe correos electrónicos. En mi caso uso sSMTP y la configuración que usaré en fail2ban, será con este programa.
sSMTP es un programa que envía correo electrónico desde un equipo a un servidor de correo configurado. Es decir que este no es un servidor de correo como si lo es sendmail o postfix sino que solo se encarga del envío de correos.
Si quieres saber cómo he configurado sSMTP puedes ver mi post «Script para monitorizar cambio de IP Pública» e ir al apartado 2- Instalar ssmtp y configurar la cuenta de correo y seguir los pasos que allí te indico.
Fail2ban te avisará cuando una IP sea baneada, aportando una valiosa información acerca de su procedencia, proveedor etc etc
Continuemos con nuestro de configuración jail.local. En nuestra terminal reglamentaria, escribe el siguiente comando:
sudo nano /etc/jail2ban/jail.local
Ve al apartado Actions
Busca la líneas que dicen, destemail y mta
# Some options used for actions
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = root@localhost
# Sender email address used solely for some actions
sender = root@<fq-hostname>
# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = sendmail
En destemail escribe la dirección de correo a la que llegarán las alertas, por ejemplo mi_email@gmail.com
En mta aquí usa el modo en que tu programa envía mails, en el caso de sSMTP pondré mail
# Some options used for actions
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = mi_email@gmail.com
# Sender email address used solely for some actions
sender = root@<fq-hostname>
# E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA for the
# mailing. Change mta configuration parameter to mail if you want to
# revert to conventional 'mail'.
mta = mail
Ve al Jail [sshd ] (recuerda que la ruta era etc/fail2ban/jail.d/defaults-debian.conf) y añadele la siguiente línea:
action = %(action_mwl)s
action = “mw” después de “action_” le dice a Fail2ban que le envíe correos electrónicos. “mwl” además adjunta los registros.
Ahora nuestra Jail sshd queda de la siguiente manera:
[sshd]
enabled = true
port = 2353
logpath = %(sshd_log)s
backend = systemd
action = %(action_mwl)s
Reinicia el servicio fail2ban
sudo systemctl restart fail2ban
Puedes intentar loguearte por ssh de forma errónea por 5 veces consecutivas y recibirás un bonito mail de baneo.