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 レスポンスが返ります。

まとめ

Proxy.py と SSH トンネルを組み合わせることで、認証のないプロキシポートを公開せずに、EC2 インスタンス上へ軽量な HTTP プロキシを構築できます。

proxy --port 8080 は認証なしでリッスンを開始します。ssh -L 8080:localhost:8080 によるトンネルを使えば、インスタンスのセキュリティグループでポート 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.