SSHの公開鍵認証を使って安全に接続しよう

セキュリティ

今回はSSHを安全に使用するためにということで始めていきます。

SSHについては、私はデモを行う環境を操作する際に「Tera Term」を介して使用しています。

また、通常では外部からサーバにログインするのによく使用するかと思います。

その際にこういった風に接続すると比較的安全に接続できるようになりますので、興味がある方は読んでいっていただければと思います。

公開鍵認証の準備

SSHについては以前に解説をしていたと思いますので、そちらは割愛させていただき、「公開鍵暗号」についてまずは簡単に解説します。(IPAの試験等を受けている方はおなじみですね。)

公開鍵暗号(こうかいかぎあんごう、Public-key cryptography)とは、暗号化と復号に別個の鍵(手順)を用い、暗号化の鍵を公開すらできるようにした暗号方式である。
暗号は通信の秘匿性を高めるための手段だが、それに必須の鍵もまた情報なので、鍵を受け渡す過程で盗聴されてしまうというリスクがあった。共通鍵を秘匿して受け渡すには(特使が運搬するというような)コストもかかり、一般人が暗号を用いるための障害であった。この問題に対して、暗号化鍵の配送問題を解決したのが公開鍵暗号である。
参考:https://ja.wikipedia.org/wiki/%E5%85%AC%E9%96%8B%E9%8D%B5%E6%9A%97%E5%8F%B7

SSHの接続について限定して簡単に解説すると、鍵を持っている端末(アカウント)しかそのサーバにアクセスすることができなくなります。

では実際に鍵を作ってみましょう!普段使用している「Tera Term」で作成することができます。

「Tera Term」を起動し、「設定」から「SSH鍵生成」を選択します。

そして、以下の画面から「鍵の種類」選択し、ビット数は「2048」を選択します。ちなみにデフォルトのままです。(ビット数は多い方がいいですが、現在のセキュリティの環境では2048で問題ありません。)

「生成」ボタンを押すと以下のようにパスワードの入力を求められます。ここのパスワードは強度を高くするようにしましょう。また、認証の際に使用しますので、忘れないようにお気を付けください。(コメントは特に無しでもいいですが、今回はテストとわかるようにしました。)

パスワードとコメントの入力ができたら、その下にある「公開鍵の保存」ボタン、「秘密鍵の保存」ボタンをそれぞれ押し、任意の場所に保存します。

こんな感じで保存されました。「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵になります。

これで鍵の作成は終わりです。早速サーバに設置しましょう。

鍵の設置と検証

まずはSSHでIDとパスワードで認証します。(ここではまだ鍵を置いていませんので。)

SSHでログインしたら、「id_rsa.pub」をターミナルの上にドラッグ・アンド・ドロップしましょう。すると以下のメッセージが出てきますので、「SCP」を選択します。

するとそのウィンドウは閉じますので、ファイルが置かれていることを確認しましょう。lsをするとすぐにわかりますね。

これでOKではなく、以下の操作を行っていきます。

$ mkdir .ssh
#フォルダの作成(無い場合)
$ chmod 700 .ssh
#「.ssh」フォルダのパーミッションの変更
$ mv id_rsa.pub .ssh/authorized_keys
#持ってきた「id_rsa.pub」を「authorized_keys」にリネームし、「.ssh」フォルダに格納
$ chmod 600 .ssh/authorized_keys
#「authorized_keys」のパーミッションの変更

ここまで行ったら、パスフレーズ認証を行う必要はないので、切ってしまいます。

$ sudo nano /etc/ssh/sshd_config
#sshの設定ファイルを編集

以下のとおり「PasswordAuthentication no」し、コメントを解除します。

設定ファイルを書き換えたので、sshを再起動します。

$ sudo service ssh restart
#sshを再起動

これで大丈夫なはずです。別の「Tera Term」を起動し、先ほどと同じようにユーザ名とパスワードで認証して確認みましょう。

先ほどは認証ができましたが、以下のとおり認証に失敗しましたと表示されるようになりました。(パスワードを間違えた訳ではないのであしからず。)

では秘密鍵を指定して認証を行ってみましょう。パスフレーズは鍵を作成したときのものです。

以下のとおりちゃんと認証ができました!

なお、秘密鍵のパスワードを間違えた場合は以下のメッセージが表示され、認証することができません。

これで、外部からSSHに対してユーザ名とパスワードのリスト型攻撃や辞書攻撃等のパスワードクラッキングを行われたとしても、鍵を持っているユーザしかアクセスできないので安心ですね。
※もちろんパスワードの使いまわしはしないようにすることはしないでくださいね。

まとめ

SSHの公開鍵認証の設定について一通り記事にしました。

SSHについてはもし認証を突破されてしまうと壊滅的な被害を受ける可能性があるので、かなり念入りに対応する必要があります。(重要なサーバについてはSSHを内部アクセスのみ設定した上で、公開鍵認証にするべきかと考えています。)

最近では色々な形態(ノマドやクラウドソーシングでの依頼等)での仕事も増えてきているので、外部からSSHで接続して、サーバを操作することが増えてくるかと思います。

そのため、任意のグローバルIPからアクセス可能にしているサーバも少なくはないかと思います。

なので、リスクを最小限に抑えるために色々な方法で守る必要があると考えています。

なお、大部分のセキュリティ会社で診断をした際に、SSHがID・パスワードで認証されている場合は問題点として指摘になるかと思います。

この設定では、秘密鍵は端末(ノートPC)に保存されているので、盗難や紛失のリスクもまだありますので、前に記事で記載したような「VeraCrypt」での端末内での暗号化保存や、鍵の適切な管理も必要になるかと思います。

不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

コメント