サーブレットフィルターとして Java モジュールをインストールする

要件

  • Servlet 3.x 準拠の Java サーブレットコンテナ (例: Tomcat 7.0.x.+、Jetty 9+、GlassFish 3.0+)。

サポートされているアプリケーションタイプ

Next-Gen WAF Java サーブレットフィルターモジュールは、さまざまなサーブレット3.0以降の Java アプリケーションサーバー (例 : Apache Tomcat、Jetty、Glassfish、Resin) にデプロイできます。

このモジュールは、Next-Gen WAF エージェントを実行している Linux と Windows の両方のサーバー上に配置されたアプリケーションサーバーと互換性があります。

エージェント設定

他の Next-Gen WAF モジュールと同様に、サーブレットフィルターは、Next-Gen WAF エージェントとの通信用に Unix ドメインソケットと TCP ソケットの両方をサポートしています。デフォルトでは、エージェントはアドレスを unix:/var/run/sigsci.sock に設定した Unix ドメインソケットを使用します。これをオーバーライドするか、またはエージェントで rpc-address パラメータを設定することにより、代わりに TCP ソケットを指定することができます。

さらに、エージェントがデフォルトの RPC バージョン rpc-version=0 を使用するように設定されていることを確認してください。方法としては、エージェント設定でパラメータ rpc-version が指定されていないことを確認するか、または指定されている場合は、0 の値で指定されていることを確認します。以下は、デフォルトの Unix ドメインソケット値をオーバーライドするエージェント設定の例です。

accesskeyid = "YOUR AGENT ACCESSKEYID"
secretaccesskey = "YOUR AGENT SECRETACCESSKEY"
rpc-address = "127.0.0.1:9999"

ダウンロード

Next-Gen WAF Java モジュールを手動でダウンロードするか、Maven でアクセスします。

Maven を使用したアクセス

ビルドまたはデプロイメントに Maven を使用するプロジェクトの場合、プロジェクト pom.xml のファイルに XML を追加することで、最新バージョンの Next-Gen WAF Java モジュールをインストールできます。以下の例をご覧ください。

<repositories>
<repository>
<id>sigsci-stable</id>
<url>https://mvn.security.fastly.com/release/maven2</url>
</repository>
</repositories>
<dependency>
<groupId>com.signalsciences</groupId>
<artifactId>sigsci-module-java</artifactId>
<version>LATEST_MODULE_VERSION</version>
</dependency>

必ず LATEST_MODULE_VERSION を Java モジュールの最新リリースに置き換えてください。最新バージョンは、https://dl.security.fastly.com/sigsci-module-java/VERSION または https://dl.signalsciences.net/sigsci-module-java/VERSION のバージョンファイルで確認できます。

手動によるダウンロード

Maven を使用せずに Java プロジェクトをビルドまたはデプロイする場合、次の手順に従って Next-Gen WAF Java モジュールを手動でダウンロードします。

  1. 次のいずれかのリンクをクリックして、Java モジュールの最新バージョンをダウンロードしてください。

  2. sigsci-module-java_latest.tar.gz を抽出します。

  3. 次のいずれかのオプションを使用して JAR ファイルをデプロイします。

    • sigsci-module-java-{version}-shaded.jar (すべての依存関係がバンドルされたuber jar) をアプリケーションのクラスパスにコピーします (例 : %CATALINA_HOME%\webbapps\<APP_FOLDER>\WEB-INF\lib)。

    • sigsci-module-java-{version}.jar とその依存関係を lib フォルダからアプリケーションのクラスパス (例 : %CATALINA_HOME%\webbapps\<APP_FOLDER>\WEB-INF\lib) にコピーします。アプリケーションのクラスパスフォルダ (WEB-INF\lib内の Tomcat) にすでに依存関係の JAR ファイルがある場合は、バージョン番号が異なっていてもそれらをコピーする必要はありません。ログ記録の JAR ファイルはオプションで、slf4j の設定に基づいて決定します。

    ヒント : アプリケーションサーバーインスタンス内のすべての Web アプリケーションを対象にしたい場合は、JAR ファイルをサーバークラスパスに配置する必要があります。例えば、Tomcat では %CATALINA_HOME%/lib になります。

インストール

  1. インストールに適した filter-class を決定します。

    • Jakarta EE (Servlet API 5+) を使用しているシステムの場合 :

      <filter-class>com.signalsciences.jakartafilter.SigSciFilter</filter-class>
    • Java EE の場合 :

      <filter-class>com.signalsciences.servlet.filter.SigSciFilter</filter-class>

    注 : 適切なサーブレット API を指定しない場合、package javax.servlet.x does not exist などのエラーが発生する可能性があります。

    Java EE サーブレットフィルタークラスを用いた最小限の設定例

    <web-app>
    <filter>
    <filter-name>SigSciFilter</filter-name>
    <filter-class>com.signalsciences.servlet.filter.SigSciFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
    <param-name>rpcServerURI</param-name>
    <param-value>unix:/var/run/sigsci.sock</param-value>
    </init-param>
    <init-param>
    <param-name>expectedContentTypes</param-name>
    <param-value>application/x-java-serialized-object</param-value>
    </init-param>
    <init-param>
    <param-name>extendContentTypes</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>SigSciFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    </web-app>

    注 : このフィルターは、rpcServerURI パラメータに対して Unix ドメインソケットまたは TCP ソケットの使用をサポートしています。通信障害を回避するために、ここで指定した値がエージェント設定で指定したアドレスと一致していることを確認してください。詳細については、次のモジュール設定を参照してください。

  2. アプリケーションサーバーを再起動します。

モジュール設定

オプションデフォルト説明
rpcServerURI必須、tcp://127.0.0.1:9999エージェントと通信するための Unix ドメインソケットまたは TCP 接続。適切なプリフィックスを使用して、Unix ドメインソケットまたは TCP 接続のいずれかを指定してください : unix:/<file path> または tcp://<host>:<port>
rpcTimeout必須、300 msRPC クライアントがエージェントからのレスポンスを待機するタイムアウト時間 (ミリ秒)。
rpcThreadCount任意、整数モジュールとエージェント間の RPC 通信に使用されるスレッド数。この値は明示的な数が提供された場合にのみ使用されます。それ以外の場合は、CPU 数とプールの状態に基づいてデフォルトが計算されます。
maxResponseTimeオプション、デフォルトはなしモジュールがエージェントに投稿するリクエストを送信する必要があるかを決定するために、サーバーのレスポンス時間が評価される (つまり、この値を超えるかどうかを確認する) 最大時間 (秒)。
maxResponseSizeオプション、デフォルトはなしモジュールがエージェントに投稿するリクエストを送信する必要があるかを決定するために、サーバーのレスポンスサイズが評価される (つまり、この値を超えるかどうかを確認する) 最大サイズ (バイト)。
maxPostオプション、デフォルトはなしNext-Gen WAF エージェントに送信できる POST ボディ (本体) の最大サイズ (バイト)。POST ボディのサイズがこの制限を超えると、モジュールは検知のためのリクエストをエージェントに送信しません。
asyncStartFixオプション、falseサーブレットで非同期にリクエストを処理する際にリクエストボディが欠落する問題を回避するために、true に設定できます。
altResponseCodesオプション、デフォルトはなし406. に加えてリクエストをブロックするために使用されるスペース区切りの代替エージェントレスポンスコード。例 : 「403 429 503」
excludeCidrBlockオプション、デフォルトはなしフィルター処理から除外する CIDR ブロックまたは特定の IP アドレスのカンマ区切りリスト。
excludeIpRangeオプション、デフォルトはなしフィルター処理から除外する IP アドレス範囲または特定の IP アドレスのカンマ区切りリスト。
excludePathオプション、デフォルトはなしフィルター処理から除外するパスのカンマ区切りリスト。URL が指定された値で始まる場合は除外されます。マッチングでは大文字と小文字は区別されません。
excludeHostオプション、デフォルトはなしフィルター処理から除外するホスト名のカンマ区切りされたリスト。マッチングでは大文字と小文字は区別されません。
multipartParsingEnabledオプション、falseサーブレットに MultipartConfig で注釈が付けられている場合や、web.xml の構成に <multipart-config> が含まれている場合、true に設定すべきブール値オプションです。
multipartFileSizeThresholdオプション、デフォルトはなしディスクにアップロードして保存できる最大バイト数。このオプションは、multipartParsingEnabled オプションと併用しなければなりません。
extendContentTypesオプション、falseこれを true に設定すると、拡張コンテンツ検査が有効になります。

設定例

ここで示す設定は、このガイドで前述したすべてのパラメータを使用した例です。

<!-- Signal Sciences Filter -->
<web-app>
<filter>
<filter-name>SigSciFilter</filter-name>
<filter-class>com.signalsciences.servlet.filter.SigSciFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>rpcServerURI</param-name>
<param-value>unix:/var/run/sigsci.sock</param-value>
</init-param>
<init-param>
<param-name>expectedContentTypes</param-name>
<param-value>application/x-java-serialized-object</param-value>
</init-param>
<init-param>
<param-name>excludeIpRange</param-name>
<param-value>192.168.0.1-192.168.0.5,192.169.0.10-192.169.0.12,193.168.0.1,192.168.10.1-192.168.10.5,192.168.10.7</param-value>
</init-param>
<init-param>
<param-name>excludeCidrBlock</param-name>
<param-value>192.168.14.0/24,193.165.0.0/28,192.168.11.0/24</param-value>
</init-param>
<init-param>
<param-name>excludePath</param-name>
<param-value>/test/exit,/hello,/bonus</param-value>
</init-param>
<init-param>
<param-name>excludeHost</param-name>
<param-value>localhost,127.0.0.2</param-value>
</init-param>
<init-param>
<param-name>extendContentTypes</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SigSciFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<!-- end Signal Sciences Filter -->