Web アプリケーション ファイアウォール(WAF)は、セキュリティにおいて非常に重要です。しかし、そのパフォーマンス オーバーヘッドとルールの柔軟性との間の矛盾は、長年にわたりアーキテクチャ設計における困難なトレードオフでした。本記事では、新しい設計アプローチを考察します。WAF がもはや機能が固定されたセキュリティ コンポーネントではなく、プログラマブルなエッジ セキュリティ層となった時、どのようなメリットが得られるのでしょうか?

OpenResty Edge が、そのドメイン固有言語(EdgeLang)とコンパイル最適化技術を通じて、複雑なセキュリティ ルールを高性能なゲートウェイ ネイティブ命令にどのように変換するかを詳細に分析します。この方法は、ベンチマーク テストで顕著な性能優位性を示しただけでなく、さらに重要なことに、セキュリティ ポリシーの定義を開発者に委ね、ビジネス ロジックと深く融合させることを可能にします。本記事では、具体的な技術実装、性能データ、およびアーキテクチャ思想を通じて、高性能でプログラマブルな WAF が、受動的な防御コンポーネントから、企業アプリケーション デリバリー プロセスにおける不可欠な能力へとどのように進化するかを明らかにします。

高性能なプログラマブル WAF

「プログラマブル」なセキュリティ: EdgeLang

従来の WAF は、多くの場合、静的な設定ファイルや性能の低いスクリプトに制限されていました。しかし、OpenResty Edge は、当社が独自開発した EdgeLang を導入しました。これは、高性能ゲートウェイ向けに設計されたドメイン固有言語(DSL)です。EdgeLang は、設定ルールを記述するだけでなく、手書きの Lua よりもさらに簡潔で効率的な言語です。

  • 境界のない拡張性: EdgeLang は独立した存在ではありません。強力な相互運用性を持ち、カスタム Lua モジュールやコードを直接呼び出すことができ、既存のビジネスロジックやスクリプトを再利用することを可能にします。同時に、EdgeLang には豊富なプリコンパイル済みのライブラリとモジュールが内蔵されており、一般的なセキュリティ機能、データ処理、ネットワーク操作機能をカバーしています。この設計は、OpenResty Edge Node の軽量デプロイを保証するだけでなく、開発者に十分な拡張能力を提供し、EdgeLang を通じて複雑なセキュリティポリシーをシームレスにセキュリティ防御へ組み込むことを可能にします。

  • 手書きコードを凌駕する性能(Compiler Magic): 柔軟性が性能の犠牲を伴うと思われがちですが、EdgeLang ではむしろその逆です。

    • 高効率なコード生成: EdgeLang コンパイラは、ユーザーのルールを最適化された Lua コードへとコンパイルし、ゲートウェイサーバー上で実行します。組み込みのアルゴリズム最適化とコード生成戦略により、その実際の実行速度は通常、手書きの Lua コードよりも高速です。
    • 複数ルールにわたる徹底的な最適化: 当社のコンパイラは、先進的なグローバル最適化技術を採用しています。コンパイラはルールを一つずつ実行するのではなく、すべてのルールを包括的に分析し、全体として最適化された形で統合処理を行います。
  • 高効率なマッチング技術 以下の最適化により、ルールセットの規模が性能のボトルネックになることはありません。

    • 正規表現の統合 (Regex Merging): コンパイラは、すべての正規表現ルールを一つの巨大な状態機械 (DFA) に統合します。これにより、ルールの数に関わらず、システムはリクエストデータを一度スキャンするだけで、すべてのマッチするルールとその具体的な位置を特定できます。
    • プレフィックス/サフィックスツリー (String Trees): すべての定数文字列のプレフィックスおよびサフィックスパターンは、単一の高効率なツリー構造として構築され、検索プロセスを加速します。

きめ細やかな感度調整

WAF の 誤検知という業界共通の課題に対し、多段階の感度調整機能を提供することで、運用チームが実際の ビジネス シナリオに合わせて柔軟に対応できるようになります。

シナリオ別調整戦略

  • セキュリティ演習期間:感度を 厳格モードに設定し、多少の 誤検知があっても安全性を最優先します。
  • ビジネス ピーク時:感度を バランスモードに下げ、正規ユーザーへの影響を最小限に抑えます。
  • 通常運用時:標準モードを使用し、安全性と可用性の間で最適なバランスを見つけます。

リアルタイムで感度レベルを調整することにより、運用チームは各 ビジネス フェーズで迅速に対応し、誤検知がビジネスに与える影響を最低限に抑えることができます。これは完璧な解決策ではありませんが、現在最も実用的な対応戦略です。

圧倒的なパフォーマンス

Screenshot

データが物語っています。本検証では、実際の攻撃シナリオを想定し、1つの Worker プロセス、1つの CPU コアを使用し、208のルールをロードしてテストを実施しました。URI パラメータ数(URI Args、x軸)の増加に伴う、システム RPS(1秒あたりのリクエスト数、y軸)のパフォーマンスを測定しています。

  • スタート時点から圧倒的な差: 最もシンプルなシナリオ(URI パラメータ 1個)において、OpenResty Edge のスループット(約 5300 RPS)は、ModSecurity Nginx 版(約 1400 RPS)の 3.7 倍に達しています。
  • 耐障害性の決定的な差: リクエストの複雑さが増すにつれて(X軸の増加に伴い)、ModSecurity のパフォーマンスは指数関数的に低下しました。URI パラメータが 20個に達すると、従来の WAFは機能停止寸前となり(約 150 RPS)、サーバーリソースは枯渇しました。
  • 極限状態での耐性: 100個のパラメータという極端な高負荷下でも、OpenResty Edge は約 1500 RPSを維持しました。この数値は、ModSecurity が最も負荷の低い状態でのパフォーマンスよりも優れています。

これは何を意味するのでしょうか?

ユーザーエクスペリエンス:速さが、定着につながります。

同等のハードウェア環境において、OpenResty Edge の処理能力は競合製品の数倍から数十倍に達します。全 208 項目のセキュリティルールを有効にした場合でも、その性能は変わりません。これにより、セキュリティと速度の間で妥協する必要がなくなります。ユーザーは金融機関レベルのセキュリティ保護を享受しながらも、スムーズな読み込み体験を維持できます。

費用対効果:目覚ましいユニットエコノミクス。

OpenResty Edge は、わずか 1 つの CPU コア で、競合製品が数個から十数個のコアを必要とするスループットを達成可能です。クラウドネイティブ企業にとって、これはクラスター規模を大幅に削減し、AWS/GCP/Azure の月額料金を劇的に抑えられることを意味します。より少ないコアでより多くのトラフィックを処理することで、技術的優位性を直接、具体的な利益へと転換できます。

ゼロから WAF 防御システムを構築する

ステップ 1:全体的なセキュリティ基盤を確立する

具体的なアプリケーションに保護を設定する前に、まず統一されたグローバル WAF ルールを確立することをお勧めします。これにより、すべてのサービスに基本的なセキュリティ レベルが提供され、一般的で広範囲な攻撃を効率的にブロックできます。これは防御体制を構築する上での出発点となります。

グローバル WAF ルールの設定方法

ステップ 2:コア アプリケーションに専用の保護を有効にする

グローバル ルールを確立した後、次のステップは、最も重要なアプリケーションに対して WAF 機能を有効にすることです。有効にすることで、設定されたルール(グローバル ルールかアプリケーション専用ルールかに関わらず)が実際に適用され、アプリケーションの保護が開始されます。

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

ステップ 3:正確な許可設定でビジネスへの影響を回避する

WAF 保護を有効にした後、正常なビジネス リクエストが誤ってブロックされる場合があります。ビジネスの継続性と安定性を確保するためには、ホワイトリストを設定し、信頼できるリクエストをブロック ルールから正確に除外する必要があります。

アプリケーションの WAF ホワイトリストの設定方法

ステップ 4:究極の柔軟性を持つカスタム ルールを実現する

複雑なビジネス シナリオや高度なセキュリティ要件を持つユーザーにとって、標準の WAF ルールでは柔軟性が不十分な場合があります。Edgelang エッジ言語を使用することで、リクエストの任意のパラメータ(Header、Cookie、URL など)に基づいて動的で詳細な WAF ルールを記述し、最大限にカスタマイズ可能な保護ロジックを実現できます。

Edgelang を使用した WAF ルールの定義

上記のガイドを組み合わせて活用することで、グローバルからローカルまで、汎用的なものからカスタマイズされたものまで、強力かつ柔軟な WAF 防御体制を構築できます。

Beyond WAF:三位一体のアーキテクチャ

従来のネットワーク セキュリティの考え方では、WAF (Web アプリケーション ファイアウォール) を独立した境界防御システムと見なすことがよくありました。しかし、現代の複雑なビジネス アーキテクチャでは、単一の「セキュリティ ゲート」にのみ依存するだけでは、もはや十分ではありません。OpenResty Edge の設計思想は、まさにこの考え方を体現しており、プライベート CDN、API ゲートウェイ、WAF を一体化した統合プラットフォームを構築しています。これにより、WAF の機能を CDN および API ゲートウェイと深く連携させています。

分かりやすい比喩を通して、この「三位一体」の強力な側面を詳しく見ていきましょう。

最初の役割:CDN —— 「高速道路とトラフィック分散センター」

CDN (コンテンツ デリバリー ネットワーク) は、アーキテクチャ全体の最も外側のレイヤーであり、グローバル ユーザーに最も近い部分でもあります。その主な機能は「加速」と「トラフィック分散」です。

  • 位置: トラフィックの最初の接点であり、ユーザー アクセスの起点です。
  • 役割:
    • 加速とキャッシュ: 世界中に分散配置された「エッジ ロケーション」のように機能し、画像や CSS などの静的リソースをキャッシュしてユーザーに直接配信します。これにより、毎回遠く離れた「オリジン サーバー」にリクエストを戻す必要がなくなり、アクセス速度を大幅に向上させます。
    • トラフィック クリーニング: その膨大な帯域幅リソースにより、CDN はダムの放水路のように、大規模な L3/L4 層 DDoS 攻撃を吸収し、フィルタリングすることができます。これにより、バックエンドのサービスの可用性を保護します。
  • 関係: このアーキテクチャにおいて、CDN は WAF の「基盤」であり「最前線の盾」として機能し、精緻なセキュリティ検出が機能するために、最初の巨大な攻撃の波を食い止めます。

ステップ 2:WAF —— 「空港保安検査場」

トラフィックが CDN による一次的な振り分けと加速を経た後、WAF (Web アプリケーションファイアウォール) による詳細なセキュリティ検査フェーズに入ります。

  • 位置: CDN の直後、または CDN ノード内に直接組み込まれ、API ゲートウェイの前に配置されます。
  • 役割:
    • セキュリティ検査: WAF の役割は非常にシンプルです——各リクエストに危険な要素が含まれていないかを検査します。どの搭乗口(どの業務にアクセスするか)へ向かうかは関知せず、リクエストが安全であるかのみを確認します。リクエスト内に「爆弾」(SQL インジェクション)、「刃物」(XSS 攻撃)、または「偽造証明書」(悪意のある Cookie)が潜んでいないかを厳密に検出します。
  • 関係: WAF は業務セキュリティの中核をなす防御ラインであり、正当で無害なリクエストのみが後続の業務プロセスに進むことを可能にします。

ステップ 3:API ゲートウェイ —— 「搭乗口と司令塔」

セキュリティ検査を通過した「旅客」(リクエスト)は、最終的に API ゲートウェイに到達します。ここは具体的な業務システムへの「玄関口」です。

  • 位置: WAF の後に配置され、すべてのバックエンドマイクロサービスへの統一されたエントリポイントです。
  • 役割:
    • 認証 (Auth): 「あなたは誰ですか?」—— OAuth/JWT などの仕組みを通じて、リクエストの身元を認証します。
    • ルーティング (Route): 「あなたはどのサービスに行きたいですか?」—— リクエストの内容に基づき、それをバックエンドの特定のマイクロサービスへ正確にルーティングします。
    • きめ細かな制御 (Quota): 「あなたのチケットで VIP ラウンジに何回入れますか?」—— 異なるユーザーや API に対して、きめ細かなトラフィック制御とクォータ管理を行います。
  • 関係: API ゲートウェイは業務ロジックの「司令塔」であり、リクエストの認証、ルーティング、および詳細な管理を担当します。

これら 3つの層が独立した直列システムではなく、単一のソフトウェア内で実装される場合、アーキテクチャの利点は主に以下の点に現れます。

  • コンポーネント間のネットワーク遅延の解消: 分離型アーキテクチャでは、トラフィックは CDN、WAF、API ゲートウェイなどの異なるデバイスやサービス間で複数回のネットワーク ホップを必要とし、その都度、追加のネットワーク I/O オーバーヘッドと遅延が発生します。統合モデルでは、すべての処理(キャッシュ、セキュリティ検出、ルーティング)が単一のワーカプロセス (Worker Process) のコンテキスト内で完結します。これにより、データ処理がネットワーク境界を越える必要がなくなり、その結果、本質的な遅延が排除されます。これは、特に遅延に敏感な業務にとって極めて重要です。

  • 簡素化された技術スタックと運用モデル: 複数の異種システムを管理することは、個別の設定、監視、アップグレード、トラブルシューティングなど、多大な運用オーバーヘッドを発生させます。統一された技術スタックは、運用チームが単一のプラットフォームを習得・維持するだけで、エッジトラフィックのライフサイクル全体をカバーできることを意味し、これによりシステム全体の複雑さと人件費を削減します。

統合アーキテクチャの核心は、単なる機能の寄せ集めではなく、深いレベルでの統合にあります。このアーキテクチャは、トラフィック処理とセキュリティ保護などの機能を共有データプレーン上で統合することで、データパスを本質的に最適化し、運用モデルを大幅に簡素化します。

防御ツールから中核資産へ

OpenResty Edge でセキュリティ体制を構築することで、単なる高性能な WAF にとどまらず、ビジネスロジックと深く融合したプログラマブルなエッジセキュリティ層を実現できます。

  • EdgeLang を通じてセキュリティルールをネイティブコードにコンパイルするため、最も複雑な防御ロジックであってもパフォーマンスのボトルネックになることなく、基幹業務の応答速度を確保します。
  • セキュリティ、ゲートウェイ、トラフィック管理といった機能をプログラマブルなソフトウェアスタックに統合することで、より少ないコンポーネントと低い運用複雑性で、アジャイルなビジネスを支援します。
  • 静的なルールセットの制約から解放され、ビジネスコンテキストを認識する動的なセキュリティポリシーを記述できます。これにより、防御は受動的な対応から能動的な設計へと進化します。

将来のアプリケーション競争は、もはや「機能の豊富さ」だけでなく、「より迅速で、より安全、より信頼性の高い提供」が求められます。OpenResty Edge のプログラマブルセキュリティは、まさにこの時代の新たな「ビジネス保証エンジン」です。これを導入することは、単なる技術スタックの更新に過ぎないかもしれませんが、その背景には、セキュリティを「外部からの制約」から「内生的な能力」へと転換する第一歩となるでしょう。

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 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

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