たまに、アクセスが非常に制限されているサーバーに接続する必要があります。
DMZファイアウォールでは、インバウンドSSHのみが許可されています。
アウトバウンドHTTP接続がブロックされています。
SSHセッションを介してWebアクセスをトンネルする簡単な方法を探しているので、yum/apt-getを使用してアップデートとソフトウェアをインストールできます。理想的には、保護された領域に追加のソフトウェア/サービスをインストールすることは避けたいです。
あなたはそのような状況で何をしますか?
SSHには-D <port>
SOCKSプロキシオプション。ただし、残念ながら、これはクライアントからサーバーへの一方向のみであり、逆のオプションはありません。
私はようやくssh
だけでこれを達成することができました:
ssh -D
を使用)ssh -R
)をセットアップします1。バックグラウンドでローカルsocksプロキシを開始します
SSH経由でlocalhostに接続し、ポート54321でSOCKSプロキシを開きます。
$ ssh -f -N -D 54321 localhost
-f
はバックグラウンドでSSHを実行します。
注:コマンドを開始したターミナルを閉じると、プロキシプロセスが強制終了されます。また、終了したらターミナルウィンドウを閉じるか、自分でプロセスを強制終了することで、自分の後にクリーンアップすることを忘れないでください!
2。リモートサーバーに接続し、リバースポート転送をセットアップする
リモートポート6666をローカルポート54321にバインドします。これにより、ローカルsocksプロキシがポート6666のリモートサイトで使用できるようになります。
$ ssh root@target -R6666:localhost:54321
3。転送されたプロキシを使用するようにサーバーソフトウェアを構成する
プロキシ127.0.0.1:6666
を使用するように、yum、apt、curl、wget、またはSOCKSをサポートするその他のツールを構成するだけです。
ボイラ!幸せなトンネリング!
4。オプション:転送されたプロキシを使用するようにサーバーソフトウェアを構成します
proxychains
をターゲットサーバーにインストールすると、処理が非常に簡単になることがわかりました。
LD_PRELOAD
トリックを使用して、任意のソフトウェアがSOCKSプロキシ(telnet
も含む)を使用できるようにし、任意のコマンドからプロキシにTCPおよびDNS要求をリダイレクトします。
転送されたsocksプロキシを使用するように/etc/proxychains.conf
を設定します。
[ProxyList]
# SSH reverse proxy
socks5 127.0.0.1 6666
proxychains
を使用して、TCPを使用する任意のツールをトンネルします。
$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
SSHの新しいバージョンでは、ssh-R <[bind_address:]port>
の非常にシンプルなオプションを使用できます。ホストのポートとバインドアドレスのみを使用し、クライアント側のポートを指定しないと、リバースSOCKSプロキシが作成されます。
これは、新しいSSHバージョンのmanページにも記載されています。
[...]明示的な宛先が指定されていない場合、sshはSOCKS 4/5プロキシとして機能し、リモートSOCKSクライアントによって要求された宛先に接続を転送します。
これは、curlが http://ifconfig.io のような単純な「Give me my IP」-APIに接続することでテストできます。
$ curl ifconfig.io
対
$ curl --socks5 localhost:<PORT> ifconfig.io