Java(Spring WebFlux)
このガイドでは、アプリケーション向けに Aikido の Zen Firewall をインストールしてセットアップする手順を説明します。以下の手順に従って、アプリケーションを保護してください。
問題や不具合が発生した場合は、遠慮なくサポートチャットまたは Github issues でお問い合わせください。
https://github.com/AikidoSec/firewall-java
Spring WebFlux のサポートは、リアクティブパイプラインにおけるスレッド/コンテキストの挙動のため、現在も改善が続けられています。
要件
- Java 17 以上(Java 21 までテスト済み。同じエージェントで Kotlin/Groovy もサポート)。
- Spring WebFlux 3.x。
- Aikido アカウント と Zen Firewall トークン
インストールと設定
Zen Firewall by Aikido をインストールする
最新の Java エージェントバンドルをダウンロードして展開します:
curl -L https://github.com/AikidoSec/firewall-java/releases/latest/download/zen.zip -o zen.zip unzip zen.zipcurl -L https://github.com/AikidoSec/firewall-java/releases/latest/download/zen.tar.gz -o zen.tar.gz tar -xzf zen.tar.gz展開したフォルダ構造(例:
/opt/zen)はそのまま維持し、プロセスがそのフォルダを読み書きできることを確認してください。ランタイムに Java エージェントを追加します:
-javaagent:/opt/zen/agent.jarレート制限およびユーザーブロック機能を使用するには、プロジェクトに
agent_api.jarを追加します。Gradle:
dependencies { implementation files('/opt/zen/agent_api.jar') }Maven:
<dependency> <groupId>dev.aikido</groupId> <artifactId>agent_api</artifactId> <version>1.0</version> <systemPath>/opt/zen/agent_api.jar</systemPath> </dependency>リクエストのブロックとユーザー識別を有効にする
このミドルウェアを使用すると、レート制限、ユーザー識別、ブロック機能を有効にできます。
Zen Firewall が攻撃をブロックするために、このミドルウェアは必須ではありません。中核となる攻撃防御機能はミドルウェアなしでも動作します。このミドルウェアは追加のリクエストコンテキストを提供し、Zen はそれを レート制限、ユーザーブロック、ボットブロック、国別ブロック、脅威アクターのブロックなどの保護機能に使用します。
アプリケーションでのユーザーの識別方法やリクエストの処理方法に合わせて、サンプルを調整してください。
ShouldBlockRequestをチェックする WebFilter を使用します:@Component public class RatelimitingFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { ShouldBlockRequest.ShouldBlockRequestResult result = ShouldBlockRequest.shouldBlockRequest(); if (result.block()) { byte[] response = "You are blocked by Zen.".getBytes(StandardCharsets.UTF_8); exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN); if (result.data().type().equals("ratelimited")) { String message = "You are rate limited by Zen."; if (result.data().trigger().equals("ip")) { message = message + " (Your IP: " + result.data().ip() + ")"; } response = message.getBytes(StandardCharsets.UTF_8); exchange.getResponse().setStatusCode(HttpStatus.TOO_MANY_REQUESTS); } DataBuffer dataBuffer = exchange.getResponse().bufferFactory().wrap(response); return exchange.getResponse().writeWith(Mono.just(dataBuffer)); } return chain.filter(exchange); } }レート制限フィルターより前に実行されるフィルターでユーザーを設定します:
import dev.aikido.agent_api.SetUser; @Component @Order(1) public class SetUserFilter implements WebFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { SetUser.setUser(new SetUser.UserObject("123", "John Doe")); return chain.filter(exchange); } }Zen Firewall をドライ/検出専用モードで起動する
AIKIDO_TOKEN=AIK_RUNTIME_... AIKIDO_BLOCK=false java -javaagent:/opt/zen/agent.jar -jar build/myapp.jarAikido Zen エージェントがトークンを読み取れるように、トークンを環境変数として設定してください。まだトークンをお持ちでない場合は、こちらの手順に従ってください。
AIKIDO_TOKEN=AIK_RUNTIME_リクエストをブロックせずにアプリが期待どおりに動作することを確認するため、まずはドライモードでアプリを起動することをお勧めします。誤検知を避けるため、Zen Firewall をステージング環境で2週間実行することをお勧めします。
AIKIDO_BLOCK=falseAIKIDO_DEBUG=trueを使用するとデバッグモードが有効になり、エージェントの動作に関するより詳細な情報を確認できます。環境変数の詳細については、こちらをご覧ください: configuration-via-environment-variables.mdアプリをテストする
アプリケーションにアクセスし、いくつかの操作を行うか、いくつかのページを開いてください。Zen はアプリケーション内のルートを自動的に検出します。
Zen は 10 分ごとに Aikido へデータを送信します
Zen アプリケーションの以下のページを確認することで、エージェントが正常に動作していることを確認できます。
- Events: 「Application started」イベントが表示されているはずです。
- Routes: しばらくすると、アプリケーションのルートがメソッド、ルート、リクエストとともにここに表示され始めます。
- Instances: Zen がインストールされているアプリケーションのアクティブなインスタンス数が表示されているはずです。

ダッシュボードでレート制限を設定する
Zen Firewall ミドルウェアを追加したら、ルートをブルートフォース攻撃から保護する機能をテストできます。これは、Aikido Dashboard でレート制限を設定することで行います:
- 作成したアプリをクリックします。
- Routes タブに移動します。
- 制限したいルートを見つけて、Setup rate limiting をクリックします。
- 手順に従ってレート制限を設定します(例:1 分あたり 5 リクエスト)。


レート制限の確認
アプリを起動し、レート制限を設定したルートに 1 分以内に 5 回アクセスしてみてください。5 回目の試行の後、レート制限エラーが返されるはずです:
You are rate limited by Aikido firewall. (Your IP: 1.2.3.4)次のステップ
Zen Firewall のインストールが完了しました。問題が発生した場合や、ご不明な点、機能のご要望がある場合は、お気軽にサポートまでお問い合わせください。
Zen Firewall が提供するさまざまな機能をぜひご覧ください:
- blocking-bot-traffic-with-zen-firewall.md
- blocking-tor-traffic-with-zen-firewall.md
- blocking-users-with-zen-firewall.md
- blocking-known-threat-actors-with-zen-firewall.md
- blocking-traffic-by-country-with-zen-firewall.md
- setting-up-rate-limiting-for-routes.md
- monitor-outbound-domains.md
その他の情報: