Seishin Docs AI
Discord PortfolioBuildBytGithub
  • Bienvenido
  • Proyectos
    • Nebura Client
      • Modulos
        • Discord Client
          • Economia
          • Sistemas
          • Juegos
            • Sistema de Duelos
            • Sistema de Inventario y Tienda
      • API
        • Seguridad
          • IP Administrador
        • Routes API
        • RateLimit
  • TUTORIALES
    • Discord con TypeScript y Node.js
    • Librerias NPM con Typescript
  • LEGAL
    • Términos y Condiciones
    • Actualizaciones
  • EXTRAS
    • Github
Powered by GitBook
On this page
  • Visión General
  • Diagrama de Clase
  • Configuración
  • Métodos
  • Métodos Internos
  • Ejemplos de API
  • Manejo de Errores
  • Monitoreo
Edit on GitHub
  1. Proyectos
  2. Nebura Client
  3. API
  4. Seguridad

IP Administrador

Control de IPs bloqueadas, cors y permisos de usuario

Visión General

La clase IPBlocker es un singleton que gestiona el bloqueo de direcciones IP para una aplicación Express.js. Proporciona:

  • Bloqueo y desbloqueo de IPs

  • Expiración automática de bloqueos

  • Seguimiento de intentos fallidos

  • Notificaciones por webhook

  • Middleware para bloquear peticiones

Diagrama de Clase

classDiagram
    class IPBlocker {
        -blockedIPs: Set~string~
        -lastUpdate: Date
        -notifications: Object
        +getInstance(): IPBlocker
        +blockIP(ipAddress, userId, reason?, expiresAt?): Promise~void~
        +unblockIP(ipAddress): Promise~void~
        +isIPBlocked(ipAddress): boolean
        +getMiddleware(): Function
        +getBlockedIPs(page?, limit?): Promise~BlockedIP[]~
        +recordFailedAttempt(ipAddress): Promise~void~
        -loadBlockedIPs(): Promise~void~
        -autoUnblockExpiredIPs(): Promise~void~
    }
    
    IPBlocker --> Notification
    IPBlocker --> main.prisma

Configuración

La clase usa configuración de config.moderation.notifications:

{
  notifications: {
    webhooks: {
      token: "TOKEN_DE_TU_WEBHOOK", // Requerido para notificaciones
      url: "URL_WEBHOOK"
    }
  }
}

Métodos

getInstance()

Obtiene la instancia singleton de IPBlocker.

Retorna: IPBlocker - La instancia singleton

Ejemplo:

const ipBlocker = IPBlocker.getInstance();

blockIP(ipAddress, userId, reason?, expiresAt?)

Bloquea una dirección IP con razón y expiración opcionales.

Esquema de Base de Datos:

{
  ipAddress: String,
  reason: String?,
  blockedBy: String,
  expiresAt: DateTime?,
  isActive: Boolean,
  blockedLicenseId: String
}

Carga de Notificación:

{
  title: "IP Bloqueada",
  description: `La dirección IP ${ipAddress} ha sido bloqueada.`,
  color: "#FF0000",
  fields: [
    { name: "Bloqueado Por", value: userId, inline: true },
    { name: "Razón", value: reason || "No especificada", inline: true },
    { name: "Expira En", value: expiresAt?.toISOString() || "Indefinido", inline: true }
  ]
}

unblockIP(ipAddress)

Desbloquea una dirección IP.

Carga de Notificación:

{
  title: "IP Desbloqueada",
  description: `La dirección IP ${ipAddress} ha sido desbloqueada.`,
  color: "#00FF00",
  fields: [
    { name: "Dirección IP", value: ipAddress, inline: true }
  ]
}

isIPBlocked(ipAddress)

Verifica si una dirección IP está bloqueada.

Retorna: boolean - True si está bloqueada

getMiddleware()

Retorna middleware de Express para bloquear peticiones de IPs bloqueadas.

Respuesta del Middleware (403):

{
  "error": "Acceso denegado",
  "reason": "Tu dirección IP ha sido bloqueada"
}

getBlockedIPs(page?, limit?)

Obtiene lista paginada de IPs bloqueadas.

Retorna: Promise<BlockedIP[]> - Array de registros de IPs bloqueadas

recordFailedAttempt(ipAddress)

Registra un intento fallido y bloquea automáticamente después de 5 intentos en 24 horas.

Criterios de Bloqueo Automático:

  • 5+ intentos fallidos en 24 horas

  • Duración de bloqueo: 24 horas

Carga de Notificación:

{
  title: "Bloqueo Automático de IP",
  description: `La dirección IP ${ipAddress} ha sido bloqueada automáticamente...`,
  color: "#FFA500",
  fields: [
    { name: "Dirección IP", value: ipAddress, inline: true },
    { name: "Razón", value: "Múltiples intentos fallidos", inline: true },
    { name: "Duración del Bloqueo", value: "24 horas", inline: true }
  ]
}

Métodos Internos

loadBlockedIPs()

Carga IPs bloqueadas activas desde la base de datos a memoria. Se ejecuta:

  • Al inicializar

  • Cada hora (programado)

autoUnblockExpiredIPs()

Desbloquea automáticamente IPs con bloqueos expirados. Se ejecuta cada 10 minutos.

Ejemplos de API

Bloquear IP

await ipBlocker.blockIP(
  "192.168.1.1", 
  "usuario123", 
  "Violaciones repetidas", 
  new Date(Date.now() + 86400000) // 24 horas
);

Obtener IPs Bloqueadas

const blockedIPs = await ipBlocker.getBlockedIPs(1, 10);

Uso del Middleware

app.use(ipBlocker.getMiddleware());

Manejo de Errores

Todos los métodos incluyen bloques try-catch y registran errores usando:

logWithLabel("api", `[IPBlocker] Mensaje de error`);

Monitoreo

El sistema registra eventos clave:

  • Bloqueos/desbloqueos de IPs

  • Intentos fallidos

  • Bloqueos automáticos

  • Estado de carga en memoria

Ejemplo de registro:

[IPBlocker] 15 IPs están bloqueadas y cargadas en memoria.
  🔹   Última actualización: 2023-05-15T12:34:56.789Z
PreviousSeguridadNextRoutes API

Last updated 28 days ago