サーブレットフィルターとして Java モジュールをインストールする
- English
- 日本語
要件
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 モジュールを手動でダウンロードします。
次のいずれかのリンクをクリックして、Java モジュールの最新バージョンをダウンロードしてください。
sigsci-module-java_latest.tar.gzを抽出します。次のいずれかのオプションを使用して 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になります。
インストール
インストールに適した
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 ソケットの使用をサポートしています。通信障害を回避するために、ここで指定した値がエージェント設定で指定したアドレスと一致していることを確認してください。詳細については、次のモジュール設定を参照してください。アプリケーションサーバーを再起動します。
モジュール設定
| オプション | デフォルト | 説明 |
rpcServerURI | 必須、tcp://127.0.0.1:9999 | エージェントと通信するための Unix ドメインソケットまたは TCP 接続。適切なプリフィックスを使用して、Unix ドメインソケットまたは TCP 接続のいずれかを指定してください : unix:/<file path> または tcp://<host>:<port> |
rpcTimeout | 必須、300 ms | RPC クライアントがエージェントからのレスポンスを待機するタイムアウト時間 (ミリ秒)。 |
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 -->