この記事は公開されてからしばらく経過しています。情報が古い可能性がありますので、ご注意ください。


目次

  1. はじめに
  2. X-Forwarded-For とは
  3. X-Forwarded-For 以外のヘッダ
  4. 使用方法
  5. WafCharm での制限事項
  6. おわりに

安価で導入しやすいAWS WAFの運用課題の解決方法をご紹介

1.はじめに

2020年7月9日( US 現地時間)に X-Forwarded-For 等の HTTP ヘッダフィールドでの IP 制御が AWS WAF に追加されました。

CloudFront と ALB でそれぞれ WAF を登録していたユーザーにとっては ALB に WAF を集約することで WAF のコストを抑えられるため、嬉しい機能となっています。

では、どのような内容かを確認していきましょう。
https://aws.amazon.com/jp/about-aws/whats-new/2020/07/support-x-forwarded-for-header-available-aws-waf/

2.X-Forwarded-For とは

X-Forwarded-For とは HTTP ヘッダフィールドの一つでロードバランサやプロキシ等の機器を経由して接続した際にクライアントの送信元 IP アドレスを特定する際のデファクトスタンダードです。

WEB サーバなどから見るとクライアントから中間機器を経由して接続された場合、接続にきたIPアドレスは直前の中間機器の IP アドレスとなり、分析や制御ができない状態ですが、X-Forwarded-For を利用することでクライアントの IP アドレスが取得できることになります。

例えば、CDN 配下の ALB で考えると、ALB から見て接続元の IP アドレスは CDN の IP アドレスとなり、IP アドレスでの制御を行ってしまうと CDN からのアクセスを止めることになります。

X-Forwarded-For ヘッダの内容で制御を行うことにより、今まで CDN 側でしか IP アドレスでの制御が行えなかったものが、ALB 側でも IP アドレスの制御を行えるようになります。

注意点としては X-Forwarded-For はあくまでも経由する中間機器が正確な情報を付与する前提で考えられているため信頼できる中間機器の情報を採用する必要があることです。

3.X-Forwarded-For 以外のヘッダ

X-Forwarded-For 以外でも同様の機能を目的として付与される例はあります。

例えば CDN 業者によって、経由した際にクライアント IP アドレスを渡す目的で独自ヘッダを付与することがあります。

代表的な CDN で使用されるものとしては、True-Client-IP や CF-Connecting-IP, Fastly-Client-IP などがあります。
記載される情報がどのような形式かについては各業者から公開されているので、どのヘッダの情報を使用すればいいか確認しましょう。

重要な点は X-Forwarded-For でも触れましたが、信頼できる中間機器の情報を採用することです。
直前の接続元の IP アドレスが CDN の公開された IP レンジからで、その独自ヘッダであれば記載された情報は信用できるといった考え方が必要です。

4.使用方法

では実際に IP アドレスのルールで画面を確認してみましょう。

「Source IP address」を使用するか「IP address in header」を使用するか選択できるように変わっています。

ヘッダ名が入力できますので、指定ヘッダを入力しましょう。
デフォルトでは「X-Forwarded-For」となっています。

X-Fowarded-For の IP アドレスリスト中、どこの値をチェック対象とするのかを設定することができます。

X-Fowarded-For では経由する機器毎に IP アドレスが追記されます。
リスト(client1, proxy1, proxy2)で構成されていて一番左にクライアント IP で、その後経由した機器の IP アドレスが付与されます。

ですので、そもそものクライアント IP アドレスのチェックを行うのか、直前の中間機器の接続元を正常に経由しているかをチェックするのか、経由する中間機機の仕組みに合わせて設定することができます。

国別制限及びレートベースのルールでも使用できましたが、その場合の IP アドレスの位置は固定でした。

ルールの作成方法は過去のブログをご参照ください。

AWS WAF Classic

AWS WAF 解説 【第1回 基本構造編】
AWS WAF 解説 【第2回 Condition と Filter の関係性】
AWS WAF 解説 【第3回 String and regex matching の仕組みと活用例】

new AWS WAF

第1回 : 【new AWS WAF】変更点まとめ
第2回 : 【new AWS WAF】AWS マネジメントコンソール操作(マネージドルール編)
第3回 : 【new AWS WAF】AWS マネジメントコンソール操作(オリジナルルール編)
第4回 : 【new AWS WAF】AWS マネジメントコンソール操作(パターンセット・ルールグループ編)
第5回 : 【new AWS WAF】JSON 解説

レートベースルールの使い方

5.WafCharm での制限事項

現在 X-Forwarded-For 等の HTTP ヘッダフィールド での IP 制御を WafCharm 管理画面から登録できるように開発しています。

ホワイトリスト・ブラックリストは現在送信元 IP アドレスのみが制御対象ですが、対象の HTTP ヘッダフィールドを指定可能になる予定となります。
準備ができ次第ご案内いたします。

お客様側でルールを作成して適用することは問題ございません。

6.おわりに

今まで CloudFront 等の CDN を使用していた方で ALB でのみ AWS WAF の運用をまとめたいと考えていたユーザーには待ち望んでいた機能かと思います。

不要な通信を減らすという意味では CDN 用の制御と ALB 用の制御は分けて考えることが望ましいのですが、二つの WAF を管理することを避けたい方や費用を抑えたい方にとっては検討の価値があるのではないでしょうか。