FrankenPHP(Laravel Octane)
このガイドでは、アプリケーション向けに Aikido の Zen Firewall をインストールしてセットアップする手順を説明します。以下の手順に従って、アプリケーションを保護してください。
問題や不具合が発生した場合は、遠慮なくサポートチャットまたは Github issues でお問い合わせください。
https://github.com/AikidoSec/firewall-php
要件
- FrankenPHP 8.2以上(FrankenPHP 8.5まで動作確認済み)。
- フレームワークなし / カスタムミドルウェア。
- Aikidoアカウント & Zen Firewallトークン
インストールと設定
Zen Firewall by Aikidoをインストールする
Zen for FrankenPHP は、システムパッケージとしてインストールされます。
前提条件:
sudo権限があることを確認してください。- サポートされている FrankenPHP のバージョン(8.2 以降)を使用してください。
Red Hat 系システム(RHEL、CentOS、Fedora)の場合:
rpm -Uvh --oldpackage https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.x86_64.rpmRed Hat 系 arm64 / aarch64 の場合:
rpm -Uvh --oldpackage https://github.com/AikidoSec/firewall-php/releases/latest/download/aikido-php-firewall.aarch64.rpmDebian 系システム(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.debDebian 系 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.debZen Firewallをドライ / 検出専用モードで起動する
Laravel Sailを使用する場合
Aikidoインストールパッケージをダウンロードする
docker/version/Dockerfile内:ARG AIKIDO_VERSION=1.5.2 RUN curl -L -o /tmp/aikido-php-firewall.deb \ "https://github.com/AikidoSec/firewall-php/releases/download/v${AIKIDO_VERSION}/aikido-php-firewall.$(uname -m).deb"OctaneのCaddyfileでAikidoの環境変数をFrankenPHPに渡し、ワーカーを設定する
vendor/laravel/octane/src/Commands/stubs/Caddyfile内:vendor/laravel/octane/src/Commands/stubs/Caddyfile {$CADDY_SERVER_SERVER_NAME} { route { php_server { env AIKIDO_TOKEN "AIK_RUNTIME_...." env AIKIDO_BLOCK "True" } } }Octaneワーカースクリプトで \aikido\worker_rinit() と \aikido\worker_rshutdown() を呼び出す
Aikidoが各リクエストを確実に処理できるよう、リクエストハンドラーをこれらの呼び出しでラップします。
vendor/laravel/octane/bin/frankenphp-worker.php内:vendor/laravel/octane/bin/frankenphp-worker.php <?php // ... Octane bootstrap ... $handleRequest = static function () use ($worker, $frankenPhpClient, $debugMode) { \aikido\worker_rinit(); // Octane request handling logic \aikido\worker_rshutdown(); }; while ($requestCount < $maxRequests && frankenphp_handle_request($handleRequest)) { $requestCount++; }docker/version/start-containerのスクリプト末尾付近に、以下のインストール手順を追加します:ls -sf /var/www/html/frankenphp /usr/bin/frankenphp dpkg -i -E ./aikido-php-firewall.$(uname -m).debこれでSailを起動できます:
./vendor/bin/sail up --buildDockerイメージを使用する場合
DockerfileにAikidoをインストールする
Dockerfile FROM dunglas/frankenphp:php${PHP_VERSION}-bookworm ARG AIKIDO_VERSION=1.5.2 RUN apt-get update && apt-get install -y curl \ && curl -L -o /tmp/aikido-php-firewall.deb \ "https://github.com/AikidoSec/firewall-php/releases/download/v${AIKIDO_VERSION}/aikido-php-firewall.$(uname -m).deb" \ && dpkg -i /tmp/aikido-php-firewall.deb \ && rm /tmp/aikido-php-firewall.deb \ && apt-get clean COPY . /app ENTRYPOINT ["php", "artisan", "octane:frankenphp"]OctaneのCaddyfileでAikidoの環境変数をFrankenPHPに渡し、ワーカーを設定する
vendor/laravel/octane/src/Commands/stubs/Caddyfile内:vendor/laravel/octane/src/Commands/stubs/Caddyfile {$CADDY_SERVER_SERVER_NAME} { route { php_server { env AIKIDO_TOKEN "AIK_RUNTIME_...." env AIKIDO_BLOCK "True" } } }Octaneワーカースクリプトで \aikido\worker_rinit() と \aikido\worker_rshutdown() を呼び出す
Aikidoが各リクエストを確実に処理できるよう、リクエストハンドラーをこれらの呼び出しでラップします。
vendor/laravel/octane/bin/frankenphp-worker.php内:vendor/laravel/octane/bin/frankenphp-worker.php <?php // ... Octane bootstrap ... $handleRequest = static function () use ($worker, $frankenPhpClient, $debugMode) { \aikido\worker_rinit(); // Octane request handling logic \aikido\worker_rshutdown(); }; while ($requestCount < $maxRequests && frankenphp_handle_request($handleRequest)) { $requestCount++; }コンテナを起動する
docker run -e AIKIDO_TOKEN="AIK_RUNTIME_..." your-appリクエストをブロックせずにアプリが期待どおりに動作することを確認するため、まずドライモードでアプリを起動することをお勧めします。誤検知を避けるため、ステージング環境で2週間Zen Firewallを実行することをお勧めします。
env AIKIDO_BLOCK "False"環境変数
AIKIDO_DEBUG=trueを定義するとデバッグモードが有効になり、エージェントの動作に関するより詳細な情報を確認できます。環境変数の詳細については、configuration-via-environment-variables.md を参照してください。例:
AIKIDO_TOKEN=AIK_RUNTIME_... AIKIDO_BLOCK=false変更後はFrankenPHPのプロセスマネージャー/Webサーバーを再起動してください。
レート制限とユーザーブロックを有効にする
リクエストパイプラインで
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.'); } }アプリをテストする
アプリケーションにアクセスし、いくつかの操作を行うか、いくつかのページを開いてください。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
その他の情報: