Monitor de seguridad
¿Para qué sirve?
Un sitio publicado en internet recibe intentos de ataque todos los días, aunque nadie lo conozca: hay programas que recorren direcciones al azar probando contraseñas y buscando descuidos. Casi siempre no consiguen nada y nadie se entera de que ocurrió.
Este módulo mira las visitas que llegan y reconoce las que tienen forma de ataque:
- Fuerza bruta en el acceso: alguien probando contraseñas una tras otra.
- Escaneo de direcciones: pedidos a rutas que tu sitio no tiene y que sólo
buscan las herramientas de ataque (
/wp-admin,/phpmyadmin,/.env). - Intentos de inyección: fragmentos de código metidos en la dirección para leer tu base de datos o ejecutar algo en el navegador de un visitante.
- Herramientas de escaneo que se identifican por su nombre.
- Rarezas en las cuentas del panel: un administrador que aparece de golpe desde otra dirección, o la misma cuenta activa desde dos lugares a la vez.
Cada hallazgo queda registrado con la hora, la dirección de origen y exactamente qué se pidió, y —según cómo lo configures— te llega un aviso y la dirección queda bloqueada.
Esto mira lo que llega a tu aplicación. Los ataques que tu servidor corta antes (una petición a un archivo bloqueado, por ejemplo) no aparecen aquí, porque nunca llegaron. Es una capa más, no la única.
¿Cuándo lo necesitas?
- Tu sitio está publicado en internet y quieres saber si alguien lo está golpeando.
- Alguien te reportó accesos raros y necesitas ver qué pasó y desde dónde.
- Quieres cerrarle la puerta a una dirección concreta sin tocar el servidor.
Si tu instalación es interna y no se alcanza desde internet, este módulo te dirá muy poco: casi todo lo que detecta viene de afuera.
Cómo activarlo
En el menú lateral: Agregar Sección → Tipo: Plugin → Monitor de seguridad. También puedes recuperarlo desde Configuración → Módulos.
Al agregarlo se crean sus tablas y se siembran las diez reglas de fábrica, ya listas. Hasta que lo agregues, el módulo no hace nada: no vigila, no registra y no consume recursos.
Configuración inicial
El módulo arranca en modo alerta: registra y avisa, pero no bloquea a nadie. Es a propósito — una regla mal calibrada bloqueando gente el primer día es peor que el problema que resuelve.
La configuración vive en plugins/security-monitor/config.php (cópialo desde
config.example.php):
| Ajuste | Para qué sirve |
|---|---|
mode | alert registra y avisa; enforce además bloquea cuando una regla lo pide. |
allowlist_ips | Direcciones que nunca se inspeccionan. Pon aquí la tuya: es el seguro contra quedarte fuera. |
trusted_proxies | Sólo si tu sitio está detrás de Cloudflare o de otro intermediario. Ver más abajo. |
alerts.min_severity | Desde qué gravedad se avisa. Por defecto medium. |
alerts.throttle_minutes | Cada cuánto se repite un aviso de la misma regla y la misma dirección. Un escaneo produce miles de hallazgos; sin esto el aviso sería el ataque. |
alerts.notify_admins | Qué cuentas reciben el aviso. Vacío significa todos los administradores. |
alerts.email_to | Correos de fuera del panel (una casilla de guardia, por ejemplo). |
retention_days | Cuántos días de historial se conservan. Por defecto 30. |
Sin configurar trusted_proxies, el módulo verá la dirección del
intermediario en vez de la del visitante, y los bloqueos no servirán de nada.
Peor: si aceptara esa información de cualquiera, un atacante podría escribir
la dirección que quisiera y saltarse el bloqueo. Por eso viene vacío y hay
que declarar a mano qué direcciones tienen permiso para decir quién es el
visitante real.
Cómo se usa día a día
La sección tiene cuatro pestañas.
Resumen
Cuatro cifras de las últimas 24 horas —eventos, gravedad alta, crítica y direcciones bloqueadas— y la lista de las direcciones con más hallazgos, con un botón para bloquear cada una al instante.
Timeline
Todo lo que pasó, de lo más reciente a lo más viejo, con filtros por dirección, gravedad, regla y fechas. La lista se recorre por páginas: el número al lado del título es el total del filtro, no el de la página que estás viendo.
La lupa de cada fila abre el detalle: qué se pidió exactamente, con qué parámetros, qué navegador dijo ser y si se avisó a alguien. Es lo que necesitas para decidir si fue un ataque o un falso positivo.
IPs bloqueadas
Quién está bloqueado, desde cuándo, hasta cuándo y por qué. Puedes levantar un bloqueo o poner uno a mano, con duración o permanente.
Reglas
Las diez reglas, cada una con su explicación. De cada una decides:
- Vigilar esto: encendido o apagado.
- Gravedad: cuánto pesa, y por lo tanto si genera aviso.
- Qué se hace:
Registrar(sólo queda anotado),Alertar(además avisa) oBloquear(además corta el acceso, y sólo si el modo global esenforce). - Parámetros: cuántos intentos, en cuánto tiempo, qué patrones.
Deja el módulo en modo alerta una o dos semanas. Mira el Timeline: si lo que
sale son ataques de verdad y no visitas legítimas, recién ahí pon enforce en
la configuración y marca Bloquear en las reglas que te convencieron.
Se conecta con
- Notificaciones: los avisos llegan a la campana del panel y por correo, y cada persona elige cómo los quiere en Notificaciones → Mis preferencias.
- Configuración → Correo: el texto del aviso es una plantilla editable, como todos los demás correos del sistema.
- Roles y Permisos: quién puede abrir la sección se decide ahí, como en cualquier otro módulo.
Preguntas frecuentes
¿Va a hacer más lento mi sitio? Mientras no agregues la sección, el módulo no se ejecuta en absoluto. Una vez agregado, revisa cada visita contra las reglas y sólo escribe en la base cuando encuentra algo; las imágenes, hojas de estilo y demás archivos ni se miran.
¿Puede dejarme fuera de mi propio panel?
En modo alerta, no: no bloquea a nadie. En modo enforce sí podría, y por eso
existe allowlist_ips — pon ahí tu dirección antes de cambiar el modo. Si aun
así te pasara, el bloqueo se borra desde la base de datos (tabla sec_bans) o
volviendo el modo a alert.
Un administrador cambió de red y saltó una alerta. ¿Está mal? No, está bien: la regla avisa, no acusa. Cambiar de casa a la oficina la dispara. Si te molesta, bájale la gravedad o apágala.
¿Bloquea al atacante o a toda la oficina? Bloquea una dirección. Si varias personas comparten la misma conexión, comparten la dirección. Por eso las reglas que bloquean se activan de a una y con calma.
¿Cuánto historial guarda?
Treinta días por defecto (retention_days). La limpieza se hace sola cuando
alguien abre la sección, como mucho una vez por hora. Los bloqueos no se borran:
son decisiones, no registros.
¿Sirve contra un ataque de denegación de servicio? No. Eso se corta antes de llegar a tu aplicación, en el hosting o en un servicio como Cloudflare. Este módulo mira el contenido de las visitas, no su volumen.
¿Qué sigue?
- Usuarios, roles y permisos — quién entra a qué.
- Notificaciones — cómo se reparten los avisos.
- Copias de seguridad — la otra mitad de dormir tranquilo.