SSHとは
認証部分を含む、全てのネットワーク上の通信を暗号化することにより、
ネットワークを介して安全に別のコンピュータと通信を行うプロトコルであり、Secure Shellの略です。
UNIXコンピュータでは、ネットワークを介して別のコンピュータにログインする場合に、"telnet"が利用されて来ましたが、
暗号化されていないので、パスワードをネットワーク経路上で盗聴される可能性が高く、危険でした。
sshではパスワードを含む全情報パケットがSSLで暗号化されるため、盗聴の危険性がありません。
外のネットワークを利用して、PCからサーバにログインして操作する場合は、telnetではなく、セキュリティの高いプロトコルsshを使用しましょう。
セキュリティ強化の重要性
あなたのサイトが検索エンジンに登録され、アクセス数の増加に伴って、世界各国からのアタックが増加します。
アタックの内容は、SSHDあるいはFTPDへ侵入しようとするものが殆どであり、
プログラムを使用して攻撃してきますから、アクセス数も膨大です。
実際、私が公開してしているサーバーへのアタック例を紹介しましょう。
-
122.160.122.158(ホスト名:ABTS-North-Static-158.122.160.122.airtelbroadband.in - インドから):20010年7月16日 11:49~13:51の間、約3秒おきに、SSHによる接続が繰り返されました。
"ikeda", "yoshida" あるいは "shimizu"など、日本人の代表的な苗字をユーザ名として使用して、サーバの反応を試しています。
-
201.217.52.75(ホスト名:server2.monalisa.com.py - パラグアイから):20010年7月17日 0:03~0:30の間、約3秒おきに、SSHによる接続が繰り返されました。
"test", "admin", "webmaster", "austin", "library", "oracle", あるいは "guest"など、安易に使用されそうなユーザ名を使用して、サーバの反応を試しています。
-
121.189.62.108(ホスト名:なし - 韓国から):20010年7月22日 14:39~15:51の間、約2秒おきに、SSHによる接続が繰り返されました。
"simon", "cocktail", "wembley", "ginger", "worthy", "thomas", あるいは "micro"など、人名や安易に使用されそうなユーザ名を使用して、サーバの反応を試しています。
-
59.58.159.250(ホスト名:250.159.58.59.broad.pt.fj.dynamic.163data.com.cn - 中国から):20010年7月23日 14:36~23:31の間、約5秒~1時間おきに、FTPによる接続が繰り返されました
(現在はFTPを禁止していますが、当時はまだFTPを許可していた)。
"neoluxusa"や"neoluxusacom"など、わたしが所有するドメイン名をユーザ名を使用し、9時間にも渡って手入力でサーバの反応を試しています。
これは、ほんの一例であり、サーバに侵入しようとする試みは、日常茶飯事と考えた方が良いでしょう。
コンピュータとネットワークの高速化に伴い、ID/パスワードの総当り攻撃を仕掛けられた場合には、
比較的高いセキュリティの高いSSHでも破られてしまう可能性があります。
公開鍵認証を利用したセキュリティ強化
ここでは、sshのセキュリティをさらに高めるため、公開鍵認証を導入します。
公開鍵認証では、サーバ側に公開鍵を、クライアント側に秘密鍵を配置し、
アクセスしてきたユーザが、サーバ側に配置されている公開鍵と対応する秘密鍵を持っているか否かによりログイン認証を行います。
このため、ID/パスワード認証に比較して格段にセキュリティが強化されます。
外部ネットワークからsshでアクセスをする場合には、ぜひ公開鍵認証を導入しておきましょう。
SSHD構成ファイルの編集
まず、sshd(sshのデーモン:デーモン(Daemon)とはバックグラウンド動作するプログラム)の構成ファイル"/etc/ssh/sshd_config"を編集し、
公開鍵認証を許可し、パスワード認証をできなくします。
公開鍵認証を許可します:行頭の"#"を外します。
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
また、パスワード認証を不可にします:行頭の"#"を外します。
PasswordAuthentication no
PermitEmptyPasswords no
行頭の"#"を外し、"no"に変更します。
ChallengeResponseAuthentication no
公開鍵・秘密鍵の作成
公開鍵認証のための、公開鍵と秘密鍵を作成します。
鍵の保存場所としてデフォルトを選択するとユーザホーム/.ssh/id_rsaに作成されます。
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):【デフォルトでリターン】
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):【パスフレーズを入力】
Enter same passphrase again:【パスフレーズを再入力】
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
86:82:e5:a8:bd:f7:b0:a4:1d:02:cd:78:fa:df:49:7a root@neolux001.neoluxinc.com
The key's randomart image is:
+--[ RSA 2048]----+
| |
・・・
| + = . |
|o * o . S . . |
・・・
| +o=o+ S . |
+---------------------+
上記の例はrootによる作成なので/root/.ssh/配下に以下のファイルが作成されます。
# ls -l /root/.ssh
・・・
-rw------- 1 root wheel 1743 May 21 13:30 id_rsa
-rw-r--r-- 1 root wheel 410 May 21 13:30 id_rsa.pub
・・・
ここで、id_rsa.pubが公開キーで、id_rsaが秘密鍵です。
sshdの構成ファイル"/etc/ssh/sshd_config"の設定通り、公開鍵をauthorized_keysに流し込み、他ユーザから読めないようにします。
# cd /root/.ssh
# cat id_rsa.pub >> authorized_keys (authorized_keysが既にある場合は追加、無い場合は作成されます)
# chmod 600 authorized_keys(必ず他ユーザから読めない様にします)
他のユーザでsshを利用可能にするには、他のユーザで、"ssh-keygen"により別の鍵を作ります。
rootと同じ管理者の場合は、rootの公開鍵をユーザホーム/.ssh配下にコピーすると同じパスフレーズが使えます。
例えば、neoluxユーザでは以下の通りです。
# cd /usr/home/neolux
# cp -r /root/.ssh .
# chown -R neolux:neolux .ssh
以上でサーバ側の設定は完了です。
sshdを再起動して設定を有効にします。公開鍵を変更した場合は、sshdを再起動しても変更されていないようですので、サーバーの再起動が必要になります。
# /etc/rc.d/sshd restart
PuTTY(パティ)は、
Simon Tatham氏によって作成された、フリーのTelnet/SSHクライアントで、WindowsやMAC OSで使用できます。
日本では、一般的に日本語表示を可能にした
PPuTTYjp
が使用されるようです。
ここでは、PuTTY用秘密鍵の生成方法と設定方法を説明しますので、
まだPuTTYをインストールされてない方は、前記サイトを参照してインストールおよび設定して下さい。
PuTTY用秘密鍵の生成
PuTTYgenのメイン画面 (画像をクリックしてご覧下さい)
以下の方法で、PuTTY用秘密鍵"id_rsa.ppk"を生成します。
- FTP等の方法を使用して、サーバで生成した秘密鍵id_rsaをクライアントPCにコピーして下さい。
- PuTTYをインストールするとWindowsメニューにPuTTYフォルダが現れますので、そこからPuTTYgenを起動します。
- Loadボタンをクリックしファイルセレクタのファイル種類をAll Filesに変更し、サーバからコピーした秘密鍵id_rsaを選択し、開いてください。
- サーバで秘密鍵を生成時に設定したPasspharaseの入力を求められますので、これを正しく入力すると、PuTTY用の秘密鍵が生成されます。
- 最後に、"Save private key"で、id_rsa.ppkとして保存してください。
PuTTY用秘密鍵の設定
PuTTY用秘密鍵の設定 (画像をクリックしてご覧下さい)
PuTTY(英語版)あるいはputtyjp.exe(日本語版)を起動し、
接続 -> SSH -> 認証画面の、認証パラメータの参照ボタンをクリックし、
既に作成済みのPuTTY用秘密鍵id_rsa.ppkを一度設定しておけば、公開鍵によるサーバへの接続が可能になります。
PuTTYのメイン画面で、接続先を設定あるいは選択し、「開く」ボタンをクリックすると、
以下のように、指定ユーザ名に対するパスフレーズの入力メッセージが出ますので、
鍵生成時のパスフレーズを入力すればログインできます。
Using username "root".
Authenticating with public key "imported-openssh-key"
Passphrase for key "imported-openssh-key":
公開鍵認証では、秘密鍵さえ厳重に管理しておけば、サーバに侵入される可能性は極めて低くなります。
上記の通り、導入も簡単ですので、外部ネットワークからsshでアクセスをする場合には、ぜひ公開鍵認証を導入しましょう。
最終更新日:2010年10月22日