# PHP-FPMを使用したnginxまたはApache上のPHP

このガイドでは、PHP-FPMを介してnginxまたはApacheで配信されるPHPアプリにZen Firewallをインストールします。ZenはPHP-FPMワーカー内でPHP拡張機能として動作するため、設定はPHP-FPMプールで行います。nginxとApacheに変更は必要ありません。

[https://github.com/AikidoSec/firewall-php](https://github.com/AikidoSec/firewall-php)

{% hint style="info" %}
ApacheがPHP-FPMではなく`mod_php`でPHPを実行している場合は、[Apache上のPHP（mod\_php）](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-installation-instructions/zen-firewall-for-php/apache-mod-php)に従ってください。
{% endhint %}

## 前提条件

* PHP 7.2以降（PHP 8.5までテスト済み）。
* PHPリクエストをPHP-FPMに渡すnginxまたはApache（nginxでは`fastcgi_pass`、Apacheでは`proxy_fcgi`）。
* サーバー上での`sudo`アクセス権。
* [Aikidoアカウント](https://help.aikidogov.us/docs/docs-ja/getting-started/setting-up-your-account)と[Zen Firewallトークン](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-installation-instructions/creating-an-aikido-zen-firewall-token)。

## Zen Firewallのセットアップ

{% stepper %}
{% step %}
### Zenパッケージをインストールする


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

前提条件:

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

Red Hat 系システム（RHEL、CentOS、Fedora）の場合:

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

Red Hat 系の arm64 / aarch64 の場合:

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

Debian 系システム（Debian、Ubuntu）の場合:

```bash
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 の場合:

```bash
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を含む）に対して拡張機能を有効にします。
{% endstep %}

{% step %}
### PHP-FPMプールにトークンを追加する

PHP-FPMはデフォルトでワーカーの環境変数をクリアする（`clear_env = yes`）ため、シェルやサービスマネージャーでエクスポートした変数はZenに届きません。代わりに、アプリを配信するプールで`env[...]`を使って設定してください。

プールファイルを開きます。デフォルトのプール名は`www`です：

{% tabs %}
{% tab title="DebianおよびUbuntu" %}
```shell
sudo nano /etc/php/<php-version>/fpm/pool.d/www.conf
```
{% endtab %}

{% tab title="RHEL、CentOS、およびFedora" %}
```shell
sudo nano /etc/php-fpm.d/www.conf
```
{% endtab %}
{% endtabs %}

プールの末尾に次の行を追加します：

{% code title="www.conf" %}
```ini
env[AIKIDO_TOKEN] = AIK_RUNTIME_...
env[AIKIDO_BLOCK] = false
```
{% endcode %}

`AIKIDO_BLOCK=false`を指定すると、Zenは検出専用モードで起動します。攻撃は報告されますが、ブロックはされません。誤検知がないことを確認するため、ステージング環境でこの設定のまま約2週間運用してください。その他のオプションについては、[環境変数による設定](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-installation-instructions/configuration-via-environment-variables)を参照してください。

{% hint style="warning" %}
アプリが複数のプールを使用している場合は、アプリを配信するすべてのプールにこれらの行を追加してください。`AIKIDO_TOKEN`が設定されていないプールはAikidoに報告しません。
{% endhint %}
{% endstep %}

{% step %}
### PHP-FPMを再起動する

PHP-FPMを再起動して、拡張機能と新しいプール設定を読み込みます。nginxやApacheのリロードだけでは不十分です。

{% tabs %}
{% tab title="DebianおよびUbuntu" %}
```shell
sudo systemctl restart php<php-version>-fpm
```
{% endtab %}

{% tab title="RHEL、CentOS、およびFedora" %}
```shell
sudo systemctl restart php-fpm
```
{% endtab %}
{% endtabs %}
{% endstep %}

{% step %}
### リクエストのブロックとユーザー識別を有効にする


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

Zen Firewall が攻撃をブロックするために、このミドルウェアは必須ではありません。中核となる攻撃防御機能はミドルウェアなしでも動作します。このミドルウェアは追加のリクエストコンテキストを提供し、Zen はそれを [レート制限](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/setting-up-rate-limiting-for-routes)、[ユーザーブロック](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-users-with-zen-firewall)、[ボットブロック](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-bot-traffic-with-zen-firewall)、[国別ブロック](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-traffic-by-country-with-zen-firewall)、[脅威アクター](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-known-threat-actors-with-zen-firewall)のブロックなどの保護機能に使用します。

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

すべてのリクエストの早い段階で、例えばフロントコントローラー（`index.php`）や共有ブートストラップファイル内で、`set_user`と`should_block_request`を呼び出します：

```php
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.');
    }
}
```
{% endstep %}

{% step %}
### アプリをテストする


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

{% hint style="info" %}
Zen は 10 分ごとに Aikido へデータを送信します
{% endhint %}

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

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

<figure><img src="https://help.aikidogov.us/_assets/c2caef7203b6/Screenshot-2025-06-23-at-10.08.35.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
### レート制限を設定する


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

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

![認証ルートと保護およびレート制限のオプションを表示している API ルート管理画面。](https://help.aikidogov.us/_assets/5c97a4dd85f0/Screenshot-2025-10-30-at-10.38.17.png)

![POST /auth/login のレート制限を 1 分あたり 5 リクエストに設定。](https://help.aikidogov.us/_assets/a8c11e989a3b/ucarecdn-34b1af76-facb-4b6d-9c87-155236236b8f.png)

**レート制限の確認**

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

```
You are rate limited by Aikido firewall. (Your IP: 1.2.3.4)
```
{% endstep %}

{% step %}
### 次のステップを確認する


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

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

* [blocking-bot-traffic-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-bot-traffic-with-zen-firewall "mention")
* [blocking-tor-traffic-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-tor-traffic-with-zen-firewall "mention")
* [blocking-users-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-users-with-zen-firewall "mention")
* [blocking-known-threat-actors-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-known-threat-actors-with-zen-firewall "mention")
* [blocking-traffic-by-country-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-traffic-by-country-with-zen-firewall "mention")
* [setting-up-rate-limiting-for-routes.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/setting-up-rate-limiting-for-routes "mention")
* [monitor-outbound-domains.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/monitor-outbound-domains "mention")

その他の情報：

* [how-zen-works-performance-reliability.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/miscellaneous/how-zen-works-performance-reliability "mention")
* [blocking-vs-detection-mode-in-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-vs-detection-mode-in-zen-firewall "mention")
* [understanding-your-zen-statistics.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/understanding-your-zen-statistics "mention")
{% endstep %}
{% endstepper %}
