OpenResty Edge WAF:有効化・テスト・攻撃ブロック
OpenResty Edge には高性能な WAF が組み込まれており、Web コンソールからアプリケーションごとに有効化できます。ルールセットを選び、ログのみ(Log only)モードで試験運用し、ヒットログを確認してから、アクションを 403 レスポンスによるブロックへ切り替えます。設定はすべてのゲートウェイサーバーへ、リロードや再起動なしで反映されます。
OpenResty Edge の WAF エンジンは ModSecurity や lua-resty-waf などのオープンソース WAF より数倍高速です。具体的な数値は ModSecurity との WAF 性能比較をご覧ください。本記事ではコンソール操作に焦点を当て、WAF の有効化・テスト・チューニング・拡張を順に解説します。
ログのみモードでアプリケーションの WAF を有効化する
OpenResty Edge の管理者用 Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。
今回も test-edge.com ドメインのサンプルアプリケーションを使用します。
このアプリケーションに進みます。
ページルールのページに進みます。
前回のチュートリアルでリバースプロキシのページルールを設定しました。
ここで、いくつかの WAF ルールセットを有効にしましょう。
このページルールを編集するためにクリックします。
WAF を有効にするには、このスイッチをクリックする必要があります。
有効にする WAF ルールセットを選択できます。
ここでは、デフォルトのルールセットのみを保持します。
WAF ルールにヒットしたリクエストに対して実行するアクションを選択します。
「Log only」アクションは、リクエスト自体に影響を与えずに WAF ルールをテストするのに役立ちます。
このルールを保存します。
いつもと同様に、先ほどの変更をプッシュするために新しいバージョンをリリースする必要があります。
このボタンをクリックします。
リリースします!
新しいバージョンがすべてのゲートウェイサーバーに同期されました。
これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。
これらの設定変更には、サーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。
テスト攻撃を送信して WAF ログを確認する
ここで、SQL インジェクションを試みる悪意のあるリクエストを送信してみましょう。
リクエストはオリジンサーバーのデフォルトインデックスページを返します。これは「Log only」アクションを選択したため、予想通りの動作です。Web コンソールで WAF ヒットログを確認しましょう。
このルールが確かにヒットし、ログに記録されたことがわかります。
この部分は、WAF によってキャプチャされたリクエストの詳細を示しています。
ルールを確認ボタンをクリックして、ヒットした WAF ルールの詳細を確認します。
ここにそのルールの Edgelang 定義が表示されています。
個別 WAF ルールの無効化と再有効化
誤検知が発生した場合、このスイッチをオフにして、個別の WAF ルールを無効にすることができます。
無効化されたルールは WAF 設定ページに表示されます。
ここに無効化されたすべての WAF ルールのリストがあります。
これが先ほど無効にした WAF ルールです。
削除ボタンをクリックすると、このルールを再度有効にすることができます。
WAF ホワイトリストで CPU を節約する
さらに、CPU リソースを節約するために、WAF をバイパスすべきすべてのリクエストを列挙する WAF ホワイトリストを追加することができます。
例えば、通常、静的リソースに WAF フィルタリングを使用する必要はありません。これらのリソースをスキップすることで、サーバーのオーバーヘッドを減らすことができます。
WAF ヒット時に 403 を返す:感度とリスクスコアしきい値
今回は、「Log only」アクションを別のものに変更しましょう。例えば、403 エラーレスポンスを返すようにします。
ページルールのページに戻ります。
再度ページルールを編集します。
アクションを変更します。
今回は悪意のあるリクエストをブロックします。
ここで感度レベルを設定できます。
また、スコアしきい値を設定することもできます。
これは、ヒットしたすべての WAF ルールのリスクスコアの合計です。先ほど設定したアクションは、合計スコアがしきい値に達した場合にのみ実行されます。このルールを保存します。
再度、設定の変更をリリースします。
WAF ログで 403 ブロックを検証する
再度、悪意のあるリクエストを送信します。
今回、サーバーは「403 Forbidden」レスポンスを返しました。
WAF のログページをもう一度確認しましょう。
ここに記録されたアクションは確かに「HTTP コード 403 でブロック」となっています。
EdgeLang で独自の WAF ルールセットを作成する
WAF プラットフォームは非常に柔軟で拡張可能です。独自の WAF ルールセットを作成することもできます。
グローバル設定ページに移動します。
「グローバル WAF」メニュー項目をクリックします。
「新規ルールセット」ボタンをクリックします。
ここでルールセットの名前と定義を入力します。
Edge 言語で WAF ルールを定義できます。Edge 言語は Edgelang と略されます。
このルールセットを保存します。
このページを終了します。
有効にするルールセットの数が増えても、WAF は高速なままです。OpenResty Edge はすべてのルールの正規表現を単一のステートマシンに結合し、各リクエストを 1 回だけスキャンします。実装の詳細とベンチマーク数値は OpenResty Edge WAF が ModSecurity を上回る理由をご覧ください。
FAQ:OpenResty 上の WAF
オープンソース版 OpenResty に WAF は組み込まれていますか?
いいえ。オープンソース版 OpenResty には WAF モジュールは含まれていません。本チュートリアルの WAF は、OpenResty をベースにした商用ゲートウェイ製品 OpenResty Edge の機能で、上記で紹介したマネージドルールセット、ログのみモード、WAF ログ、ブロックアクションを標準搭載しています。
オープンソース版 OpenResty で ModSecurity は動かせますか?
OpenResty 向けの公式 ModSecurity モジュールはありません。libmodsecurity とサードパーティの nginx コネクタを OpenResty 同梱の nginx に対して自分でコンパイルする必要があり、しかも ModSecurity の元ベンダーは 2024 年にサポートを終了し、プロジェクトはコミュニティによる保守へ移管されました。現在は完全に自前で保守する道となります。
lua-resty-waf はまだ選択肢になりますか?
実質的になりません。lua-resty-waf は長年メンテナンスされておらず、新規の本番環境には推奨できません。OpenResty スタック上で保守されている WAF の現実的な選択肢は、本チュートリアルで設定した OpenResty Edge 組み込みの WAF です。
実トラフィックをブロックせずに WAF ルールをテストするには?
ルールセットを有効化する際に WAF アクションを「Log only」に設定します。ルールにマッチしたリクエストはそのままオリジンへ転送されますが、ヒットはすべて WAF ログに記録され、「ルールを確認」ボタンでどのルールにマッチしたかを確認できます。ルールに問題がなければ、アクションをブロックに切り替えて設定をリリースします。
OpenResty Edge WAF はどのようにブロックを判断しますか?
マッチした各 WAF ルールにはリスクスコアが設定されており、リクエストごとにマッチしたすべてのルールのスコアが合算されます。合計がしきい値に達した場合にのみブロックアクションが実行されます。しきい値は感度レベルの選択、またはスコアの直接入力で設定できます。
OpenResty Edge で単一の WAF ルールを無効化するには?
あるルールが正常なトラフィックへの誤検知を繰り返す場合は、WAF ログからそのルールだけをオフにできます。ルールセットの残りは動作し続けます。無効化されたルールは WAF 設定ページに一覧表示され、エントリを削除すると再有効化されます。静的リソースなどフィルタリング不要のリクエストはホワイトリストに登録でき、CPU の節約にもなります。
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、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!












































































