web-dev-qa-db-ja.com

HTTPリクエストの発信元IPアドレスのなりすまし

これは単一のサブネットでのみ機能する必要があり、悪意のある使用には使用できません。

Pythonで記述された負荷テストツールがあり、基本的にURLでHTTPリクエストをブラストします。IPベースのロードバランサーに対してパフォーマンステストを実行する必要があるため、リクエストは次の範囲から送信される必要があります。 IPの。ほとんどの商用パフォーマンスツールはこの機能を提供しますが、私はそれを自分のものに組み込みたいと思っています。

このツールは、Pythonのurllib2をトランスポートに使用します。リクエストを構成するパケットのスプーフィングされたIPアドレスを使用してHTTPリクエストを送信することは可能ですか?

22
Corey Goldberg

これはHTTPの誤解です。 HTTPプロトコルは、 [〜#〜] tcp [〜#〜] の上に基づいています。 TCPプロトコルは、要求を初期化するために3ウェイハンドシェイクに依存しています。

代替テキストhttp://upload.wikimedia.org/wikipedia/commons/archive/c/c7/20051221162333!300px-Tcp-handshake.png

言うまでもなく、発信元IPアドレスをスプーフィングすると、同期段階を通過することはなく、HTTP情報は送信されません(サーバーはそれを正当なホストに送信できません)。

IPロードバランサーをテストする必要がある場合、これはそれを行う方法ではありません。

46
Unknown

接続に使用する送信元アドレスを設定します。 「urllib2ソースアドレス」をグーグルすると http://bugs.python.org/file9988/urllib2_util.py になります。私はそれを試したことがありません。

実行しているシステムは、テスト元のIPで構成する必要があります。

5
Glenn Maynard

昨日これを学んだばかりなので、簡単なメモ:

すでにこれを知っていることを示唆していると思いますが、HTTPリクエストへの応答はすべて、ヘッダーに表示されているIPアドレスに送信されます。したがって、これらの応答を確認する場合は、ルーターを制御し、スプーフィングされたIPがすべて応答の表示に使用しているIPにルーティングされるようにルーターを設定する必要があります。

5
Anthony

HTTPリクエストを含むパケットのソースIPではなく、X-Forwarded-Forヘッダーに基づいて決定を下すようにロードバランサーを構成できるかどうかを確認することをお勧めします。重要な商用ロードバランサーのほとんどがこの機能を備えていることを私は知っています。

それができない場合は、セカンダリIPのヒープ全体でLinuxボックスを構成する必要があることをお勧めします-LBで静的ルートを構成する必要はなく、LinuxボックスをLBのデフォルトゲートウェイにするだけです。端末。

1
Rob Carr

LinuxボックスでIPエイリアスを使用して、必要な数のIPアドレスを設定できます。問題は、IPヘッダーを別のネットワークに設定し、そのネットワークに明示的なルートを設定しない限り、IPヘッダーにどのIPがスタンプされるかを予測できないことです。つまり-

current client address on eth0 = 192.168.1.10/24

server-side:
ifconfig eth0:1 172.16.1.1 netmask 255.255.255.0

client-side:
ifconfig eth0:1 172.16.1.2 netmask 255.255.255.0 
route add -net 172.16.1.0/24 gw 172.16.1.1 metric 0

必要な数のサブネットに対して繰り返します。 Apacheを再起動して、すべての新しいエイリアスインターフェイスにリスナーを設定すると、オフになって実行されます。

1
Howard Hart