Netty Handler として Java モジュールをインストールする

Next-Gen WAF Netty モジュールは、パイプライン内の次のハンドラーにイベントを転送する前に HttpRequest イベントを検査するハンドラーとして実装されています。

ダウンロード

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

手動によるダウンロード

  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 の設定に基づいて決定します。

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 のバージョンファイルで確認できます。

インストールして設定する

新しい接続ごとに新しい WafHandler インスタンスを作成します。

  • WafHandler は、FlowControlHandler の後に追加する必要があります。

  • HTTP POST のボディ (中身、本体) を検査するには、HttpObjectAggregator ハンドラーを FlowControlHandler の前に追加する必要があります。

  • WafHandler はブロックされたリクエストに対して HttpResponse を送信することがあります。

デプロイの例

// Update configuration
WafHandler.getSigSciConfig().setMaxPost(40000);
// start server and handle requests
new ServerBootstrap()
.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(
new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline()
.addLast(new HttpServerCodec())
.addLast(new HttpObjectAggregator(6 * (1 << 20)))
.addLast(new FlowControlHandler())
.addLast("waf", new WafHandler())
.addLast(new SimpleChannelInboundHandler<FullHttpRequest>() {
// send response
});
}
})
.bind(8080)
.sync();