全1874文字
PR

 SSHの用途はリモートアクセスだけではない。SSHが確立した安全な通信路を利用して、別のアプリケーションにデータを転送することもできる。

 TCPやUDPでは、アプリケーションを区別するのにポート番号を利用する。例えばファイルを転送するFTPではTCPの20や21番ポート、名前解決を実現するDNSではTCPおよびUDPの53番ポートを使用する。

 SSHは初期設定ではTCPの22番ポートを使用する。だが、SSHサーバーの22番ポートに届いたパケットを別のポートに転送する機能がある。この機能を「ポートフォワーディング」と呼ぶ。ポートフォワーディングを利用する場合には、SSHクライアントソフトで転送先のIPアドレスやポート番号を指定する。

SSHによるポートフォワーディング
SSHによるポートフォワーディング
[画像のクリックで拡大表示]

 ポートフォワーディングを利用すれば、SSHサーバー宛てに届いたデータを、例えば別のサーバーの80番ポートに転送することが可能だ。

 これにより、HTTPS(HTTP over TLS)に対応していないWebサーバーであっても、比較的安全性が高い通信が可能になる。盗聴の危険性が高いインターネットは安全なSSHで通信し、危険性が低い社内ネットワークに入ってからHTTPに変換するからだ。

HTTPSのトンネルにSSHを通す

 企業・組織では、社内ネットワークとインターネットの境界にファイアウオールなどを設置して通信を制御している。セキュリティーを高めるために、HTTPやHTTPS以外の通信は許可していない企業・組織は多い。こうしたネットワーク環境では社内ネットワークから外部のSSHサーバーにアクセスできない。

 そのような場合に有用なのが、SSH over HTTPSという仕組みだ。SSH over HTTPSを利用するには、社内ネットワークにプロキシーサーバーを設置する必要がある。

 プロキシーサーバーには、SSHクライアントとSSHサーバーの通信がHTTPSだと思わせて通信を中継させる。そのために、SSHクライアントからプロキシーサーバーへの接続は、HTTPのCONNECTメソッドを使用する。

 CONNECTは、HTTPS通信をプロキシーサーバーに中継させる場合に使用するメソッドだ。HTTPSは暗号化通信なので、プロキシーサーバーは中身が分からない。CONNECTメソッドを使うと、プロキシーサーバーはパケットの中身を見ずに中継するので、SSHのパケットもHTTPSのパケットとして中継する。

 プロキシーサーバーを経由してHTTPSのトンネルを張り、その中にSSHのパケットを通すイメージだ。

 具体的な流れは次のようになる。SSHクライアントはプロキシーサーバーにHTTPリクエストを送信し、SSHサーバーへの接続を要求。プロキシーサーバーはSSHサーバーとTCPのコネクションを確立し、SSHクライアントにHTTPレスポンスを返す。

 以降はSSHクライアントとSSHサーバーの間にプロキシーサーバーを介した通信路が確立されるので、これを通して暗号化鍵などを共有し、SSHによる暗号化通信を開始する。

SSH over HTTPSの仕組み
SSH over HTTPSの仕組み
[画像のクリックで拡大表示]