Las instancias que protegen las mismas rutas deben compartir contadores de límites y fallos de autenticación.
npm install ioredisimport Redis from "ioredis";
import { RedisRateLimitStore, RedisSignalStore, createDhal } from "@rokadhq/dhal";
const redis = new Redis(process.env.REDIS_URL!);
const protection = createDhal({
configPath: "dhal.json",
rateLimitStore: new RedisRateLimitStore(redis, {
prefix: "production:dhal:rate-limit"
}),
signalStore: new RedisSignalStore(redis, {
prefix: "production:dhal:signals"
})
});{
"rateLimit": { "enabled": true, "store": "redis" }
}Usa prefijos diferentes por aplicación y entorno. Protege Redis o Valkey con autenticación, aislamiento de red, TLS cuando esté disponible y una política de eviction adecuada.
Dhal v1 rechaza el arranque en modo de aplicación si se declara Redis sin proporcionar un rateLimitStore distribuido. Así evita degradar silenciosamente un límite global a contadores por proceso.
Reputación IP
{
"ip": {
"reputation": {
"enabled": true,
"provider": "abuseipdb",
"apiKeyEnv": "ABUSEIPDB_API_KEY",
"minScore": 75,
"cacheTtlSeconds": 86400,
"maxAgeInDays": 30,
"mode": "async",
"timeoutMs": 750
}
}
}Guarda la clave en la variable ABUSEIPDB_API_KEY. Prefiere async para tráfico general. Usa blocking solo cuando la ruta tolere la latencia y el fallo de la dependencia.
Una configuración aplicada con reputación bloqueante no arranca si el proveedor no está disponible.
También puedes pasar una implementación de IpReputationProvider a createDhal() y sobrescribir la reputación por perfil de ruta.
Lista de control
- Comparte límites y señales entre todas las instancias.
- Separa prefijos por aplicación y entorno.
- Monitoriza latencia y errores del datastore.
- Prueba los fallos antes de aplicar bloqueos.
- Mantén credenciales fuera de
dhal.json.