PHP を nginx または Apache で PHP-FPM とともに
このガイドでは、PHP-FPMを介してnginxまたはApacheで配信されるPHPアプリにZen Firewallをインストールします。ZenはPHP-FPMワーカー内でPHP拡張機能として動作するため、設定はPHP-FPMプールで行います。nginxとApacheに変更は必要ありません。
https://github.com/AikidoSec/firewall-php
ApacheがPHP-FPMではなくmod_phpでPHPを実行している場合は、Apache上のPHP(mod_php)に従ってください。
前提条件
- PHP 7.2以降(PHP 8.5までテスト済み)。
- PHPリクエストをPHP-FPMに渡すnginxまたはApache(nginxでは
fastcgi_pass、Apacheではproxy_fcgi)。 - サーバー上での
sudoアクセス権。 - AikidoアカウントとZen Firewallトークン。
Zen Firewallのセットアップ
Zenパッケージをインストールする
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.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.debこのパッケージは、サーバー上で検出されたすべてのPHPバージョンとランタイム(PHP-FPMを含む)に対して拡張機能を有効にします。
PHP-FPMプールにトークンを追加する
PHP-FPMはデフォルトでワーカーの環境変数をクリアする(
clear_env = yes)ため、シェルやサービスマネージャーでエクスポートした変数はZenに届きません。代わりに、アプリを配信するプールでenv[...]を使って設定してください。プールファイルを開きます。デフォルトのプール名は
wwwです:sudo nano /etc/php/<php-version>/fpm/pool.d/www.confsudo nano /etc/php-fpm.d/www.confプールの末尾に次の行を追加します:
www.conf env[AIKIDO_TOKEN] = AIK_RUNTIME_... env[AIKIDO_BLOCK] = falseAIKIDO_BLOCK=falseを指定すると、Zenは検出専用モードで起動します。攻撃は報告されますが、ブロックはされません。誤検知がないことを確認するため、ステージング環境でこの設定のまま約2週間運用してください。その他のオプションについては、環境変数による設定を参照してください。アプリが複数のプールを使用している場合は、アプリを配信するすべてのプールにこれらの行を追加してください。
AIKIDO_TOKENが設定されていないプールはAikidoに報告しません。PHP-FPMを再起動する
PHP-FPMを再起動して、拡張機能と新しいプール設定を読み込みます。nginxやApacheのリロードだけでは不十分です。
sudo systemctl restart php<php-version>-fpmsudo systemctl restart php-fpmリクエストのブロックとユーザー識別を有効にする
このミドルウェアを使用すると、レート制限、ユーザー識別、ブロック機能を有効にできます。
Zen Firewall が攻撃をブロックするために、このミドルウェアは必須ではありません。中核となる攻撃防御機能はミドルウェアなしでも動作します。このミドルウェアは追加のリクエストコンテキストを提供し、Zen はそれを レート制限、ユーザーブロック、ボットブロック、国別ブロック、脅威アクターのブロックなどの保護機能に使用します。
アプリケーションでのユーザーの識別方法やリクエストの処理方法に合わせて、サンプルを調整してください。
すべてのリクエストの早い段階で、例えばフロントコントローラー(
index.php)や共有ブートストラップファイル内で、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
その他の情報: