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レスポンスが返ってきます。
まとめ
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へのインバウンドルールが存在しないことを確認しておく価値があります。
Related posts
PythonでOPC UAの変数ノードを監視する
opcua-asyncioを使ってOPC UAの変数ノードの変更を購読し、ポーリングではなくサーバーからのプッシュ更新にクライアントが反応するようにします。
TesseractとPytesseractによる日本語PDFのOCR処理
Tesseract OCR v4とpytesseractを使ってPDFから日本語テキストを抽出し、出力をきれいにするために必要な正規化処理についても扱います。
インターネット接続なしで Python パッケージをインストールする
インターネットに接続できない環境向けに、別のマシンで pip download したパッケージを転送し、--find-links と --no-index でオフラインインストールする方法。
Session Manager で EC2 に接続する(SSH 不要)
Systems Manager の Session Manager を使い、SSH キーも踏み台サーバーもポート 22 の開放も不要な状態で EC2 インスタンスにシェルアクセスする方法。
PhpStormとXdebugでAWS EC2上のPHPをリモートデバッグする
PhpStormとXdebugを使ってEC2上のPHPアプリケーションをリモートデバッグする方法。サーバー側のini設定からIDEのパスマッピングまでを解説。
