EC2 上で Proxy.py を軽量 HTTP プロキシとして動かす
認証機構を持たない Proxy.py を EC2 インスタンス上で動かし、SSH トンネル経由で安全にアクセスします。
Proxy.py は軽量な HTTP プロキシサーバーで、テストやトンネリング用途なら小さな EC2 インスタンスでも動作します。
2022 年 5 月 27 日、AWS はリモートホストへのポートフォワーディングを導入しました。詳細は公式ドキュメントを参照してください。
セットアップ
Proxy.py をインストールします。
pip install proxy.py以下のコマンドで Proxy.py を起動します。
proxy --port 8080SSH セッションを閉じた後も Proxy.py を動作させるには、以下のコマンドを使います。
nohup proxy --port 8080 > /dev/null &起動後、ターミナルには以下のようなログが表示されます。
pid:3330 [I] plugins.load:85 - Loaded plugin proxy.http.proxy.HttpProxyPluginpid:3330 [I] tcp.listen:82 - Listening on 127.0.0.1:8080pid:3330 [I] pool.setup:108 - Started 1 acceptors in threaded mode...テスト
EC2 インスタンスへの SSH トンネルを確立します。
ssh -L 8080:localhost:8080 -i .ssh/YOUR_PRIVATE_KEY ec2-user@YOUR_HOSTGoogle へリクエストを送信し、プロキシをテストします。
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 のインバウンドルールがないことを確認してください。
関連記事
AWS EventBridge Scheduler:スケジュールに沿って EC2 を起動・停止する
Lambda を介さず、EventBridge Scheduler から EC2 API を直接呼び出し、cron スケジュールに従って EC2 インスタンスを起動・停止します。
Session Manager で EC2 に接続する(SSH 不要)
Systems Manager の Session Manager を使い、SSH キーも踏み台サーバーもポート 22 の開放も不要な状態で EC2 インスタンスにシェルアクセスする方法を解説します。
PhpStorm と Xdebug で AWS EC2 上の PHP をリモートデバッグする
PhpStorm と Xdebug を使って EC2 上の PHP アプリケーションをリモートデバッグする方法を、サーバー側の php.ini の設定から IDE のパスマッピングまで解説します。
SSH ポートフォワーディングで EC2 Windows インスタンスに安全にアクセスする
プライベートサブネット内の EC2 Windows インスタンスに SSH 踏み台ホスト経由でアクセスし、RDP をパブリックインターネットに公開しない方法を解説します。
Docker 環境で Greengrass コンポーネントをビルド・デプロイする
Greengrass Core Docker イメージを使い、AWS IoT Greengrass コンポーネントをローカルで開発します。
