日本語

PHPフレームワーク Symfony

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

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

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

要件

インストールと設定

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

    Zen for PHP はシステムパッケージとしてインストールされます。

    前提条件:

    • sudo 権限があることを確認してください。
    • サポートされている PHP バージョン(7.2 以上)を使用してください。

    Red Hat 系システム(RHEL、CentOS、Fedora)の場合:

    rpm -Uvh --oldpackage https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.x86_64.rpm

    Red Hat 系の arm64 / aarch64 の場合:

    rpm -Uvh --oldpackage https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.aarch64.rpm

    Debian 系システム(Debian、Ubuntu)の場合:

    curl -L -O https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.x86_64.deb
    dpkg -i -E ./aikido-php-firewall.x86_64.deb

    Debian 系の arm64 / aarch64 の場合:

    curl -L -O https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.aarch64.deb
    dpkg -i -E ./aikido-php-firewall.aarch64.deb
  2. リクエストのブロックとユーザー識別を有効にする

    このミドルウェアを使用すると、レート制限、ユーザー識別、ブロック機能を有効にできます。

    Zen Firewall が攻撃をブロックするために、このミドルウェアは必須ではありません。中核となる攻撃防御機能はミドルウェアなしでも動作します。このミドルウェアは追加のリクエストコンテキストを提供し、Zen はそれを レート制限、ユーザーブロック、ボットブロック、国別ブロック、脅威アクターのブロックなどの保護機能に使用します。

    アプリケーションでのユーザーの識別方法やリクエストの処理方法に合わせて、サンプルを調整してください。

    ミドルウェアを追加します:

    namespace App\Middleware;
    
    use Psr\Http\Message\ResponseInterface;
    use Psr\Http\Message\ServerRequestInterface;
    use Psr\Http\Server\MiddlewareInterface;
    use Psr\Http\Server\RequestHandlerInterface;
    
    class AikidoMiddleware implements MiddlewareInterface
    {
        public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
        {
            if (!extension_loaded('aikido')) {
                return $handler->handle($request);
            }
    
            $decision = \aikido\should_block_request();
            if ($decision->block) {
                if ($decision->type == 'ratelimited') {
                    return new \Symfony\Component\HttpFoundation\Response('You are rate limited by Zen.', 429, ['Retry-After' => (string) $decision->retry_after]);
                }
                return new \Symfony\Component\HttpFoundation\Response('You are blocked by Zen.', 403);
            }
    
            return $handler->handle($request);
        }
    }

    認証後に \aikido\set_user($id, $name) でユーザーを設定します。

  3. Zen Firewall をドライ/検出専用モードで起動する

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

    AIKIDO_TOKEN=AIK_RUNTIME_

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

    AIKIDO_BLOCK=false

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

    例えば、.env に以下を追加します

    AIKIDO_TOKEN=AIK_RUNTIME_...
    AIKIDO_BLOCK=false

    変更後は PHP-FPM/Web サーバーを再起動してください。

  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 が提供するさまざまな機能をぜひご覧ください:

    その他の情報: