dhalドキュメント
9ページ中6ページ同じルートを保護する複数インスタンスは、レート制限と認証失敗のカウンターを共有する必要があります。
bash
npm install ioredists
import 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"
})
});json
{
"rateLimit": { "enabled": true, "store": "redis" }
}アプリケーションと環境ごとに異なるプレフィックスを使用します。Redis または Valkey は認証、ネットワーク分離、利用可能な場合は TLS、適切な eviction ポリシーで保護してください。
Dhal v1 は、rateLimit.store: "redis" を宣言しながら分散 rateLimitStore を渡していない enforcement 構成の起動を拒否します。これにより、グローバル制限が暗黙的にプロセス単位へ弱体化するのを防ぎます。
IP レピュテーション
json
{
"ip": {
"reputation": {
"enabled": true,
"provider": "abuseipdb",
"apiKeyEnv": "ABUSEIPDB_API_KEY",
"minScore": 75,
"cacheTtlSeconds": 86400,
"maxAgeInDays": 30,
"mode": "async",
"timeoutMs": 750
}
}
}API キーは ABUSEIPDB_API_KEY 環境変数に保存します。一般トラフィックでは async を推奨します。blocking は、外部プロバイダーのレイテンシと障害を許容できるルートだけで使用してください。
ブロッキングレピュテーションを有効にした enforcement 構成は、プロバイダーが利用できない場合に起動しません。
独自の IpReputationProvider を createDhal() に渡すこともできます。
チェックリスト
- すべてのインスタンスで制限とシグナルを共有する。
- アプリケーションと環境ごとにプレフィックスを分離する。
- データストアのレイテンシとエラーを監視する。
- ブロック前に障害動作をテストする。
- シークレットを
dhal.jsonに保存しない。