SSHのセキュリティ対策
SSH(Secure SHell)は、ネットワーク経由でコンピュータを操作するためのもっとも基本的な接続方法です。
大変便利である一方で、不正ログインなどセキュリティ上の大きなリスクともなりえます。そこでSSHにはセキュリティを高めるための仕組みが備えられています。
そのなかで代表的なものが「SSH公開鍵認証」と「SSHポート番号変更」です。
SSH公開鍵認証とは
SSH公開鍵認証とはSSH接続のユーザー認証に公開鍵認証を用いることで不正ログインを防ぐ手法です。
キーペアの生成
まずは公開鍵認証のために必要なキーペアを生成します。キーペアの生成にはssh-keygenコマンドを使用します。暗号化アルゴリズムは様々なものから選べますが、現在の主流はED25519です。
ssh-keygenコマンドの主なオプションは以下のようになります。
$ ssh-keygen -t <鍵タイプ> -C <コメント> -f <鍵ファイル名>
例)
$ ssh-keygen -t ed25519 -C "My Private Key" -f my_private_key
このコマンドを実行するとカレントディレクトリに、my_private_keyとmy_private_key.pubというキーペアが生成されます。my_private_keyが秘密鍵でmy_private_key.pubが公開鍵です。ちなみに-Cオプションで指定したコメントはmy_private_key.pubファイルの末尾に付与されます。
鍵ファイルの設置
まず、秘密鍵をホームディレクトリ配下の.sshディレクトリに移動します。
$ mv my_private_key ~/.ssh
つぎに、公開鍵をサーバーに登録します。公開鍵の登録には、ssh-copy-idコマンドを使います。
$ ssh-copy-id -i <鍵ファイル名> <ユーザー名>@<サーバーのホスト名>
例)
$ ssh-copy-id -i my_private_key user@host
これで、鍵ファイルの設置は完了となります。
公開鍵認証を使ったログイン
公開鍵認証を使ってログインするときは、sshコマンドに-iオプションで鍵ファイルを指定します。
例)
$ ssh -i ~/.ssh/my_private_key user@host
パスワード認証を無効化する
公開鍵認証でログインできるようになったので、パスワード認証は無効化します。サーバーにログインして、サーバー側のSSHdの設定を変更します。
#PasswordAuthentication yes
PasswordAuthentication no
変更を反映するためSSHdを再起動します。
$ sudo systemctl restart sshd
これで鍵ファイルなしにはログインできなくなりました。
鍵ファイルは「絶対に」なくさないように気をつけてください!!
なくしてしまうとリモートログインが不可能になり、ローカルログインして設定を解除しなければならなくなります。
SSHポート番号の変更
SSHは標準で22番ポートを使うことが決まっています。そのため、標準の状態のまま使用すると22番ポートを決め打ちにしたブルートフォースアタックがリスクとなります。そこで、SSHで利用するポートを独自のものに変更します。
ファイアウォールのポート開放
まず、ファイアウォールを設定してSSHで新たに使用したいポートをあらかじめ解放しておきます。
ここでは5432番ポートを解放します。Firewalldの場合、次のようにします。
$ sudo firewall-cmd --zone=public --add-port=5432 --permanent
$ sudo firewall-cmd --reload
SSHdの設定変更
つぎに、サーバーにログインしてSSHdの設定を変更します。
#Port 22
Port 5432
ここでは、さきにポート開放したのと同じ5432番ポートを、SSHで用いるように設定を変更しています。
設定を反映するためにSSHdを再起動します。
$ sudo systemctl restart sshd
これで、5432番ポートを使ってSSH通信を行うようになりました。
ログイン
ポート番号を指定してSSH接続するにはsshコマンドに-pオプションを使います。
$ ssh -p 5432 user@host
SSH公開鍵認証をすでに設定している場合は、-iオプションで鍵認証も付け加えてください。(下記「合わせ技」を参照)
22番ポートの閉鎖
最後に、使用しなくなった22番ポートをファイアウォールで閉鎖します。
$ sudo firewall-cmd --zone=public --remove-service=ssh --permanent
$ sudo firewall-cmd --reload
ここで--remove-service=sshとなっていますが、実際にしていることは22番ポートを閉じているだけですので安心してください。
合わせ技
SSH公開鍵認証とSSHポート番号変更は併用することができます。
例)
$ ssh -i ~/.ssh/my_private_key -p 5432 user@host
これによりSSH接続がぐっと安全なものになります。
configファイルの活用
ここまで読んで、「いちいち-iオプションと-pオプション指定するの面倒くさい」と思った方も多いと思います。そこで登場するのがconfigファイルです。ホームディレクトリ配下の.sshディレクトリ内にconfigというファイルを用意します。
configファイルの書式は以下のとおりです。
Host <登録名>
User <ユーザー名>
HostName <ホスト名>
IdentityFile <鍵ファイル名>
Port <ポート番号>
例)
Host myhost
User user
HostName host
IdentityFile ~/.ssh/my_private_key
Port 5432
このようなファイルを用意しておくと、SSH接続するとき
$ ssh myhost
と入力するだけでサーバーと接続できるようになり非常に操作が楽になります。
まとめ
今回は、SSHを安全に使うための設定として、「SSH公開鍵認証」と「SSHポート番号変更」の2つを紹介しました。この2つを組み合わせることにより、SSH接続の安全性は大きく向上します。サーバーを不正ログインから守るため、この記事が少しでもお役に立てば幸いです。
それでは、よいSSHライフを。