OpenResty Edge で真のクライアント IP アドレスを正確に復元する
本日は、OpenResty Edge のもう一つの機能をご紹介いたします:リクエストがサードパーティのプロキシを経由する場合に、OpenResty Edge から真のクライアント IP アドレスを取得する方法です。
ほとんどの場合、リクエストがサードパーティのプロキシを経由すると、OpenResty Edge が受信するクライアントアドレスはプロキシサーバーのアドレスになります。
時には、条件判断、リクエスト頻度制限、ログ記録などのシナリオで使用するために、真のクライアント IP アドレスを取得する必要があります。
グローバル設定で「信頼できる実 IP 設定元」と「実 IP ヘッダー」を設定する
OpenResty Edge の Admin Web コンソールに入りましょう。これは私たちのコンソールのサンプルデプロイメントです。各ユーザーは自身のローカルデプロイメントを持っています。
まず、「Global Config」ページに移動します。
ここでは複数の設定を行う必要があります。
最初に Trusted hosts to set real IP
を設定します。
Trusted hosts to set real IP
は、Real IP header
の設定を許可する IP アドレスのリストです。リクエストが信頼されていないホストからの場合、Real IP header
は無視されます。
IP アドレス 52.53.251.226
を入力します。
次に、プロキシの真の IP を含むリクエストヘッダーを指定する必要があります。通常、これは X_Forwarded_For
です。
リクエストヘッダーに複数の IP アドレスが存在する場合、システムはリスト内の最後の IP アドレスを採用します。
保存します。
この新しい変更をプッシュするために、リリースする必要があります。
このボタンをクリックします。
リリースします!
変更が全てのゲートウェイサーバーに同期されました。これで、先ほどの変更が全てのゲートウェイクラスターとサーバーにプッシュされました。
私たちの設定変更は、サーバーのリロード、再起動、またはバイナリアップグレードを必要としません。そのため、非常に効率的でスケーラブルです。
クライアントアドレスを出力するようにアプリケーションを設定する
次に、クライアントアドレスを出力できるようにアプリケーションを設定します。
以前のサンプルアプリケーション、test-edge.com を引き続き使用できます。
そのアプリケーションに入ります。
「Page Rules」ページに移動します。
すでにページルールが 1 つ定義されています。このページルールは、特定のアップストリームへのリバースプロキシを設定しています。
クライアントアドレスを出力するために、EdgeLang を使用してページルールを作成します。EdgeLang については、専用のビデオで紹介しています。
「Edit」ボタンをクリックします。
条件を真に設定し、以下の部分がどのような状況でも実行されるようにします。
クライアントアドレスを出力します。
保存します。
いつものように、この新しい変更をプッシュするためにリリースする必要があります。
このボタンをクリックします。
リリースします!
変更が全てのゲートウェイサーバーに同期されました。
OpenResty Edge で受信したクライアントアドレスを検証する
ゲートウェイサーバーにリクエストを送信し、OpenResty Edge で受信したクライアントアドレスを検証します。
プロキシとして使用するために、アメリカにあるリモートサーバーにターミナルからログインします。
curl
コマンドラインツールを使用して HTTP リクエストを送信します。
curl http://test-edge.com/
出力されたクライアントアドレスがプロキシのアドレスであることがわかります。
次に、真のクライアントアドレスを含む X-Forwarded-For
ヘッダーを持つ HTTP リクエストを送信します。
curl http://test-edge.com/ -H "X-Forwarded-For: 104.28.243.40"
出力されたクライアントアドレスが真のアドレス(104.28.243.40)であることがわかります。
次に、X-Forwarded-For
ヘッダーに複数の IP アドレスが含まれている場合を見てみましょう。
curl http://test-edge.com/ -H "X-Forwarded-For: 104.28.243.40, 105.56.18.52"
ヘッダーの最後の IP アドレスが出力されていることがわかります。
このサーバーからログアウトします。
信頼されたホストリストにない別のサーバーにログインします。
同様に X-Forwarded-For
ヘッダーを持つリクエストを送信します。
curl http://test-edge.com/ -H "X-Forwarded-For: 104.28.243.40"
出力されたクライアントアドレスがプロキシのアドレスであることがわかります。
真の IP は、クライアント IP に関連するすべてのことに影響を与えます。
いくつかの例を見てみましょう。Client city
と Client address
が影響を受けます。
Limit request rate
アクションも影響を受けます。
ただし、HTTPS リクエストの SSL または TLS ハンドシェイクレートを制限する機能は影響を受けません。なぜなら、ハンドシェイクプロセス中にクライアントアドレスの書き換えが行われないためです。
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(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!