sshを設定し、セキュリティを向上させる

sshで接続し、CentOSのバージョンアップもしました。サーバのセキュリティに対するものもある程度考えたところで、次は実際にセキュリティをあげる作業にとりかかります。ちなみにsshクライアントはwindows7puttyを使用しています。


まずはsshsshでのセキュリティアップとしてできることはいくつかあります。その中で僕は以下のことをしようと思っています。
1、ポートをデフォルトの22から変更する
2、鍵を設置し、鍵でログインできるようにする
3、パスワードでログインできないようにする
sshはデフォルトではポート22で動いていることは誰でも知っています。なのでこのポート番号と適当にIPを打ち込むだけでサーバにアクセスができてしまいます。そこでユーザ名やパスワードをきかれますが、これが簡単だとそのままのっとられたりします。そこで、ポート番号を変更することにより攻撃を加える場所をわからないようにすることが安全です。
鍵というのは、公開鍵と秘密鍵でセットになっています。サーバ側に公開鍵を設置し、クライアント側でその対の秘密鍵を持っているユーザしかログインできないようにします。
パスワードでログインできないようにするのは、鍵を設置することが大前提です。パスワードでのログインを禁止して、鍵を持っているユーザしかログインできないようにします。パスワードでのログインを禁止すれば、パスワードによく使われそうな単語でいろいろ試してみても無駄になります。
今回僕は管理や開発のしやすさのために多少セキュリティリスクがあがるのも理解し設定しませんが、他にもセキュリティ向上にはいろいろ方法があります。rootでのログインを禁止したり、sshのポートにアクセスできるIPを制限するなどの方法があります。必要があれば調べてみるといいと思います。


実際に作業に入っていきますが、いくつか注意があります。注意というか僕なりのやり方です。バッドノウハウ的な部分もありますが、sshは設定を失敗するとサーバにアクセスができなくなってしまうことがあります。それが手元にあるサーバならリモート接続をやめて設定を変更すれば元に戻せますが、僕のようにさくらのVPS 512など手元にサーバがない場合は、サーバ管理の会社に連絡して有料で設定を変えてもらったりしないといけなくなることもあります。
そういう事態を回避するために、まずは設定ファイルなどの変更のためにつないでいるsshのセッションを切らないこと。ちゃんと接続できるかどうかは別にsshクライアントを開いて接続して確認するほうがいいです。この新しい接続がうまくいかなくて設定が失敗していることがわかっても、元のセッションがあればそこで設定をまた変更しなおしたりすることができます。
あとバッドウノウハウなんですが、設定は細かく変更してその都度設定がうまくいっているかどうか試しています。一気に設定ファイルを変更してやるのが簡単なのですが、僕はタイプミスが多いのでそのミスで接続ができなくなってしまうことを避けたいというのがあります。少しずつ確認していけば、どの部分の設定がうまくいっていないのかもすぐにわかります。


では、実際の作業。1、ポートをデフォルトの22から変更します。
設定ファイルを変更します。13行目にコメントアウトされていますが、デフォルトのポート22というのが見えます。この下辺りに変更したいポート番号を書くといいと思います。僕はなんとなく1222にしています。ポート番号の詳しい説明はしませんが、0〜1023まではウェルノウンポートといい他のデーモンで使うことが多く思わぬ時にエラーを起こすかもしれないので、それ以降の1024〜65535にした方がいいと思います。

vi /etc/ssh/sshd_config
13行目 #Port 22 
14行目 Port 1222 ←追加

設定ファイルを変更したら、sshを再起動します。

/etc/init.d/sshd restart

再起動が終わったら、puttyから前に接続したのと同じ方法で接続してみましょう。ポートが22のままでは「ネットワークエラー:接続が拒否されました」とメッセージがでると思います。次にputtyの設定でポートを変更した数字に変えて接続してみましょう。これで接続サーバ確認がでて、その後ユーザとパスワードを入力しログインできれば成功です。


続いて、2、鍵を設置し、鍵でログインできるようにする
ここでは鍵の設置としてputtyで鍵の作成から書きます。スクリーンショットなど用意してないので、鍵の設置については他のサイトを参考にした方がわかりやすいと思います。以下は僕が参考にしたサイト。
http://www.kuins.kyoto-u.ac.jp/news/47/putty-gen.html
http://www.atmarkit.co.jp/fwin2k/win2ktips/1321putykey/putykey.html
鍵作成ツールはputtyに付属しているので、windowsの左下スタートメニュー→[すべてのプログラム]→[Putty]→[Puttygen]と辿って起動します。僕はどこのディレクトリにputtyをインストールしたかを忘れたのでなんとか探して、puttyge.exeを直接起動させました。
Actions内のGenerateボタンを押し、空白エリアで適当にマウスを動かすと、乱数が生成されてそれが鍵に使用されます。ある程度動かしていると、マウスを動かしていた場所に文字列が表示されるので、これをコピペして別のテキストファイルにauthorized_keysというファイル名で保存しておきます。これが公開鍵となります。Key passphraseというのは、この鍵用のパスフレーズ(パスワード)を設定する部分なのですが、これがあるとさらなるセキュリティの強化になりますがsshでの接続がめんどうになったり、他のrsync(ファイルの同期)などを使うときに邪魔になるのであえて設定しないことにします。ついでに公開鍵なのだけど少し形式の違うもので、Actions内のSave public_keyも押して保存しておきます。
Actions内のSave privatekeyを押します。パスフレーズが設定されていないけどいいですか?的な質問がでますが、はいでとばします。これで保存されたものが秘密鍵になります。○○_rsa.ppkとして保存します。○○部分はなんでもいいですが、自分の名前とかid的なものにしましょう。サーバのホスト名なんか入れてもいいのですが、それだと1つのサーバに対して鍵をそれぞれ作成するという鍵の運用方法として間違った理解になるのでやめましょう。僕もこれで間違えたのですが、クライアントには秘密鍵が1つだけあり、その公開鍵を運用したいサーバに登録していくことが正しい鍵の運用だと思います。説明しにくいですが、これはまたいつか細かく書きたいと思います。
ここまでできたらpuutygenは終了しても大丈夫です。コピペのミスとか心配なら完全に設定できるまで現状の画面でほうっておけばいいと思います。


次にサーバ側で公開鍵を設置します。ちょっとセキュリティが甘くなりますが、rootでログインしてなんでも作業してしまうので、そこに設置することにします。公開鍵を設置する用のディレクトリを作成し、パーミッションを変更しておきます。

cd /root
mkdir .ssh
chmod 700 .ssh

次にさっきputtygenで作成した公開鍵をなんとかしてサーバに送ります。方法的には手元にサーバがあればUSBメモリでもいいです。僕はリモートでアクセスするしかないのでWinSCPで送ってしまいました。さっき作成した/root/.sshディレクトリにコピーします。その後パーミッションを変更します。

cd /root/.ssh
chmod 600 authorized_keys

ここまでできれば鍵でログインできるはずです。puttyで今までの接続設定を読み込み、左枠内で[接続]→[SSH]の+ボタンを開き→[認証]を選択。認証パラメータ内の参照から、さっきputtygenで保存した○○_rsa.keyを選択。左枠内の[セッション]を選び、右側の保存ボタンをおして、設定を保存しておきます。これで開くボタンを押し、接続してみましょう。正しければユーザをきかれるのでrootと入力すると、今まではパスワードをきかれていましたが、それがなくコマンドなどが入力できるようになります。この時に下記のようにでるので、public keyつまり公開鍵がつかわれたのがわかります。********部分はauthorized_keysファイルの最後の部分と同じだと思います。

login as: root
Authenticating with public key "*********"

permission deniedというエラーがでていれば、authorized_keysファイルやディレクトリのパーミッションが1番怪しいです。あとは秘密鍵のファイルを間違えていないかなども確認しましょう。


最後に、3、パスワードでログインできないようにする。
せっかく鍵を設置しログインすることができるようになったので、もうパスワードでのログインはしないと思います。なのでパスワードでのログインはできないようにすることで、鍵がないとログインできないことになり、セキュリティが向上します。
設定ファイルを変更します。

vi /etc/ssh/sshd_confg
60行目くらい PasswordAuthentication yes 
↓
PasswordAuthentication no

値をyesからnoに変更します。そして、設定ファイルを変更したのでsshdの再起動をします

/etc/init.d/sshd restart

まずは今までの鍵を使う設定でログインできることを確認します。次にputty秘密鍵を使わずにログインしようとします。どのユーザでログインするかきかれrootと入力すると、Disconnected: No supported authentication medthods availabeというエラーがでて接続できないと思います。こうなればパスワードのログイン失敗なので、設定がうまくいっていることが確認できます。


以上でsshの設定やセキュリティの強化ができました。他にも方法はあると思うので、必要に応じて調べてみるといいと思います。