web-dev-qa-db-ja.com

最も簡単なリバースプロキシ

リモートサイトに接続するプロキシをローカルで簡単に設定する方法を探しています。適切なシステムに何もインストールしたくない。構成ファイルを1つでもいじるのではなく、1つのコマンドライン呼び出しで呼び出すことができれば、すばらしいでしょう。

その目的は、私が開発している私のローカルアプリと、他の誰かが提供していてHTTPSを使用するリモートサーバーの間のトラフィックを盗聴することです。

Ruby PythonまたはNodeパッケージであることが望ましいので、次の行に沿って何かを実行できます。

mkdir simplest-proxy; cd simplest-proxy; bundle init
echo "gem 'simplest-proxy'" >> Gemfile; bundle --path vendor/bundle
bundle exec bin/simplest-proxy -p 8080 https://remote.site.example.com/

または

virtualenv simplest-proxy; cd simplest-proxy
bin/easy_install simplest-proxy
bin/simplest-proxy -p 8080 https://remote.site.example.com/

または

mkdir simplest-proxy; cd simplest-proxy
npm install simplest-proxy
node_modules/.bin/simplest-proxy -p 8080 https://remote.site.example.com/

これにより、アプリがlocalhost:8080に接続できるようになります。これにより、リクエストがリモートサイトに転送されます(およびHostヘッダーとその他の必要なものはすべて書き換えられます)。 WireSharkでloを見て、何が起こっているのかを知ることができます。

私はpypi、rubygems、npmをざっと見て回りましたが、これまでに見つけたものは機能していません(proxylet、それ以外の場合は非常に有望に見えた)。 (dj-revproxy)または書き直すのではなく、正しいHostnode-reverse-proxy)で呼び出されることを期待しています。

更新:今のところProxyPass/ProxyPassReverse構成のApacheを使用しますが、やり過ぎであり、構成ファイルを操作する必要があります。

更新:適用できないもう1つのソリューションは、リモートサイトをエミュレートするものではなく、実際のHTTPプロキシです。リモートサイトはHTTPSサイトであるため、プロキシ内でアプリがCONNECTを実行するだけで、何も得られません。

22
clacke

見つかりました http://mitmproxy.org/

私のユースケースは以下によってカバーされます:

mitmproxy -p 8080 -P https://remote.site.example.com/

しかし、それだけではありません。また、実行されたすべての要求を表示するためのncurses UIを提供し、それらを検査することができます。これにより、WireSharkが不要になります。

質問に示すように、ディストリビューションパッケージインストーラーまたはeasy_installを使用してインストールします。

virtualenv mitmproxy; cd mitmproxy
bin/easy_install mitmproxy
bin/mitmproxy -p 8080 -P https://remote.site.example.com/

編集:

Mitmproxyバージョン3の場合、引数は次のようになります。

mitmproxy -p 8080 --mode reverse:https://remote.site.example.com/
33
clacke