コンテンツにスキップ

postanalyticsモジュールの分離インストール

Wallarmのリクエスト処理には2つの段階があり、統計的なリクエスト解析を行うpostanalytics段階を含みます。postanalyticsはメモリ使用量が多く、性能最適化のために専用サーバーで実行する必要が生じる場合があります。本記事では、postanalyticsモジュールを別サーバーにインストールする方法を説明します。

概要

Wallarmノードでのリクエスト処理は次の2段階で構成されます:

  • メモリ負荷の小さい一次処理はNGINX‑Wallarmモジュールで実行され、サーバー要件を変更することなくフロントエンドサーバー上で実行できます。

  • 処理済みリクエストの統計解析はメモリ負荷が高く、postanalyticsモジュールで実行されます。

以下の図は、同一サーバーにインストールした場合と異なるサーバーにインストールした場合のモジュール間の連携を示します。

postanalyticsとnginx-wallarm間のトラフィックフロー

postanalyticsとnginx-wallarm間のトラフィックフロー

要件

  • Access to the account with the Administrator role in Wallarm Console for the US Cloud or EU Cloud

  • Executing all commands as a superuser (e.g. root)

  • Access to https://meganode.wallarm.com to download all-in-one Wallarm installer. Ensure the access is not blocked by a firewall

  • Access to https://us1.api.wallarm.com if working with US Wallarm Cloud or to https://api.wallarm.com if working with EU Wallarm Cloud. If access can be configured only via the proxy server, then use the instructions

  • Installed text editor vim, nano, or any other. In the commands in this article, vim is used

Step 1: オールインワンWallarmインストーラーをダウンロード

オールインワンのWallarmインストールスクリプトをダウンロードするには、次のコマンドを実行します:

curl -O https://meganode.wallarm.com/6.4/wallarm-6.4.1.x86_64-glibc.sh
curl -O https://meganode.wallarm.com/6.4/wallarm-6.4.1.aarch64-glibc.sh

Step 2: Wallarmトークンを準備

ノードをインストールするには、適切な種類のWallarmトークンが必要です。トークンを準備します:

  1. Wallarm Console → SettingsAPI tokensUS CloudまたはEU Cloudで開きます。
  2. 使用タイプがNode deployment/DeploymentのAPIトークンを探すか作成します。
  3. このトークンをコピーします。
  1. Wallarm Console → NodesUS CloudまたはEU Cloudで開きます。
  2. 次のいずれかを実行します:
    • Wallarm nodeタイプのノードを作成し、生成されたトークンをコピーします。
    • 既存のノードグループを使用する場合は、ノードのメニュー → Copy tokenからトークンをコピーします。

Step 3: オールインワンWallarmインストーラーを実行してpostanalyticsをインストール

オールインワンインストーラーでpostanalyticsを分離インストールするには、次を使用します:

# x86_64版を使用する場合:
sudo env WALLARM_LABELS='group=<GROUP>' sh wallarm-6.4.1.x86_64-glibc.sh postanalytics

# ARM64版を使用する場合:
sudo env WALLARM_LABELS='group=<GROUP>' sh wallarm-6.4.1.aarch64-glibc.sh postanalytics

変数WALLARM_LABELSはノードが追加されるグループを設定します(Wallarm Console UIでノードを論理的にグルーピングするために使用されます)。

# x86_64版を使用する場合:
sudo sh wallarm-6.4.1.x86_64-glibc.sh postanalytics

# ARM64版を使用する場合:
sudo sh wallarm-6.4.1.aarch64-glibc.sh postanalytics

Step 4: postanalyticsモジュールを構成

リソースとメモリ

wstoreが使用するメモリ量を変更するには、/opt/wallarm/env.listファイル内のSLAB_ALLOC_ARENA設定を確認します。既定では1 GBに設定されています。必要に応じて、wstoreが実際に必要とするメモリ量に合わせて数値を調整できます。設定値の目安は、推奨事項を参照してください。

割り当てメモリを変更するには:

  1. /opt/wallarm/env.listファイルを編集用に開きます:

    sudo vim /opt/wallarm/env.list
    
  2. SLAB_ALLOC_ARENA属性にメモリサイズを設定します。値は整数または浮動小数(小数点はドット.)が使用できます。例:

    SLAB_ALLOC_ARENA=2.0
    

ホストとポート

既定では、postanalyticsモジュールはホストのすべてのIPv4アドレス(0.0.0.0)でポート3313による接続を受け付けるように設定されています。必要がない限り、既定の構成を維持することを推奨します。

ただし、既定の構成を変更する必要がある場合は:

  1. postanalyticsサービスのマシンで/opt/wallarm/wstore/wstore.yamlファイルを編集用に開きます:

    sudo vim /opt/wallarm/wstore/wstore.yaml
    
  2. service.addressパラメータに新しいIPアドレスとポートの値を指定します。例:

    service:
      address: 192.158.1.38:3313
    

    service.addressパラメータには以下の形式を指定できます:

    • IPアドレス:ポート(例: 192.158.1.38:3313
    • すべてのIP上の特定ポート(例: :3313
  3. postanalyticsサービスのマシンで/opt/wallarm/etc/wallarm/node.yamlファイルを編集用に開きます:

    sudo vim /opt/wallarm/etc/wallarm/node.yaml
    
  4. wstore.hostwstore.portパラメータに新しいIPアドレスとポートの値を指定します。例:

    api:
      uuid: <UUID of postanalytics node>
      secret: <secret key of postanalytics node>
    wstore:
      host: '0.0.0.0'
      port: 3300
    

Step 5: postanalyticsモジュールへの受信接続を有効化

postanalyticsモジュールは既定でポート3313を使用しますが、クラウドプラットフォームによってはこのポートでの受信接続をブロックする場合があります。

連携を確実にするため、ポート3313またはカスタムポートでの受信接続を許可してください。これは、別にインストールされたNGINX‑Wallarmモジュールがwstoreインスタンスに接続するために不可欠です。

Step 6: Wallarmサービスを再起動

必要な変更を加えたら、postanalyticsモジュールをホストするマシンでWallarmサービスを再起動して更新を適用します:

sudo systemctl restart wallarm.service

Step 7: 別サーバーにNGINX‑Wallarmモジュールをインストール

postanalyticsモジュールを別サーバーにインストールしたら:

  1. 対応するガイドに従って、別サーバーにNGINX‑Wallarmモジュールをインストールします。

  2. 別サーバーでNGINX‑Wallarmモジュールのインストールスクリプトを起動する際、filteringオプションを指定します。例:

    # x86_64版を使用する場合:
    sudo env WALLARM_LABELS='group=<GROUP>' sh wallarm-6.4.1.x86_64-glibc.sh filtering
    
    # ARM64版を使用する場合:
    sudo env WALLARM_LABELS='group=<GROUP>' sh wallarm-6.4.1.aarch64-glibc.sh filtering
    

    変数WALLARM_LABELSはノードが追加されるグループを設定します(Wallarm Console UIでノードを論理的にグルーピングするために使用されます)。

    # x86_64版を使用する場合:
    sudo sh wallarm-6.4.1.x86_64-glibc.sh filtering
    
    # ARM64版を使用する場合:
    sudo sh wallarm-6.4.1.aarch64-glibc.sh filtering
    

Step 8: NGINX‑Wallarmモジュールをpostanalyticsモジュールに接続

NGINX‑Wallarmモジュールのあるマシンで、NGINXの設定ファイル(通常は/etc/nginx/nginx.conf)にpostanalyticsモジュールのサーバーアドレスを指定します:

http {
    # omitted

    upstream wallarm_wstore {
        server <ip1>:3313 max_fails=0 fail_timeout=0 max_conns=1;
        server <ip2>:3313 max_fails=0 fail_timeout=0 max_conns=1;

        keepalive 2;
    }

    wallarm_wstore_upstream wallarm_wstore;

    # omitted
}
  • 過剰な接続の生成を防ぐため、各upstreamのwstoreサーバーに対してmax_connsの値を指定する必要があります。

  • keepaliveの値はwstoreサーバーの台数未満にしてはいけません。

設定ファイルを変更したら、NGINX‑WallarmモジュールサーバーでNGINX/NGINX Plusを再起動します:

sudo systemctl restart nginx
sudo service nginx restart
sudo systemctl restart nginx
sudo systemctl restart nginx
sudo systemctl restart nginx

Step 9: NGINX‑Wallarmと分離postanalyticsモジュールの連携を確認

NGINX‑Wallarmと分離postanalyticsモジュールの連携を確認するには、保護対象アプリケーションのアドレスにテスト攻撃付きのリクエストを送信します:

curl http://localhost/etc/passwd

NGINX‑Wallarmと分離postanalyticsモジュールが正しく構成されていれば、攻撃はWallarm Cloudにアップロードされ、Wallarm ConsoleのAttacksセクションに表示されます:

インターフェイスのAttacks

攻撃がWallarm Cloudにアップロードされなかった場合、サービスの動作にエラーがないか確認してください:

  • postanalyticsモジュールのログを確認します

    sudo cat /opt/wallarm/var/log/wallarm/wstore-out.log
    

    SystemError binary: failed to bind: Cannot assign requested addressのような記録があれば、指定したアドレスとポートでサーバーが接続を受け付けていることを確認してください。

  • NGINX‑Wallarmモジュールのサーバーで、NGINXのログを確認します:

    sudo cat /var/log/nginx/error.log
    

    [error] wallarm: <address> connect() failedのような記録があれば、NGINX‑Wallarmモジュールの設定ファイルで分離postanalyticsモジュールのアドレスが正しく指定されていること、および分離postanalyticsサーバーが指定したアドレスとポートで接続を受け付けていることを確認してください。

  • NGINX‑Wallarmモジュールのサーバーで、以下のコマンドを使用して処理済みリクエストの統計を取得し、tnt_errorsの値が0であることを確認します

    curl http://127.0.0.8/wallarm-status
    

    統計サービスが返す全パラメータの説明 →

NGINX‑Wallarmモジュールとpostanalyticsモジュール間のSSL/TLSおよびmTLS

任意で、NGINX‑Wallarmモジュールとpostanalytics間にSSL/TLSによる安全な接続を確立できます。片方向のサーバー証明書検証と相互TLSの両方に対応しています。

リリース6.2.0以降で利用可能です。

postanalyticsモジュールへのSSL/TLS接続

NGINX‑Wallarmモジュールからpostanalyticsモジュールへの安全なSSL/TLS接続を有効にするには:

  1. 稼働中のpostanalyticsモジュールのホストのFQDNまたはIPアドレスに対してサーバー証明書を発行します。

  2. postanalyticsサーバーで、/opt/wallarm/wstore/wstore.yamlファイルにてSSL/TLSを有効にします:

    service:
      TLS:
        enabled: true
        address: 0.0.0.0:6388
        certFile: "/opt/wallarm/wstore/wstore.crt"
        keyFile: "/opt/wallarm/wstore/wstore.key"
        # caCertFile: "/opt/wallarm/wstore/wstore-ca.crt"
    
    • enabled: postanalyticsモジュールのSSL/TLSを有効化または無効化します。既定はfalseです。
    • address: postanalyticsモジュールが受け付けるTLS着信接続のアドレスとポート。指定したアドレスは受信接続を許可している必要があります。
    • certFile: TLSハンドシェイク時にクライアント(NGINX‑Wallarmモジュール)へ提示するサーバー証明書のパス。
    • keyFile: サーバー証明書に対応する秘密鍵のパス。
    • caCertFile(任意): サーバー用のカスタムCA証明書のパス。
  3. postanalyticsサーバーでWallarmサービスを再起動します:

    sudo systemctl restart wallarm.service
    
  4. NGINX‑Wallarmサーバーで、NGINXの設定ファイル(通常は/etc/nginx/nginx.conf)にて次を行います:

    1. TLS経由でpostanalyticsに使用するupstreamを構成します。
    2. wallarm_wstore_upstreamssl=onオプションを追加します。
    3. postanalyticsモジュールがカスタムCA発行の証明書を使用している場合、CA証明書をNGINX‑Wallarmサーバーへ配置し、そのパスをwallarm_wstore_ssl_ca_cert_fileに指定します。

      このファイルはpostanalyticsサーバーで設定したservice.TLS.caCertFileと一致している必要があります。

    http {
        upstream wallarm_wstore {
            server postanalytics.server.com:6388 max_fails=0 fail_timeout=0 max_conns=1;
            keepalive 1;
        }
    
        wallarm_wstore_upstream wallarm_wstore ssl=on;
    
        # wallarm_wstore_ssl_ca_cert_file /path/to/wstore-ca.crt;
    }
    
  5. NGINX‑WallarmサーバーでNGINXを再起動します:

    sudo systemctl restart nginx
    
    sudo service nginx restart
    
    sudo systemctl restart nginx
    
    sudo systemctl restart nginx
    
    sudo systemctl restart nginx
    
  6. 連携を確認します

相互TLS(mTLS)

NGINX‑Wallarmモジュールとpostanalyticsモジュールの双方が相互に証明書を検証する相互認証を有効にするには:

  1. 上記のとおりSSL/TLS接続をpostanalyticsモジュールに対して有効化します。

  2. 稼働中のNGINX‑WallarmモジュールのホストのFQDNまたはIPアドレスに対してクライアント証明書を発行します。

  3. NGINX‑Wallarmサーバーで、クライアント証明書と秘密鍵を配置し、それぞれのパスをwallarm_wstore_ssl_cert_fileおよびwallarm_wstore_ssl_key_fileに指定します:

    http {
        upstream wallarm_wstore {
            server postanalytics.server.com:6388 max_fails=0 fail_timeout=0 max_conns=1;
            keepalive 1;
        }
    
        wallarm_wstore_upstream wallarm_wstore ssl=on;
    
        wallarm_wstore_ssl_cert_file /path/to/client.crt;
        wallarm_wstore_ssl_key_file /path/to/client.key;
    
        # wallarm_wstore_ssl_ca_cert_file /path/to/wstore-ca.crt;
    }
    

    次に、NGINXを再起動します:

    sudo systemctl restart nginx
    
    sudo service nginx restart
    
    sudo systemctl restart nginx
    
    sudo systemctl restart nginx
    
    sudo systemctl restart nginx
    
  4. postanalyticsサーバーで、/opt/wallarm/wstore/wstore.yamlにてmTLSを有効にします:

    service:
      TLS:
        enabled: true
        address: 0.0.0.0:6388
        certFile: "/opt/wallarm/wstore/wstore.crt"
        keyFile: "/opt/wallarm/wstore/wstore.key"
        # caCertFile: "/opt/wallarm/wstore/wstore-ca.crt"
        mutualTLS:
          enabled: true
          # clientCACertFile: "/opt/wallarm/wstore/client-ca.crt"
    
    • mutualTLS.enabled: mTLSを有効化または無効化します。既定はfalseです。
    • mutualTLS.clientCACertFile(任意): NGINX‑Wallarmクライアント用のカスタムCA証明書のパス。

    その後、Wallarmサービスを再起動します:

    sudo systemctl restart wallarm.service
    

postanalyticsモジュールの保護

インストール済みのpostanalyticsモジュールを保護してください

新しくインストールしたWallarmのpostanalyticsモジュールは、ファイアウォールで保護することを強く推奨します。そうしない場合、サービスへの不正アクセスを受けるリスクがあり、次のような事態につながる可能性があります:

  • 処理済みリクエストに関する情報の漏えい
  • 任意のLuaコードおよびオペレーティングシステムコマンドの実行の可能性

postanalyticsモジュールをNGINX‑Wallarmモジュールと同一サーバーに併設してデプロイしている場合、上記のリスクはありません。これは、postanalyticsモジュールがポート3313をリッスンするためです。

別途インストールしたpostanalyticsモジュールに適用すべきファイアウォール設定は以下のとおりです:

  • postanalyticsモジュールがWallarm APIサーバーと通信できるよう、これらのサーバーとの間のHTTPSトラフィックを許可します:
    • us1.api.wallarm.comはUS Wallarm CloudのAPIサーバーです
    • api.wallarm.comはEU Wallarm CloudのAPIサーバーです
  • TCPおよびUDPプロトコルにおいて、3313のwstoreポートへのアクセスをWallarmフィルタリングノードのIPアドレスからの接続のみに制限します。