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

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

Loading

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 = direccion@example.local
mta = sendmail

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