たとえ SSL で保護されている場合でも、MITM 攻撃(Man-in-the-Middle, 中間者攻撃)を利用して資格情報が盗まれることがあり得ますが、資格情報を盗まれないように保護するために、クライアントとサーバー間の追加の保護層として SSH トンネルを利用することができます。
プロセスの最初のステップは、Windows Web サーバーに SSH トンネルを設定することです。このブログのために使っている環境では、Windows 2012 上で Apache Webサーバーを実行しています。Windows 2012 にはネイティブな SSH サーバーが付属していないので、トンネリングをサポートするには、サードパーティーの SSH サーバーソフトウェアをサーバーにインストールする必要があります。ここでは、OpenSSH を選択しました。
トンネルを設定するためには、まず、SSH 接続に使用するための専用のユーザーアカウントを作成する必要があります。ここでは、新しいユーザー、トンネルを作成して、管理者グループに追加します。
Net user tunnel password /add次に、OpenSSH をインストールする必要があります。OpenSSH をインストールするには、まず OpenSSH ディレクトリの内容全体をフォルダー C:\Program Files\OpenSSH に、コピーします。下に示すように、フォルダー C:\Program Files\OpenSSH を Windows の PATH 環境変数に追加します。
Net localgroup administrators tunnel /add
ファイルがインストールディレクトリにコピーされたら、管理者として 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.exe で sshd_conf を開き、以下に示すように、最後の2行をコメントアウトします。
#Match Group administrators
#AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
次のラインのコメントを外します。
PasswordAuthentication yes
すべての変更が完了したら、以下のコマンドを使用して SSH サービスを再起動します。
Net stop sshd
Net start sshd
id_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 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.
より優れた業務アプリケーションやウェブサイトの開発に役立つ、ニュース、情報、チュートリアルをご案内します。