web-dev-qa-db-ja.com

SSLを介したSSHトンネリング

私のシステムの1つには、http(s)以外の発信を禁止するファイアウォールがあります...

一部のユーザーはsshを実行する必要がありますが、実行できません。最初にポート443でsshを実行しようとしましたが、成功しませんでした。

私はそれをグーグルで調べて、いくつかの設定が必要なstunnelを使用してそれを行うことができることがわかったので、それを行う方法は?

1
Maythux

この構成は2つの部分で行われます。最初の部分は、リモートSSHサーバーで行われます。 2番目の部分はローカルマシンで行われます。

サーバー側の指示:

まず、stunnelをインストールします。

Sudo apt-get install stunnel4

SSL証明書を作成します(365日間):

openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
Sudo mv stunnel.pem /etc/stunnel/

トンネルを443(https)から22(ssh)にトンネルするように構成します。

設定ファイルを作成して、SSH over SSLを使用するニーズに対応します。

gksu gedit /etc/stunnel/stunnel.conf

これらを書く:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = public_ip:443
connect = 127.0.0.1:22

上記の構成は、生成した証明書の場所と、接続を受け入れて転送する場所をstunnelに指示します。この場合、stunnelはポート443(https)でpublic_ipをリッスンし、そこで接続を22(ssh)のローカルホストにリダイレクトします。

Stunnelサービスを開始するには、/ etc/default/stunnel4でアクティブにする必要があります。 ENABLED行を0から1に変更します。

最後に、サービスを開始して、クライアント構成に進むことができます。

Sudo service stunnel4 start

Netstatコマンドを使用して、stunnelがリッスンしていることを確認できます。

netstat -natp | grep :443

クライアント側の指示:

まず、stunnelパッケージをインストールします。

Sudo apt-get install stunnel4

SSL証明書を作成します(365日間):

openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
Sudo mv stunnel.pem /etc/stunnel/

構成ファイルを作成します。

gksu gedit /etc/stunnel/stunnel.conf

これらを書く:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = 127.0.0.1:2200
connect = remote_ip:443

Stunnelサービスを開始するには、/ etc/default/stunnel4でアクティブにする必要があります。 ENABLED行を0から1に変更します。

サービスを開始します。

Sudo service stunnel4 start

接続する

これで、サーバーとクライアントの両方でstunnelサービスが実行され、安全な接続を確立する準備が整いました。これで、ポート2200でローカルマシンに接続すると、ポート443でリモートIPに接続し、安全なSSL接続を作成し、もう一方のポート22に接続します。暗号化されたSSH接続は、ポート443を使用した暗号化されたSSL接続でラップされます。

ssh localhost -p 2200

ソース: link1Link2

3
Maythux

stunnelは永続的な設定には適していますが、よりアドホックなソリューションが必要な場合は、2つのトンネルを連結できます。

たとえば、ホストAにホストBのポート443にアクセスさせたいが、ファイアウォールによってブロックされているため、Aポート22とBポート443の両方にアクセスできるホストCからトンネルを作成しようとしています。

ssh -R 443:B:443 root@Aは、Ubuntuまたはルートアカウントまたはルートsshアクセスを無効にするdistでは機能しません。

ssh -R 443:B:443 other_user@Aは、ユーザー "other_user"がSudoの許可を持っている場合でも、Aでリッスンポートを設定できるのはrootのみであるため機能しません。

ssh -R 1443:B:443 other_user@Aは、Aが127.0.0.1:1443を使用してB:443にアクセスできるようにします。これは素晴らしいことですが、ポートを変更できない場合があります(アプリでポート番号がハードコードされている場合があります)。
その場合、以前のA-> C-> Bトンネルに加えてssh -L 443:127.0.0.1:1443 127.0.0.1を使用して、A:443からA:1443に別のトンネルを追加できます。

2
Pere Cortada