Drupal Perimeter Defence
Un módulo de seguridad que bloquea automáticamente direcciones IP que realizan solicitudes sospechosas a URLs inexistentes que coinciden con patrones configurables, protegiendo los sitios Drupal de hackers y bots.
perimeter
Install
composer require 'drupal/perimeter:^3.0'
Overview
Drupal Perimeter Defence proporciona defensa perimetral básica para sitios Drupal bloqueando automáticamente direcciones IP que envían solicitudes sospechosas. El módulo monitorea las respuestas 404 (Página no encontrada) y verifica las URLs solicitadas contra una lista configurable de patrones de expresiones regulares. Cuando se encuentra una coincidencia, la IP solicitante es bloqueada inmediatamente usando el módulo Ban del núcleo de Drupal.
Este módulo es particularmente útil cuando tu sitio recibe numerosas solicitudes dirigidas a plataformas que no son Drupal, como páginas de administración de WordPress (wp-admin, wp-login), archivos ASP.NET (.aspx, .asp), archivos JSP (.jsp), u otros patrones sospechosos comúnmente utilizados por escáneres automatizados y bots.
El módulo está optimizado para rendimiento y diseñado para ser activado cuando un sitio Drupal está siendo activamente atacado. Incluye protección contra inundaciones para permitir un número configurable de intentos antes del bloqueo, lista blanca de IPs para prevenir el bloqueo de usuarios o servicios legítimos, e integración con el módulo Honeypot para protección adicional contra spam.
Features
- Bloqueo automático de IP basado en patrones regex de URL configurables para solicitudes 404 sospechosas
- Patrones preconfigurados para vectores de ataque comunes incluyendo WordPress (wp-admin, wp-login), ASP.NET (.aspx, .asp), JSP (.jsp) y otras URLs maliciosas
- Soporte de lista blanca de IP con notación CIDR (ej., 192.168.1.0/24) para excluir IPs y rangos de confianza del bloqueo
- Control de umbral de inundación que permite un número configurable de intentos antes de bloquear una dirección IP
- Ventana de tiempo de inundación configurable para controlar cuánto tiempo persiste el contador de intentos
- Integración con el módulo Ban del núcleo de Drupal para gestionar direcciones IP bloqueadas
- Integración con el módulo Honeypot - bloquea automáticamente IPs que activan la protección basada en tiempo de honeypot (excepto para formularios de inicio de sesión)
- Bypass basado en permisos que permite a usuarios de confianza acceder a URLs bloqueadas sin ser bloqueados
- Registro detallado de IPs bloqueadas incluyendo URL de origen, referrer e información del agente de usuario
- Compatible con Drupal 10 y 11
Use Cases
Protección contra escáneres de vulnerabilidades de WordPress
Muchos bots automatizados escanean sitios web buscando instalaciones de WordPress solicitando URLs como /wp-admin, /wp-login.php, /wp-content/, etc. Cuando estos bots atacan un sitio Drupal, generan carga innecesaria del servidor con errores 404 repetidos. Al habilitar Perimeter Defence con los patrones predeterminados, estos bots son bloqueados inmediatamente después de su primera solicitud, previniendo más intentos de escaneo y reduciendo la carga del servidor.
Bloqueo de intentos de exploit específicos de tecnología
Los atacantes frecuentemente sondean sitios web con URLs que contienen extensiones .aspx, .asp o .jsp buscando servidores de aplicaciones Microsoft IIS o Java vulnerables. En un servidor Linux/Drupal, estas solicitudes son claramente maliciosas. Perimeter Defence bloquea automáticamente estas IPs de sondeo, protegiendo tu servidor de ataques posteriores.
Implementación gradual de bloqueo con umbral de inundación
Para sitios donde usuarios legítimos podrían ocasionalmente activar un patrón bloqueado accidentalmente, establece el umbral de inundación a un valor como 3. Esto permite a los usuarios cometer algunos errores antes de ser bloqueados. Combinado con una ventana de inundación apropiada (ej., 3600 segundos/1 hora), esto proporciona un equilibrio entre seguridad y usabilidad.
Protección de IPs de CDN o servidor proxy
Si tu sitio usa un CDN o balanceador de carga, añade los rangos de IP del CDN a la lista blanca para prevenir el bloqueo accidental de tu infraestructura. Por ejemplo, añade los rangos de IP de Cloudflare en notación CIDR para asegurar que las solicitudes del CDN nunca sean bloqueadas.
Integración con Honeypot para protección contra spam en formularios
Cuando se usa junto con el módulo Honeypot, Perimeter Defence proporciona protección adicional bloqueando IPs que repetidamente fallan la protección basada en tiempo de Honeypot. Esto es efectivo contra bots de spam automatizados que envían formularios demasiado rápido.
Protección de sitios de staging o desarrollo
Los sitios de desarrollo y staging son frecuentemente descubiertos por bots y atacados. Habilita Perimeter Defence para bloquear automáticamente intentos de reconocimiento, reduciendo el ruido en los registros y protegiendo datos sensibles de desarrollo.
Tips
- Siempre prueba el comportamiento del módulo desde una IP o dispositivo diferente antes de desplegar a producción, y asegúrate de tener acceso a la base de datos para eliminar tu IP de los bloqueos si es necesario
- Comienza con un umbral de inundación más alto (ej., 2-3) en sitios de producción para evitar bloquear usuarios legítimos que podrían accidentalmente activar un patrón
- Añade los rangos de IP de tu oficina, IPs de CDN e IPs de servicios de monitoreo a la lista blanca antes de habilitar el módulo
- Monitorea los Mensajes de registro recientes de tu sitio regularmente para ver qué IPs están siendo bloqueadas y ajusta los patrones según corresponda
- Usa los patrones predeterminados como punto de partida y añade patrones específicos del sitio basándote en tu análisis de registros
- El módulo es más efectivo contra escáneres automatizados; atacantes sofisticados pueden usar rotación de IP
- Considera combinar con otros módulos de seguridad como Honeypot, Antibot y CAPTCHA para protección integral
Technical Details
Admin Pages 1
/admin/config/system/perimeter
Configura los patrones de URL que activan bloqueos de IP, gestiona listas blancas de IP y establece umbrales de protección contra inundaciones para el módulo Perimeter Defence.
Permissions 3
Hooks 2
hook_honeypot_reject
Hook de integración con el módulo Honeypot. Cuando Honeypot rechaza un envío de formulario debido a protección basada en tiempo (tipo honeypot_time), este hook bloquea la IP que envió. Excluye formularios de inicio de sesión de usuario y UID 1 del bloqueo para prevenir bloqueos accidentales.
hook_help
Proporciona texto de ayuda para el módulo en la página de Ayuda, explicando el propósito del módulo y enlazando a la documentación.
Troubleshooting 5
No puedes acceder a la interfaz de administración de Drupal para desbloquearte. Usa Drush para eliminar tu IP de la base de datos: drush sql:query "DELETE FROM ban_ip WHERE ip='TU.DIRECCION.IP';" Alternativamente, accede a tu base de datos directamente vía phpMyAdmin o línea de comandos y elimina tu IP de la tabla ban_ip.
Añade sus direcciones IP o rangos de IP a la lista blanca en la configuración de Perimeter. También puedes aumentar el umbral de inundación para permitir algunas coincidencias accidentales antes del bloqueo. Considera revisar tus patrones de URL para asegurar que no coincidan con URLs legítimas.
Verifica que el módulo esté habilitado y que el módulo Ban esté funcionando. Comprueba que tus patrones de URL sean regex válidos (incluyendo delimitadores como /patrón/). Las páginas en caché no activarán bloqueos, así que asegúrate de probar con solicitudes sin caché. Revisa los Mensajes de registro recientes para cualquier aviso de Perimeter.
Asegúrate de que el usuario esté logueado cuando accede a las URLs bloqueadas. El permiso de bypass solo funciona para sesiones autenticadas. Los usuarios anónimos no pueden tener permisos de bypass.
Recuerda que las solicitudes de páginas en caché no activan la lógica de bloqueo. Cuando pruebes el umbral de inundación, debes solicitar diferentes URLs cada vez (ej., /wp-admin/a, /wp-admin/b, /wp-admin/c). Las solicitudes repetidas a la misma URL pueden servirse desde caché y no incrementarán el contador de inundación.
Security Notes 6
- El permiso de bypass está marcado como 'acceso restringido' - solo concédelo a roles de alta confianza
- Nunca concedas los permisos 'administer perimeter url patterns' o 'administer perimeter ip whitelist' a usuarios no confiables ya que podrían deshabilitar la protección
- El módulo registra información detallada sobre IPs bloqueadas incluyendo referrer y agente de usuario - revisa los registros regularmente para detectar patrones de ataque
- Los bloqueos de IP se almacenan en la base de datos y persisten hasta que se eliminen manualmente vía la interfaz del módulo Ban o la base de datos
- Cuando uses detrás de un proxy o CDN, asegúrate de que Drupal esté configurado para detectar la IP correcta del cliente (trusted_host_patterns y configuraciones de proxy)
- El módulo protege contra reconocimiento y ataques automatizados pero debe ser parte de una estrategia de seguridad integral incluyendo actualizaciones regulares, contraseñas fuertes y configuración adecuada del servidor