本日は、OpenResty Edge で Web アプリケーションファイアウォール(WAF)を有効にする方法をご紹介いたします。

OpenResty Edge の WAF プラットフォームは、ModSecurity や lua-resty-waf などのほぼすべてのオープンソース WAF ソリューションよりも数倍高速です。

Embeded image

アプリケーションの WAF を有効化する

OpenResty Edge の管理者用 Web コンソールにアクセスしましょう。これは当社のコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。

Screenshot

今回も test-edge.com ドメインのサンプルアプリケーションを使用します。

Screenshot

このアプリケーションに進みます。

スクリーンショット

Page Rule ページに進みます。

スクリーンショット

前回のチュートリアルでリバースプロキシのページルールを設定しました。

スクリーンショット

ここで、いくつかの WAF ルールセットを有効にしましょう。

このページルールを編集するためにクリックします。

Screenshot

WAF を有効にするには、このスイッチをクリックする必要があります。

スクリーンショット

スクリーンショット

有効にする WAF ルールセットを選択できます。

スクリーンショット

ここでは、デフォルトのルールセットのみを保持します。

Screenshot

WAF ルールにヒットしたリクエストに対して実行するアクションを選択します。

スクリーンショット

「Log only」アクションは、リクエスト自体に影響を与えずに WAF ルールをテストするのに役立ちます。

Screenshot

このルールを保存します。

スクリーンショット

いつものように、先ほどの変更をプッシュするために新しいバージョンをリリースする必要があります。

スクリーンショット

このボタンをクリックします。

スクリーンショット

リリースします!

Screenshot

新しいバージョンがすべてのゲートウェイサーバーに同期されました。

スクリーンショット

これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。

Embeded video

Embeded video

Embeded video

これらの設定変更には、サーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。

埋め込み画像

アプリケーションの WAF 設定をテストする

ここで、SQL インジェクションを試みる悪意のあるリクエストを送信してみましょう。

Screenshot

リクエストはオリジンサーバーのデフォルトインデックスページを返します。これは「Log only」アクションを選択したため、予想通りの動作です。Web コンソールで WAF ヒットログを確認しましょう。

Screenshot

Screenshot

このルールが確かにヒットし、ログに記録されたことがわかります。

スクリーンショット

この部分は、WAF によってキャプチャされたリクエストの詳細を示しています。

スクリーンショット

ルールを確認ボタンをクリックして、ヒットした WAF ルールの詳細を確認します。

スクリーンショット

ここにそのルールの Edgelang 定義が表示されています。

Screenshot

WAF の無効化と再有効化

誤検知が発生した場合、このスイッチをオフにして、個別の WAF ルールを無効にすることができます。

スクリーンショット

無効化されたルールは WAF 設定ページに表示されます。

スクリーンショット

ここに無効化されたすべての WAF ルールのリストがあります。

スクリーンショット

これが先ほど無効にした WAF ルールです。

スクリーンショット

削除ボタンをクリックすると、このルールを再度有効にすることができます。

Screenshot

Screenshot

WAF ホワイトリスト

さらに、CPU リソースを節約するために、WAF をバイパスすべきすべてのリクエストを列挙する WAF ホワイトリストを追加することができます。

スクリーンショット

例えば、通常、静的リソースに WAF フィルタリングを使用する必要はありません。これらのリソースをスキップすることで、サーバーのオーバーヘッドを減らすことができます。

スクリーンショット

スクリーンショット

WAF ヒット後のブロックアクションの変更

今回は、「Log only」アクションを別のものに変更しましょう。例えば、403 エラーレスポンスを返すようにします。

埋め込み画像

Page Rule ページに戻ります。

Screenshot

再度ページルールを編集します。

スクリーンショット

アクションを変更します。

スクリーンショット

今回は悪意のあるリクエストをブロックします。

スクリーンショット

ここで感度レベルを設定できます。

スクリーンショット

また、スコアしきい値を設定することもできます。

Screenshot

これは、ヒットしたすべての WAF ルールのリスクスコアの合計です。先ほど設定したアクションは、合計スコアがしきい値に達した場合にのみ実行されます。このルールを保存します。

Screenshot

再度、設定の変更をリリースします。

Screenshot

Screenshot

Screenshot

Screenshot

新しいブロックアクションのテスト

再度、悪意のあるリクエストを送信します。

スクリーンショット

今回、サーバーは「403 Forbidden」レスポンスを返しました。

WAF のログページをもう一度確認しましょう。

スクリーンショット

ここに記録されたアクションは確かに「HTTP コード 403 でブロック」となっています。

Screenshot

WAF ルールセットの作成

WAF プラットフォームは非常に柔軟で拡張可能です。独自の WAF ルールセットを作成することもできます。

スクリーンショット

グローバル設定ページに移動します。

スクリーンショット

「グローバル WAF」メニュー項目をクリックします。

スクリーンショット

「新規ルールセット」ボタンをクリックします。

スクリーンショット

ここでルールセットの名前と定義を入力します。

スクリーンショット

Edge 言語で WAF ルールを定義できます。Edge 言語は Edgelang と略されます。

スクリーンショット

このルールセットを保存します。

スクリーンショット

このページを終了します。

Screenshot

OpenResty Edge における WAF の実装

OpenResty Edge の WAF は非常に効率的です。これは多くの先進的な最適化技術を実装しているためです。

すべての WAF ルールが参照する正規表現を 1 つのステートマシンに結合することをサポートしています。これにより、リクエストデータを 1 回スキャンするだけで、どのルールがマッチし、それらのルールのどの部分がマッチするかを即座に知ることができます。

また、すべての Edgelang ルールの定数文字列プレフィックスとサフィックスパターンを単一のツリー状データ構造に結合することもサポートしています。

Screenshot

Screenshot

Screenshot

これらの最適化は WAF プラットフォームだけのものではありません。

すべてのページルールと Edge 言語ルールも、まったく同じ最適化を持っています。

Screenshot

以上が本日お伝えする内容です。

Screenshot

OpenResty Edge について

OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高並発・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!