2016-06-20 5 views
0

私はturn on Proxy Protocol on ELBです。ELBのプロキシプロトコルヘッダを再利用

私の場合、私はELB上でプロキシプロトコルヘッダを再利用したいと考えています。出来ますか?

私はすでにプロキシプロトコルヘッダをELBに設定してリクエストを送信しています。私はELBにこの特定のヘッダーを渡し、さらにそれを渡すようにしたい。新しいもの(ソース/ポートが元のものと異なる)を生成しないでください。

+0

プロキシプロトコルのサポートをオフにして、ELBリスナーをTCPモードにしてください。これはまさにあなたが見なければならない動作ですが、なぜこのようにしたいのか説明したいことがあります。私はこれが役に立つと思う状況を考えるのに苦労しています。 –

+0

@ Michael-sqlbot、ありがとうございます。私たちは、プロキシプロトコルヘッダを設定するアマゾンインフラストラクチャからバランサの層を持っています。そして、私たちは直接elbにリクエストを渡すことはできません。 – fl00r

答えて

1

PROXYを参照すると、「ヘッダー」は技術的には不正確ではありませんが、誤解を招くまたはあいまいな用語である可能性があります。

接続の開始時に到着するという意味では「ヘッダー」ですが、HTTPリクエストヘッダーであるX-Forwarded-Forとは異なり、HTTPリクエストヘッダーではありません。

そのシンプルでエレガントな、このプロトコルのバージョン1は、TCP接続の開始時にメッセージを注入:

PROXY TCP4 192.168.0.1 192.168.0.11 56324 443\r\n 

フィールドは、プロトコル(IPv4の上TCP)、送信元IP、宛先IP、ありますsource-port、destination-port、それぞれ1つのスペースで区切ります。

PROXYプロトコルをスタックで使用する場合、必須です。接続の開始時にメッセージが見つからないか不正な形式のPROXYがエラー状態です。 PROXYメッセージの存在には、X-Forwarded-Forによって提供される信頼レベルよりも高い信頼レベルが適用されます。これは、変更されたパススルー(後の値は以前の値に追加されます)です。 PROXYプロトコルでは、複数の値をカスケードするための公式の余裕がありません。

この値を「内部」に転送する必要がある場合は、信頼できる送信元アドレスからの要求を受け入れるようにELBの受信セキュリティグループを制限することが重要です。

それが完了すると、TL; DR:ELB自体のTCPモードでELBリスナーの設定

(ないHTTP)および無効プロキシプロトコルは、元の、外部PROXYメッセージはへ通って輸送されることを可能にしますELBの背後にあるシステム。

ELBではHTTPモードでこれを渡すことはできません.ELBでは要求時にその要求を想定せず、複数のフロントエンドクライアントからの要求に対してバックエンド接続を再利用できるためです。着信接続のクライアントマシンのIP送信元アドレスとポート(HTTPリクエストの送信元IPとポートではない)を識別するように設計されています。前述のように、HTTPリクエストヘッダーではありません。

PROXYプロトコルの背後にあるアイデアは、ペイロードを認識しないコンポーネントのスタックによって発信元クライアントを識別することです。したがって、この場合、ELBはそのモデルに従う必要があります。 (もちろん、中間コンポーネントがストライプオフしてから再注入することも可能ですが、多くの場合、これはやや意味がありませんが、ELBはこの設定を処理しません)。

TCPモードでは、ELBはプロトコルに依存しなくなり、フロント側とバック側の接続には1対1の関係があるため、メッセージは正常に送信され、正常に動作するはずです。

注意すべき点は、ELBがTCPモードでパケットペイロードを処理する方法に依存する可能性があります。プロキシプロトコルは、PROXYメッセージ全体が第1のデータパケットに存在することを要求する。 (プロトコルは、データが常に1つのセグメントに収まるように設計されています。)ELBがこれを断片化してしまうと、宛先が許容される必要があります。これは問題にはならないと思われますが、最終的な宛先が断続的に入力ストリームを無効と見なす可能性があることに注意してください。