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.