EC2上でProxy.pyを軽量HTTPプロキシとして動かす

EC2上でProxy.pyを軽量HTTPプロキシとして動かす

Proxy.pyにはそれ自体の認証機構がないため、EC2インスタンス上で動かしつつSSHトンネル経由で安全にアクセスする方法です。

Takahiro Iwasa
3 min read

Proxy.pyは軽量なHTTPプロキシサーバーで、テストやトンネリング用途であれば小さなEC2インスタンス上でも十分に動作します。

ℹ️ Note

2022年5月27日、AWSはリモートホストへのポートフォワーディングを導入しました。詳細は公式ドキュメントを参照してください。

セットアップ

Proxy.pyをインストールします。

Terminal window
pip install proxy.py

以下のコマンドでProxy.pyを起動します。

Terminal window
proxy --port 8080

SSHセッションを閉じた後もProxy.pyを動作させ続けるには、以下のコマンドを使用します。

Terminal window
nohup proxy --port 8080 > /dev/null &

起動後、ターミナルには以下のようなログが表示されます。

pid:3330 [I] plugins.load:85 - Loaded plugin proxy.http.proxy.HttpProxyPlugin
pid:3330 [I] tcp.listen:82 - Listening on 127.0.0.1:8080
pid:3330 [I] pool.setup:108 - Started 1 acceptors in threaded mode
...

テスト

EC2インスタンスへのSSHトンネルを確立します。

Terminal window
ssh -L 8080:localhost:8080 -i .ssh/YOUR_PRIVATE_KEY ec2-user@YOUR_HOST

Googleへリクエストを送信して、プロキシをテストします。

Terminal window
curl www.google.com -x http://localhost:8080

プロキシが正しく動作していれば、GoogleからHTMLレスポンスが返ってきます。

まとめ

EC2インスタンス上でProxy.pyを動かし、SSHトンネル経由でアクセスしたところ、それ自体には認証層を持たない軽量なHTTPプロキシが用意できました。proxy --port 8080は認証設定なしでリッスンを開始するため、ssh -L 8080:localhost:8080によるトンネルは単なるアクセス手段ではなく、もしセキュリティグループがそのポートへのインバウンド通信を許可していた場合に、プロキシがオープンリレーになってしまうことを防ぐ唯一の防波堤でもあります。nohup proxy --port 8080 > /dev/null &で起動しておけば、SSHセッションを終了した後もプロセスが生き続けるため、テストやトンネリング用途の小さなインスタンスには便利です。ただし、放置したまま無人稼働させる前に、プロセスが127.0.0.1にバインドされたままであることと、セキュリティグループにポート8080へのインバウンドルールが存在しないことを確認しておく価値があります。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.