Saltar al contenido principal

Rate Limiting

Sistema inteligente de control de tasa que protege la plataforma contra abuso, spam y ataques de fuerza bruta mediante límites configurables y escalación automática de baneos.


Protección Inteligente

El sistema de rate limiting no solo bloquea requests excesivos, sino que aprende del comportamiento de usuarios y escala automáticamente los baneos según la gravedad y frecuencia de las infracciones.


Componentes del Sistema

Enhanced Rate Limit Middleware

Middleware principal que controla la tasa de requests a nivel global:

Características Principales

  • Rate limiting multinivel – Control por IP, usuario, email y endpoint específico
  • Ventanas de tiempo – Períodos configurables para resetear contadores
  • Headers HTTP estándar – Información de límites en cada respuesta
  • Whitelist dinámica – IPs y usuarios exentos de límites
  • Blacklist temporal – Bloqueos automáticos por comportamiento sospechoso

Estrategias de Limitación

Por IP:

  • Limita requests desde una misma IP
  • Útil para proteger contra ataques DDoS
  • Configurable por endpoint

Por Usuario:

  • Control de tasa por usuario autenticado
  • Límites más permisivos para usuarios verificados
  • Tracking individual de uso

Por Email:

  • Protección en endpoints de registro y login
  • Previene spam y creación masiva de cuentas
  • Límites específicos para operaciones de email

Por Endpoint:

  • Límites personalizados por ruta
  • Protección granular de endpoints sensibles
  • Configuración flexible según criticidad

Rate Limit Guard

Guard que permite configuración granular por controlador o método:

Funcionalidades

  • Decoradores personalizados@RateLimit(limit, window, type)
  • Bypass selectivo@SkipRateLimit() para operaciones específicas
  • Configuración por método – Límites diferentes en el mismo controlador
  • Integración con auditoría – Logging automático de bloqueos

Headers de Respuesta

El guard añade headers informativos en cada respuesta:

  • X-RateLimit-Limit – Límite total de requests
  • X-RateLimit-Remaining – Requests restantes en la ventana
  • X-RateLimit-Reset – Timestamp de reset del contador
  • Retry-After – Segundos para reintentar (cuando se bloquea)

Sistema de Baneos

Escalación Automática

El sistema implementa escalación progresiva de baneos según el comportamiento:

Niveles de Baneo

Nivel 1 – Warning (Advertencia)

  • Primera infracción detectada
  • Sin bloqueo, solo logging
  • Usuario recibe notificación
  • Duración: N/A

Nivel 2 – Soft Ban (Baneo Suave)

  • 2-3 infracciones en período corto
  • Bloqueo temporal de 15 minutos
  • Rate limit reducido al 50%
  • Notificación con razón

Nivel 3 – Temporary Ban (Baneo Temporal)

  • 4-5 infracciones o infracciones graves
  • Bloqueo de 1-24 horas según gravedad
  • Acceso completamente bloqueado
  • Revisión manual requerida para levantar

Nivel 4 – Permanent Ban (Baneo Permanente)

  • Infracciones repetidas o actividad maliciosa
  • Bloqueo indefinido
  • Requiere intervención de administrador
  • IP y usuario en blacklist permanente

Recuperación Automática

Los baneos temporales (niveles 2 y 3) se levantan automáticamente después del período configurado. El sistema también implementa reducción de nivel si el usuario mantiene buen comportamiento después de un baneo.

Rate Limit Ban Service

Servicio de gestión de baneos:

Funcionalidades:

  • banUser(userId, duration, reason) – Crea baneo temporal
  • permanentBan(userId, reason) – Baneo permanente
  • unban(userId) – Levanta baneo manualmente
  • getBanStatus(userId) – Consulta estado de baneo
  • listBannedUsers() – Lista todos los usuarios baneados
  • escalateBan(userId) – Incrementa nivel de baneo

Tracking de Infracciones:

  • Registro detallado de cada infracción
  • Historial de baneos por usuario
  • Razones documentadas
  • Metadata de contexto (IP, endpoint, timestamp)

Gestión de IPs

IP Block Service

Servicio centralizado de bloqueo de IPs:

Funcionalidades Principales

Bloqueo de IPs:

  • blockIp(ip, duration, reason) – Bloquea IP temporalmente
  • permanentBlockIp(ip, reason) – Bloqueo permanente
  • unblockIp(ip) – Desbloquea IP manualmente
  • isBlocked(ip) – Verifica si una IP está bloqueada

Whitelist:

  • addToWhitelist(ip, description) – Añade IP a whitelist
  • removeFromWhitelist(ip) – Remueve de whitelist
  • isWhitelisted(ip) – Verifica si IP está en whitelist
  • IPs en whitelist nunca son bloqueadas

Tracking:

  • Registro de intentos fallidos por IP
  • Detección de patrones sospechosos
  • Alertas automáticas para IPs problemáticas
  • Geolocalización de IPs bloqueadas

Filtered IP Guard

Guard que valida IPs antes de procesar requests:

  • Verifica contra blacklist antes de cualquier validación
  • Permite paso prioritario para IPs en whitelist
  • Integración con servicios de geolocalización
  • Bloqueo automático de rangos de IPs

Schemas de Rate Limiting

RateLimit Schema

Almacena contadores de rate limiting:

  • identifier – IP, userId, email o endpoint
  • type – Tipo de limitación aplicada
  • count – Número de requests en ventana actual
  • windowStart – Inicio de la ventana de tiempo
  • windowEnd – Fin de la ventana de tiempo
  • lastRequest – Timestamp del último request

RateLimitBan Schema

Registro de baneos activos:

  • userId – Usuario baneado (si aplica)
  • ip – IP baneada (si aplica)
  • reason – Razón del baneo
  • level – Nivel de escalación (1-4)
  • bannedAt – Fecha de inicio del baneo
  • expiresAt – Fecha de expiración (null si permanente)
  • bannedBy – Administrador o sistema automático
  • infractions – Array de infracciones que causaron el baneo

IpBlock Schema

Gestión de IPs bloqueadas:

  • ip – Dirección IP
  • reason – Razón del bloqueo
  • blockedAt – Fecha de bloqueo
  • expiresAt – Fecha de expiración
  • attempts – Número de intentos desde el bloqueo
  • metadata – Información adicional (geolocalización, etc.)

BlockedAccess Schema

Registro histórico de accesos bloqueados:

  • ip – IP que intentó acceder
  • userId – Usuario si estaba autenticado
  • endpoint – Endpoint al que intentó acceder
  • reason – Razón del bloqueo
  • timestamp – Momento del bloqueo
  • headers – Headers del request bloqueado

Rate Limit Controller

Controlador administrativo para gestión de rate limiting:

Endpoints de Administración

Estadísticas Globales:

  • GET /admin/rate-limit/stats – Estadísticas generales del sistema
  • GET /admin/rate-limit/top-users – Usuarios con más requests
  • GET /admin/rate-limit/blocked – Lista de IPs/usuarios bloqueados

Gestión de Baneos:

  • POST /admin/rate-limit/ban – Banear usuario o IP manualmente
  • DELETE /admin/rate-limit/ban/:id – Levantar baneo
  • GET /admin/rate-limit/ban/:id – Detalles de un baneo
  • PATCH /admin/rate-limit/ban/:id/escalate – Escalar nivel de baneo

Gestión de Whitelist:

  • POST /admin/rate-limit/whitelist – Añadir a whitelist
  • DELETE /admin/rate-limit/whitelist/:ip – Remover de whitelist
  • GET /admin/rate-limit/whitelist – Lista completa de whitelist

Configuración:

  • GET /admin/rate-limit/config – Configuración actual
  • PATCH /admin/rate-limit/config – Actualizar límites globales
  • POST /admin/rate-limit/reset – Resetear contadores

Cleanup Task

Tarea programada de mantenimiento:

Rate Limit Cleanup Task

Operaciones automáticas:

  • Limpieza de contadores expirados – Elimina ventanas de tiempo antiguas
  • Levantamiento de baneos – Desbloquea usuarios/IPs cuando expira el período
  • Reducción de niveles – Baja nivel de escalación para usuarios con buen comportamiento
  • Archivado de histórico – Mueve registros antiguos a archivo
  • Optimización de índices – Mantiene performance de queries

Programación:

  • Ejecuta cada 15 minutos
  • Procesa en lotes para eficiencia
  • Logging de operaciones realizadas
  • Notificaciones de anomalías detectadas

Integración con Auditoría

El sistema de rate limiting está completamente integrado con el sistema de auditoría:

Eventos Registrados

  • Rate limit exceeded – Cuando se excede el límite
  • Automatic ban triggered – Baneo automático activado
  • Manual ban – Baneo manual por administrador
  • Ban lifted – Levantamiento de baneo
  • Whitelist added – IP añadida a whitelist
  • Suspicious pattern detected – Patrón sospechoso identificado

Alertas Automáticas

Discord/Slack notifications:

  • Baneos automáticos de nivel 3+
  • Patrones de ataque detectados
  • Múltiples IPs baneadas en corto período
  • Usuarios con comportamiento anómalo

Configuración Flexible

El sistema permite configuración granular a múltiples niveles:

  • Global – Límites base para toda la plataforma
  • Por endpoint – Límites específicos para rutas sensibles
  • Por usuario – Límites personalizados para usuarios premium o sospechosos
  • Por rol – Límites diferentes según nivel de acceso

Esta flexibilidad permite balancear seguridad y experiencia de usuario según el contexto.