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 requestsX-RateLimit-Remaining– Requests restantes en la ventanaX-RateLimit-Reset– Timestamp de reset del contadorRetry-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 temporalpermanentBan(userId, reason)– Baneo permanenteunban(userId)– Levanta baneo manualmentegetBanStatus(userId)– Consulta estado de baneolistBannedUsers()– Lista todos los usuarios baneadosescalateBan(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 temporalmentepermanentBlockIp(ip, reason)– Bloqueo permanenteunblockIp(ip)– Desbloquea IP manualmenteisBlocked(ip)– Verifica si una IP está bloqueada
Whitelist:
addToWhitelist(ip, description)– Añade IP a whitelistremoveFromWhitelist(ip)– Remueve de whitelistisWhitelisted(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 endpointtype– Tipo de limitación aplicadacount– Número de requests en ventana actualwindowStart– Inicio de la ventana de tiempowindowEnd– Fin de la ventana de tiempolastRequest– Timestamp del último request
RateLimitBan Schema
Registro de baneos activos:
userId– Usuario baneado (si aplica)ip– IP baneada (si aplica)reason– Razón del baneolevel– Nivel de escalación (1-4)bannedAt– Fecha de inicio del baneoexpiresAt– Fecha de expiración (null si permanente)bannedBy– Administrador o sistema automáticoinfractions– Array de infracciones que causaron el baneo
IpBlock Schema
Gestión de IPs bloqueadas:
ip– Dirección IPreason– Razón del bloqueoblockedAt– Fecha de bloqueoexpiresAt– Fecha de expiraciónattempts– Número de intentos desde el bloqueometadata– Información adicional (geolocalización, etc.)
BlockedAccess Schema
Registro histórico de accesos bloqueados:
ip– IP que intentó accederuserId– Usuario si estaba autenticadoendpoint– Endpoint al que intentó accederreason– Razón del bloqueotimestamp– Momento del bloqueoheaders– 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 sistemaGET /admin/rate-limit/top-users– Usuarios con más requestsGET /admin/rate-limit/blocked– Lista de IPs/usuarios bloqueados
Gestión de Baneos:
POST /admin/rate-limit/ban– Banear usuario o IP manualmenteDELETE /admin/rate-limit/ban/:id– Levantar baneoGET /admin/rate-limit/ban/:id– Detalles de un baneoPATCH /admin/rate-limit/ban/:id/escalate– Escalar nivel de baneo
Gestión de Whitelist:
POST /admin/rate-limit/whitelist– Añadir a whitelistDELETE /admin/rate-limit/whitelist/:ip– Remover de whitelistGET /admin/rate-limit/whitelist– Lista completa de whitelist
Configuración:
GET /admin/rate-limit/config– Configuración actualPATCH /admin/rate-limit/config– Actualizar límites globalesPOST /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.