日本語

Caddy + PHP-FPM上のPHP

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

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

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

要件

インストールと設定

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

    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

    Caddyfileで環境変数を設定します:

    Caddyfile
    example.com {
      php_fastcgi unix//run/php/php-fpm.sock {
        env AIKIDO_TOKEN "AIK_RUNTIME_..."
        env AIKIDO_BLOCK "false"
      }
    }

    PHP-FPMが環境変数を引き渡せるようにします:

    clear_env = no
    env[AIKIDO_TOKEN] = $AIKIDO_TOKEN
    env[AIKIDO_BLOCK] = $AIKIDO_BLOCK

    サービスを再起動します:

    service caddy restart
    service php8.2-fpm restart
  2. リクエストブロッキングとユーザー識別を有効にする

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

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

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

    リクエストパイプラインでset_userとshould_block_requestを使用します:

    if (extension_loaded('aikido')) {
       \aikido\set_user('123', 'John Doe');
    
       $decision = \aikido\should_block_request();
    
       if ($decision->block) {
           if ($decision->type === 'ratelimited') {
               http_response_code(429);
               header('Retry-After: ' . $decision->retry_after);
               exit('You are rate limited by Zen.');
           }
           http_response_code(403);
           exit('You are blocked by Zen.');
       }
    }
  3. アプリをテストする

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

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

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

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

    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)
  5. 次のステップ

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

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

    その他の情報: