Rokad
すべてのドキュメント
dhalドキュメント

レピュテーションと分散デプロイ

Redis または Valkey で状態を共有し、セキュリティ制御の暗黙的な弱体化を防ぎます。

リポジトリを見る
dhalドキュメント
9ページ中6ページ

同じルートを保護する複数インスタンスは、レート制限と認証失敗のカウンターを共有する必要があります。

bash
npm install ioredis
ts
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 構成は、プロバイダーが利用できない場合に起動しません。

独自の IpReputationProvidercreateDhal() に渡すこともできます。

チェックリスト

  • すべてのインスタンスで制限とシグナルを共有する。
  • アプリケーションと環境ごとにプレフィックスを分離する。
  • データストアのレイテンシとエラーを監視する。
  • ブロック前に障害動作をテストする。
  • シークレットを dhal.json に保存しない。