Guía para Evitar Ataques de Fuerza Bruta en Nginx con Fail2ban

Artículos Guías Manuales Sistemas Linux Windows Binario 0

Fail2ban es una herramienta esencial para proteger tu servidor Nginx contra ataques de fuerza bruta. A continuación, te explico cómo configurarlo.

Instalación de Fail2ban

Dependiendo de tu distribución de Linux, usa uno de los siguientes comandos para instalar Fail2ban:

  • Debian, Ubuntu, Linux Mint:

    sudo apt install fail2ban
  • RHEL, CentOS, Fedora (versiones recientes):

    sudo dnf install fail2ban
  • RHEL, CentOS (versiones antiguas):

    sudo yum install fail2ban
  • SUSE, OpenSUSE:

    sudo zypper install fail2ban
  • Arch Linux:

    sudo pacman -S fail2ban

Configuración Básica

Copia el archivo de configuración principal:

sudo cp -p /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Reglas para Nginx

Añade las siguientes configuraciones al archivo jail.local para proteger tu servidor Nginx:

Autenticació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 minutos
maxretry = 6

Autenticación de Aplicaciones

[nginx-login]
enabled = true
filter = nginx-login
action = iptables-multiport[name=NoLoginFailures, port="http,https"]
logpath = /var/log/nginx*/*access*.log
bantime = 600 # 10 minutos
maxretry = 6

Bots Maliciosos

[nginx-badbots]
enabled = true
filter = apache-badbots
action = iptables-multiport[name=BadBots, port="http,https"]
logpath = /var/log/nginx*/*access*.log
bantime = 86400 # 1 día
maxretry = 1

Ejecución de Scripts

[nginx-noscript]
enabled = true
action = iptables-multiport[name=NoScript, port="http,https"]
filter = nginx-noscript
logpath = /var/log/nginx*/*access*.log
bantime = 86400 # 1 día
maxretry = 6

Uso del Servidor como Proxy

[nginx-proxy]
enabled = true
action = iptables-multiport[name=NoProxy, port="http,https"]
filter = nginx-proxy
logpath = /var/log/nginx*/*access*.log
bantime = 86400 # 1 día
maxretry = 0

Filtros de Fail2ban

Crea los archivos de filtro correspondientes en /etc/fail2ban/filter.d:

Filtro para Proxy

Archivo: /etc/fail2ban/filter.d/nginx-proxy.conf

[Definition]
failregex = ^<host> -.*GET http.*
ignoreregex =

Filtro para No Script

Archivo: /etc/fail2ban/filter.d/nginx-noscript.conf

[Definition]
failregex = ^<host> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\scgi)
ignoreregex =

Filtro para Autenticación Básica

Archivo: /etc/fail2ban/filter.d/nginx-auth.conf

[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 =

Filtro para Inicio de Sesión

Archivo: /etc/fail2ban/filter.d/nginx-login.conf

[Definition]
failregex = ^<host> -.*POST /sessions HTTP/1\.." 200
ignoreregex =

Protección de WordPress

Para proteger el acceso a WordPress, añade lo siguiente a jail.local:

[nginx-wp-login]
enabled = true
port = http,https
filter = nginx-wp-login
logpath = /ruta/log/wordpress/access.log
maxretry = 3
findtime = 120
bantime = 1200

Crea el archivo de filtro en /etc/fail2ban/filter.d/nginx-wp-login.conf:

[Definition]
failregex = <host>.*] "POST /wp-login.php
ignoreregex =

Notificaciones por Correo

Para recibir notificaciones por correo, añade esto a jail.local:

destemail = [email protected]
mta = sendmail

Asegúrate de tener un servicio de envío de correo configurado, como sendmail, postfix o exim.