web-dev-qa-db-ja.com

SSHのみ:ssh SOCKSプロキシを介したリバーストンネルWebアクセス

たまに、アクセスが非常に制限されているサーバーに接続する必要があります。
DMZファイアウォールでは、インバウンドSSHのみが許可されています。
アウトバウンドHTTP接続がブロックされています。

SSHセッションを介してWebアクセスをトンネルする簡単な方法を探しているので、yum/apt-getを使用してアップデートとソフトウェアをインストールできます。理想的には、保護された領域に追加のソフトウェア/サービスをインストールすることは避けたいです。

あなたはそのような状況で何をしますか?

SSHには-D <port> SOCKSプロキシオプション。ただし、残念ながら、これはクライアントからサーバーへの一方向のみであり、逆のオプションはありません。

16
Kaii

私はようやくsshだけでこれを達成することができました:

  1. クライアントマシンでローカルSOCKSプロキシを開始します(ssh -Dを使用)
  2. リモートサーバーに接続し、ローカルのSOCKSプロキシへのリバースポート転送(ssh -R)をセットアップします
  3. 転送されたプロキシを使用するようにサーバーソフトウェアを構成する

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
27
Kaii

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

3
Richard Metzler