永続的なSSHトンネルのセットアップ

投稿者: Dan Franciscus 投稿日: 2020年1月22

たとえ SSL で保護されている場合でも、MITM 攻撃(Man-in-the-Middle, 中間者攻撃)を利用して資格情報が盗まれることがあり得ますが、資格情報を盗まれないように保護するために、クライアントとサーバー間の追加の保護層として SSH トンネルを利用することができます。

プロセスの最初のステップは、Windows Web サーバーに SSH トンネルを設定することです。このブログのために使っている環境では、Windows 2012 上で Apache Webサーバーを実行しています。Windows 2012 にはネイティブな SSH サーバーが付属していないので、トンネリングをサポートするには、サードパーティーの SSH サーバーソフトウェアをサーバーにインストールする必要があります。ここでは、OpenSSH を選択しました。

Windows サーバー上に OpenSSH をセットアップ

トンネルを設定するためには、まず、SSH 接続に使用するための専用のユーザーアカウントを作成する必要があります。ここでは、新しいユーザー、トンネルを作成して、管理者グループに追加します。

Net user tunnel password /add

Net localgroup administrators tunnel /add
open ssh 1次に、OpenSSH をインストールする必要があります。OpenSSH をインストールするには、まず OpenSSH ディレクトリの内容全体をフォルダー C:\Program Files\OpenSSH に、コピーします。下に示すように、フォルダー C:\Program Files\OpenSSH を Windows の PATH 環境変数に追加します。

 

open ssh 2

ファイルがインストールディレクトリにコピーされたら、管理者として PowerShell を開き、C:\Program Files\OpenSSH にブラウズします。./install-sshd.ps1 を実行します。コマンド net start sshd を使用して OpenSSH サービスを開始します。

Runas /user:tunnel powershell

すべてのキーを生成するために、コマンド ./ssh-keygen.exe をタイプします。

最後に、sshd_conf ファイルを少し変更する必要があります。C:\ProgramData\ssh に移動し、notepad.exesshd_conf を開き、以下に示すように、最後の2行をコメントアウトします。

#Match Group administrators

#AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

次のラインのコメントを外します。

PasswordAuthentication yes

すべての変更が完了したら、以下のコマンドを使用して SSH サービスを再起動します。

Net stop sshd

Net start sshd

open ssh 3id_rsa.pub という名前の別ファイルが同じディレクトリに作成されます。このファイルは公開キーを保持するファイルです。putty pscp.exe を使用して、id_rsa.pub ファイルを OpenSSH サーバーに SCP します。

OpenSSH サーバーで、id_rsa.pub ファイルを C:\Users\tunnel\.ssh\authorized_keysファイルにコピーします。

最後に、C:\ProgramData\ssh\sshd_conf ファイルを、ユーザー名とパスワードによるログインを禁止するよう変更します。これによって、キーを使用しないとログインできなくなります。

PasswordAuthentication no

SSH を再試行してください。

ssh tunnel@ip

今回はパスワードの入力を求められません。キーが一致しない場合、次のコマンドを使用して sha256 ハッシュ値を取得できます。

ssh-keygen –l –f .ssh/authorized_keys

ポート転送のセットアップ

次のステップは、トンネルのポート転送をテストすることです。この例では、トンネルを経由してポート8007を介してトラフィックを転送します。次のコマンドを実行してください。ip は openSSH サーバーの IP アドレスに置き換えてください。-4 は、IPv4 アドレスにのみバインドするようにコマンドを制限するために必要です。

ssh -4 –N -f user@ip -L 8007:ip:8007

再起動時にトンネルを自動的に開始するよう設定

最後のステップは、トンネルを永続的なものにすることです。ブート時に実行するスクリプトを作成します。 

vim /home/tunnel/check_ssh_tunnel.sh

次のスクリプトを作成する必要があります。

createTunnel() {

   #sleep for 60 seconds to allow the networking stack to start before executing at reboot

    sleep 60

 

   #run the port forwarding command as user tunnel

 

    su tunnel –c ‘/usr/bin/ssh -4 -f -N tunnel@192.168.31.5 –L 8007:192.168.31.5:8007’

 

   #check if the tunnel is up and echo Tunnel status

    if [[ $? -eq 0 ]]; then

        echo Tunnel to hostb created successfully

    else

        echo An error occurred creating a tunnel to hostb RC was $?

    fi

}

CreateTunnel

再起動時に実行されるよう、これを crontab に追加しますが、crontab を編集するには、次のコマンドを実行します。

crontab –e

次のラインを追加して、ファイルを保存します。

@reboot /home/tunnel/create_ssh_tunnel.sh

マシンを再起動してテストします。トンネルが実行されていることを確認するには、次のコマンドを実行します。

Ps –aux | grep ssh

トンネル接続が表示されるはずです。以上ですべてです。トンネルのセットアップがうまくいきますように。


Dan Franciscus
Dan Franciscus is a systems engineer and VMware Certified Professional (VCP) specializing in VMware, PowerShell, and other Microsoft-based technologies. You can reach Dan at his blog (http://www.winsysblog.com/) or Twitter at @dan_franciscus.
著者が作成したブログ
Prefooter Dots
Subscribe Icon

Latest Stories in Your Inbox

Subscribe to get all the news, info and tutorials you need to build better business apps and sites

The specified form no longer exists or is currently unpublished.