Con el presente instructivo podés agregar una capa más de optimización y seguridad a tu WordPress, en base a la interceptación de ataques de fuerza bruta hacia el administrador.
Es imperativo que, antes de que realices los pasos detallados en este instructivo, cambies el acceso del administrador (wp-admin) a una ruta diferente.
Para ello te puedes apoyar de este instructivo
La búsqueda de accesos hacia el administrador de WordPress se realizará en el archivo de log de Apache, que se encuentra en /var/log/httpd/access_log, por lo que será necesario que el mismo exista y esté funcionando correctamente.
A través de la utilización de un script provisto por Netuy, se podrá realizar una rápida implementación de fail2ban, creando una jail que bloquee una IP durante 5 minutos si esta intenta acceder al administrador de WordPress:
1. Cargar el script
Usando tu editor de texto preferido, creá, editá e insertá el script proporcionado más abajo
nano fail2ban.sh
#!/bin/bash
##
####
#### Script para realizar un setup inicial de fail2ban
####
##
# Captura errores
handle_error() {
echo "An error occurred: $1"
}
trap 'handle_error "Something went wrong!"' ERR
## Instalación
if hostnamectl | grep -iEq "almalinux|centos"; then
yum clean all; yum update -y
yum install epel-release fail2ban -y
systemctl enable fail2ban
elif hostnamectl | grep -iEq "ubuntu|debian"; then
apt update -y
apt install fail2ban -y
systemctl enable fail2ban
fi
## Configuración
# Filtro básico para detener accesos a dominio.tld/wp-admin
touch /etc/fail2ban/filter.d/wordpress_admin.conf
if ! grep -qF "wp-admin" /etc/fail2ban/filter.d/wordpress_admin.conf; then
echo "# filtro para intentos de acceso al admin de WordPress
# Se revisarán los request de tipo GET a /wp-admin
# Se capturarán los logs como el siguiente:
# 127.0.0.1 - - [09/Oct/2025:00:00:00 +0000] \"GET /favicon.ico HTTP/1.1\" 404 196 \"http://127.0.0.1/wp-admin\" \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36\"
[Definition]
failregex = ^ .* \"GET /wp-admin HTTP.*" | tee -a /etc/fail2ban/filter.d/wordpress_admin.conf
fi
# Se carga nueva jail en archivo de customización
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
if ! grep -qF "honeypot-wordpress_admin" /etc/fail2ban/jail.local; then
echo -n "
[honeypot-wordpress_admin]
backend = auto
allowipv6 = auto
enabled = true
port = http,https
filter = wordpress_admin
logpath = /var/log/httpd/access_log
bantime = 5m
findtime = 1m
maxretry = 1
" | tee -a /etc/fail2ban/jail.local
fi
# Se recarga servicio
systemctl reload fail2ban
2. Ejecutar el script
Para poder ejecutar el script primero debés darle permisos de ejecución:
chmod +x fail2ban.sh
Y ahora si, ejecutarlo:
./script.sh
3. Comprobación
Para comprobar que todo salió bien podés ejecutar el siguiente comando, el cuál te dirá si el servicio tiene una jail cargada:
fail2ban-client status
Una ejecución sin errores te devolverá algo similar a lo siguiente
Status
|- Number of jail: 1
`- Jail list: honeypot-wordpress_admin




