本章では、SSH™プロトコルの長所、リモートシステムとの安全な接続を確立する際に発生するイベントのシーケンス、SSHのさまざまな層、そして、システムに接続しているユーザーが確実にSSHを使用する方法を紹介します。
一般に、シェル(telnet、rlogin、rsh)を介してリモートから別のシステムにログインしたり、ホスト(ftpやrcp)間でファイルをコピーしたりする方法は安全ではないので、避けなければなりません。SSHや暗号化された仮想プライベートネットワークを使用しているリモートホストにのみ接続するようにしましょう。安全な方法を用いてリモートから他のシステムにログインすれば、ユーザーシステム、リモートシステムともセキュリティ上のリスクが軽減されます。
SSH(Secure SHellの略)は、2つのシステム間で安全な接続を確立するためのプロトコルです。SSHを使用して、クライアントマシンはサーバーとの接続を開始します。SSHでは、次の保護手段が取られます。
初期接続後のセッションで、クライアントは初期接続のときと同じサーバーに接続していることを確認できます。
クライアントは、サーバーに対し、ユーザー名やパスワードなどの認証情報を暗号化形式で転送できます。
接続時に送受信したデータはすべて強力な暗号化を用いて転送されるので、解読は非常に難しくなります。
クライアントは、シェルプロンプトから起動したX11[1]アプリケーションを使用することができます。この方法では、安全なグラフィカルインターフェイス(X11フォワーディング)が提供されます。
特に実行しているサービスが多い場合は、サーバーもSSHも利用します。ポートフォワーディングを使用すると、安全性に欠けるプロトコル(たとえば、POP)が暗号化され、リモートマシンとの安全な通信を確立することができます。SSHにより、通常は公衆網上での送信に危険を伴うさまざまなタイプの通信を比較的簡単に暗号化することができます。
Red Hat Linux 7.1には、一般OpenSSHパッケージ(openssh)の他に、OpenSSHサーバー(openssh-server)パッケージとクライアント(openssh-clients)パッケージも含まれています。一般OpenSSHパッケージをインストールしておかなければ、サーバーパッケージとクライアントパッケージを動作させることはできません。Red Hat LinuxシステムへのOpenSSHのインストール方法と配置方法については、オフィシャル Red Hat Linux カスタマイズガイドを参照してください。
OpenSSHパッケージには、OpenSSLパッケージ(openssl)が必要です。OpenSSLは、OpenSSHによる暗号化通信をサポートする、いくつかの重要な暗号ライブラリをインストールします。OpenSSHパッケージをインストールする前に、opensslパッケージをインストールしておいてください。
オープンソースのアプリケーションや自由に利用できるアプリケーションを含め、SSHプロトコルを使用できるクライアントプログラムとサーバープログラムはたくさんあります。現在使用されている主要なほとんどすべてのオペレーティングシステムに合わせて、各種のSSHクライアントバージョンが用意されています。システムに接続しているユーザーがRed Hat Linuxを実行していない場合でも、そのユーザーのオペレーティングシステムに固有のSSHクライアントを探し、使用することができます。
ネットワークトラフィック問題としては、パケットの盗聴、DNSやIPの偽装[2]、偽のルーティング情報の公開などが挙げられます。一般的に、これらの問題を分類すると次のようになります。
2つのシステム間の通信の干渉 — この場合は、ネットワーク上の通信エンティティ間のどこかに第三者が介在し、その通信エンティティ間で受け渡しを行っている情報がコピーされます。介在している第三者は、情報を横取りしたり、情報を変更してから当初の宛先に送信したりすることもあります。
特定ホストの偽装 — この場合は、介在しているシステムが、メッセージの本来の宛先であるかのように振る舞います。この手口が成功すると、クライアントはだまされたことに気づかずに、トラフィックが正しく所定の宛先に届いているものと勘違いして、介在するシステムと通信し続けることになります。
どちらの手口でも結果的に情報が横取りされ、不快な思いをすることになります。LAN上のすべてパケットを盗聴された場合でも、不当な複製ホストを指すようにDNSサーバーがハックされた場合でも、いずれにしても大きな被害を受ける可能性があります。
リモートシェルログインとファイルコピーにSSHを使用すれば、これらのセキュリティ問題を大幅に減らすことができます。サーバーのデジタル署名により、サーバーの同一性を確認できます。パケットはそれぞれ暗号化されるため、クライアントシステムとサーバーシステムの間に介入しても、2つのシステム間の通信全体を使用することはできません。各パケットは、ローカルシステムとリモートシステムしか知らない鍵を使用して暗号化されるので、サーバー側、クライアント側のいずれかのシステムを偽装しようとしても成功しません。
[1] | X11とは、X11R6ウィンドウディスプレイシステムのことです(旧称はX)。Red Hat Linuxには、XFree86という、X11R6をベースとする、幅広く使用されているオープンソースのX Window Systemが組み込まれています。 |
[2] | 偽装とは一般に、実際にはそのシステムとは関係ないのに、そのシステムの所有者であるかのように装うことを意味します。 |