Seguridad con Fail2ban
Fail2ban es una aplicación que nos permite evitar accesos no autorizados a nuestro servidor. Funciona bloqueando / baneando las IP que realicen varios intentos de acceso incorrectos al servidor.
Instalación en Debian
apt install fail2banConfiguración
Configuraciones generales
nano /etc/fail2ban/jail.confEn la sección [DEFAULT] encontramos algunos valores que podemos configurar por defecto a nivel global:
- bantime: Tiempo que una IP será baneada (en segundos).
- maxretry: Número máximo de intentos de login antes de que la IP sea baneada (se recomienda comentar esta variable con # y utilizarla especificamente en cada uno de los servicios).
- findtime: Tiempo que debe esperar el sistema para revisar si hubo algun intento de ataque nuevo.
- ignoreip: Lista de IPs separadas por espacios que fail2ban debe ignorar.
Configuraciones por servicio
Configuraciones personalizadas para cada servicio, en nuestro caso vamos aplicarlo para_ - Servidor ssh - Servidor web Nginx
Para ello abrimos el archivo /etc/fail2ban/jail.d/defaults-debian.conf
nano /etc/fail2ban/jail.d/defaults-debian.confServicio de SSH
A continuación pegamos las siguientes lineas
# Configuración básica para el servidor SSH
[sshd]
maxretry = 5
bantime=10800
# Bloquear intentos no deseados al servicio de autentificación básica de Nginx
[nginx-auth]
enabled = true
filter = nginx-auth
action = iptables-multiport[name=NoAuthFailures, port="http,https"]
logpath = /var/log/nginx*/*error*.log
bantime = 600 # 10 minutes
maxretry = 6
# Bloquear a los badbots
[nginx-badbots]
enabled = true
filter = apache-badbots
action = iptables-multiport[name=BadBots, port="http,https"]
logpath = /var/log/nginx*/*access*.log
bantime = 86400 # 1 day
maxretry = 1
# Bloquear los intentos de ejecución de un script
[nginx-noscript]
enabled = true
action = iptables-multiport[name=NoScript, port="http,https"]
filter = nginx-noscript
logpath = /var/log/nginx*/*access*.log
maxretry = 6
bantime = 86400 # 1 day
# Bloquear a todos aquellos que quieren utilizar el servidor como un proxy
[nginx-proxy]
enabled = true
action = iptables-multiport[name=NoProxy, port="http,https"]
filter = nginx-proxy
logpath = /var/log/nginx*/*access*.log
maxretry = 0
bantime = 86400 # 1 day
Una vez que ya hemos modificado y guardado nuestro archivo de configuración.
Debemos crear o reescribir los correspondientes ficheros del directorio filter.d /etc/fail2ban/filter.d/ para cada uno de estos servicios.
Servicio de NGINX
Para nginx-proxy
# Abrimos el archivo
nano /etc/fail2ban/filter.d/nginx-proxy.conf
# Copiamos y pegamos
[Definition]
failregex = ^<host> -.*GET http.*
ignoreregex =
Para nginx-noscript
# Abrimos el archivo
nano /etc/fail2ban/filter.d/nginx-noscript.conf
# Copiamos y pegamos
[Definition]
failregex = ^<host> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\scgi)
ignoreregex =
Para nginx-suth
# Abrimos el archivo
nano /etc/fail2ban/filter.d/nginx-auth.conf
# Copiamos y pegamos
[Definition]
failregex = no user/password was provided for basic authentication.*client: <host>
user .* was not found in.*client: <host>
user .* password mismatch.*client: <host>
ignoreregex =
Guardar y reiniciar el servicio de fail2ban
service fail2ban restart