Dhalは、Node.js向けのアプリケーションネイティブWAFとリクエストセキュリティ層です。バージョン1.1は、Express、Fastify、NestJS、Koa、Node.js上のHono、node:httpサーバーに対応します。
DhalはCDN、エッジ、ネットワーク、認証、認可、入力検証を補完します。大規模DDoS対策やインフラセキュリティを置き換えるものではありません。
要件
- Node.js 20以降
- npm互換の最新パッケージマネージャー
- 複数インスタンスで同じルートを保護する場合はRedisまたはValkey
インストール
npm install @rokadhq/dhalnpmパッケージは@rokadhq/dhal、CLIコマンドはdhal、既定の設定ファイルはdhal.jsonです。
推奨: ガイド付き導入
アプリケーションのルートでdhal addを実行します。
npx dhal add既定では読み取り専用です。フレームワークとパッケージマネージャーを検出し、監視モード設定をプレビューし、レビュー可能な統合モジュールと正確な登録手順を提示します。
内容を確認した後、提案されたファイルを作成します。
npx dhal add --writeDhalは既存のアプリケーションコードを自動変更しません。--forceを指定しない限り既存の出力ファイルも上書きしません。
node:httpアプリケーションは明示的に指定できます。
npx dhal add --framework node-http --write手動設定
汎用の初期設定を直接作成することもできます。
npx dhal init生成された設定はmonitorモードで開始し、トラフィックを拒否せずにブロック候補を記録します。
フレームワーク入口
Express
import { dhal } from "@rokadhq/dhal/express";
app.use(express.json({ limit: "1mb" }));
app.use(dhal({ configPath: "dhal.json" }));Fastify
import { dhalFastify } from "@rokadhq/dhal/fastify";
await app.register(dhalFastify({ configPath: "dhal.json" }));NestJS
import { installDhalNest } from "@rokadhq/dhal/nest";
const app = await NestFactory.create(AppModule);
await installDhalNest(app, { configPath: "dhal.json" });
await app.listen(3000);Nestアプリ作成後、app.listen()の前にDhalを導入します。アダプターはExpressまたはFastifyを自動検出します。
Koa
import { dhalKoa } from "@rokadhq/dhal/koa";
app.use(dhalKoa({ configPath: "dhal.json" }));Dhalは、検査後にのみ実行すべきルートやミドルウェアより前に登録します。
Node.js上のHono
import { dhalHono } from "@rokadhq/dhal/hono";
app.use("*", dhalHono({ configPath: "dhal.json" }));Honoアダプターは標準Web RequestとResponseを使用し、Node.jsランタイムでサポートされます。
node:http
import { createNodeHttpDhal } from "@rokadhq/dhal/node-http";
const protection = createNodeHttpDhal({ configPath: "dhal.json" });ライフサイクルやIDの完全な例は、フレームワーク統合の章を参照してください。
適用前の検証と修復
npx dhal test-config
npx dhal migrate --check
npx dhal doctor
npx dhal doctor --fix --dry-run
npx dhal readiness --productiondoctor --fixは保守的な機械修復だけを実行します。不足する監視モード設定の作成や互換設定のバックアップ付き移行が可能ですが、ブロック、プロキシ信頼、Redis、テレメトリ、外部レピュテーションを自動有効化しません。
安全な導入手順:
- 全体を
monitorモードでデプロイします。 - 既知の正常トラフィックを再生し、
wouldBlockイベントを確認します。 - 高リスクの選択ルートだけで
blockを有効にします。 - レイテンシ、誤検知、依存サービスの可用性を確認します。
- 適用範囲を段階的に広げます。
動作モード
| モード | 動作 |
|---|---|
off | 検査を無効にします。 |
monitor | リクエストを許可し、ブロック候補を記録します。 |
block | 適用中の制御に一致するリクエストを拒否します。 |
strict | 内部セキュリティ評価が失敗した場合もブロックします。 |
ルートプロファイルはグローバルモードを上書きでき、段階的な適用が可能です。