日本語

ASP.NET Core

このガイドでは、アプリケーション向けに Aikido の Zen Firewall をインストールしてセットアップする手順を説明します。以下の手順に従って、アプリケーションを保護してください。

問題や不具合が発生した場合は、遠慮なくサポートチャットまたは Github issues でお問い合わせください。

https://github.com/AikidoSec/firewall-dotnet

要件

インストールと設定

  1. Zen Firewall by Aikidoをインストールする

    プロジェクトが .NET 6、7、8、9、または 10 で動作していることを確認してください。また、Zen Firewall がルート情報を正しく解決できるように、アプリケーションでエンドポイントルーティング(UseRouting)を使用する必要があります。UseMvc などのレガシーなルーティングミドルウェアはサポートされていません。ASP.NET Core の移行ガイドはこちらをご覧ください。

    NuGet からパッケージをインストールします:

    dotnet add package Aikido.Zen.DotNetCore

    appsettings.json でトークンを設定します(または環境変数として AIKIDO_TOKEN を設定します):

    {
      "Aikido": {
        "AikidoToken": "your-api-key"
      }
    }

    スタートアップ設定でZenを有効にします:

    Program.cs
    using Aikido.Zen.DotNetCore;
    using Microsoft.AspNetCore.HttpOverrides;
    
    public void ConfigureServices(IServiceCollection services)
    {
        // other services
    
        services.AddZenFirewall();
    
        // other services
    }
    
    public void Configure(IApplicationBuilder app)
    {
        // Make sure to allow x-forwarded-for header if your app is behind a proxy
        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });
    
        // other middleware
        // app.UseRouting()
        // place this after .UseRouting(), or after authorization,
        // but high enough in the pipeline to catch all requests
        app.UseZenFirewall();
    
        // other middleware like app.UseEndpoints() or app.MapControllers()
    }
    
  2. ユーザー識別とブロックを有効にする

    このミドルウェアを使用すると、現在のユーザーを識別し、ユーザーブロックなどのユーザーベースの機能を有効にできます。

    Zen Firewall が攻撃をブロックするために、このミドルウェアは必須ではありません。コアとなる攻撃防御機能は、このミドルウェアなしでも動作します。どのユーザーがリクエストを送信しているかを Zen に認識させたい場合に、このミドルウェアを追加してください。

    アプリケーションでのユーザーの識別方法に合わせて、例を調整してください。

    Program.cs
    
    // authentification middleware
    
    app.Use((context, next) => {
         // unique id for the user
         var id = context.User?.Identity?.GetUserId();
         // name (optional)
         var name = context.User?.Identity?.Name;
         if (!string.IsNullOrEmpty(id))
             Zen.SetUser(id, name, context);
         return next();
     })
    
    app.UseZenFirewall(); // place this after UseRouting
    
    // other middleware like UseEndpoints() or MapControllers()
  3. Zen Firewallをドライ/検出専用モードで起動する

    Aikido Zen エージェントがトークンを読み取れるように、トークンを環境変数として設定してください。まだトークンをお持ちでない場合は、こちらの手順に従ってください。

    AIKIDO_TOKEN=AIK_RUNTIME_

    リクエストをブロックせずにアプリが期待どおりに動作することを確認するため、まずはドライモードでアプリを起動することをお勧めします。誤検知を避けるため、Zen Firewall をステージング環境で2週間実行することをお勧めします。

    AIKIDO_BLOCK=false

    AIKIDO_DEBUG=true を使用するとデバッグモードが有効になり、エージェントの動作に関するより詳細な情報を確認できます。環境変数の詳細については、こちらをご覧ください: configuration-via-environment-variables.md

  4. アプリをテストする

    アプリケーションにアクセスし、いくつかの操作を行うか、いくつかのページを開いてください。Zen はアプリケーション内のルートを自動的に検出します。

    Zen は 10 分ごとに Aikido へデータを送信します

    Zen アプリケーションの以下のページを確認することで、エージェントが正常に動作していることを確認できます。

    • Events: 「Application started」イベントが表示されているはずです。
    • Routes: しばらくすると、アプリケーションのルートがメソッド、ルート、リクエストとともにここに表示され始めます。
    • Instances: Zen がインストールされているアプリケーションのアクティブなインスタンス数が表示されているはずです。
  5. ダッシュボードでレート制限を設定する

    Zen Firewall ミドルウェアを追加したら、ルートをブルートフォース攻撃から保護する機能をテストできます。これは、Aikido Dashboard でレート制限を設定することで行います:

    1. 作成したアプリをクリックします。
    2. Routes タブに移動します。
    3. 制限したいルートを見つけて、Setup rate limiting をクリックします。
    4. 手順に従ってレート制限を設定します(例:1 分あたり 5 リクエスト)。

    認証ルートと保護およびレート制限のオプションを表示している API ルート管理画面。

    POST /auth/login のレート制限を 1 分あたり 5 リクエストに設定。

    レート制限の確認

    アプリを起動し、レート制限を設定したルートに 1 分以内に 5 回アクセスしてみてください。5 回目の試行の後、レート制限エラーが返されるはずです:

    You are rate limited by Aikido firewall. (Your IP: 1.2.3.4)
  6. 次のステップ

    Zen Firewall のインストールが完了しました。問題が発生した場合や、ご不明な点、機能のご要望がある場合は、お気軽にサポートまでお問い合わせください。

    Zen Firewall が提供するさまざまな機能をぜひご覧ください:

    その他の情報: