1. さくらのVPSの初期セキュリティ設定を参考にする
弊社は、さくらインターネットさんのVPSを利用させていただいています。
さくらインターネットさんでは、サーバ作成直後に設定しておくべき初期セキュリティ設定 | さくらの VPS ドキュメントというマニュアルが公開されています。VPSだけに限らず、Unix系サーバ全般の設定に際しては、これを参考にしながら初期セキュリティ設定の参考にさせていただいています。自分でイチから作るのは大変なので参考になるマニュアルは活用させていただいて生産性を上げましょう。
弊社はVPSでCentOS8で使っていますが、さくらインターネットさんのマニュアルと同じ手順で作業できます。また、クライアント側のPCは、WSLのUbuntu20.04からのアクセスです。それでは、実際にやってみます。
2. 鍵を作成する
まず、ローカルPC側で鍵の作成から実施します。
$ssh-keygen -t rsa -C '(メールアドレス)' -f ~/.ssh/id_rsa_sakura-vps⏎
メールアドレスが「hogehoge@example.com」の場合は、以下のようになります。
ssh-keygen -t rsa -C 'hogehoge@example.com' -f ~/.ssh/id_rsa_sakura-vps
この時、パスフレーズ(2.参照)を聞かれますので忘れずに準備しておいてください。
オプションについて確認しましょう。
-C : 自分の使っているメールアドレスを使用する
-f : 生成されるファイル名なので任意です。「id_rsa」にしましょうと書いている方もいますが、任意の名前がつけられます。
上記の例では「~/.ssh/id_rsa_sakura-vps」としています。「~」は、ホームディレクトリを指しますので、「~/.ssh」は、ホームディレクトリの「.ssh」ディレクトリということになります。そのディレクトリに「id_rsa_sakura-vps」という鍵ファイルを生成しなさいということを意味します。
実際にこのコマンドを実行すると、「~/.ssh」ディレクトリの下に
id_rsa_sakura-vps
id_rsa_sakura-vps.pub
という2つのファイルが生成されます。この2つのファイルの種類を「file」コマンドで確認すると「ASCII Text」と表示されます。テキストファイルなので人間も読むことができるファイルになっています。
最初のファイル「id_rsa_sakura-vps」は、秘密鍵です。外部に漏れないように厳重に管理する必要があります。
二つ目のファイル「id_rsa_sakura-vps.pub」は、末尾に「.pub」とあるように公開鍵です。この鍵は、サーバへコピーしてクライアント側の公開鍵で暗号化したデータを開く際に使うこととなります。
3. 公開鍵をサーバへ転送する
さて前の項で作成した公開鍵は、サーバへ転送しなくてはなりません。
今回はscpコマンドで転送します。
$scp ~/.ssh/id_rsa_sakura-vps.pub (ユーザ名)@(相手先IPアドレス):~/.ssh⏎
例えば、ユーザ名が「admin」で相手先IPアドレスが「192.168.1.1」であれば
spc ~/.ssh/id_rsa_sakkura-vps.pub admin@192.168.1.1:~
となります。
これによりサーバのユーザのホームディレクトリに公開鍵が転送されます。
引数の最後の「:~」の部分は転送したい先のディレクトリパスを指定すれば良いので送りたい先のディレクトリを指定すれば任意に変えることができます。
4. 認証キーとして登録する
転送した公開鍵を認証キーとして登録します。
登録する先のファイルは、
~/.ssh/authorized-keys
です。このファイル名はこのまま変えずに使います。
初めて認証キーを登録する際にはまだ.sshディレクトリが作成されていませんので作成します。
sshでサーバへパスワード認証でログインします。
$pwdコマンドでホームディレクトリであることを再確認。
$ls -lコマンドで.sshディレクトリがないことを確認します。
確認が済んだら
$mkdir .ssh⏎
mkdir .ssh
として.sshディレクトリを作成します。
次にアクセス権を設定します。
$chmod 700 .ssh/⏎
chmod 700 .ssh
そして
$mv id_rsa_sakura-vps.pub .ssh/authorized_keys⏎
mv id_rsa_sakura-vps.pub .ssh/authorized_keys
として書き込みます。
最後に
$chmod 600 .ssh/authorized_keys⏎
chmod 600 .ssh/authorized_key
とすれば完了です
5. 公開鍵認証でログインしてみる
上記手順が完了したら、一度サーバからログアウトして再度ログインしてみます。
ログインするには、自分の秘密鍵を使った照合が必要になるので、
$ssh -l (ユーザ名) (IPアドレス) -i .ssh/id_rsa_sakura-vps⏎
とします。パスフレーズの入力が求められ、ログインできます。
6. より安全なSSH接続へ
さくらインターネットさんのページにもありますが、SSHサーバの設定を変更する必要があります。
サーバの/etc/ssh/ssh_configを編集します。
sudo vi /etc/ssh/ssh_config
まずは、rootでのログインを許可しないにします。
PermitRootLogin no
次にパスワード認証を許可しないにします。
PasswordAuthentication no
これをやらないと意味がありません。
これをやれば、パスワード認証が無効になるので今までよりセキュリティが強固になると言えます。これをやらないとセキュリティレベルは変わらないので公開鍵認証にする作業の手間が増えただけということになります。
その後、
$sudo systemctl restart sshd⏎
sudo systemctl restart sshd
として上記の2つの設定を有効にします。
最後にログアウトして確認です。
- rootでログインできないこと。
- パスワードでログインできないこと。
- 公開鍵認証でログインできること。
さあこれで公開鍵認証が使えるようになりパスワードが使えなくなりました。rootでもログインできません。ちょっとだけセキュリティが強固になりました。
7. SSH接続用ポート番号の変更
ここまでやったら最後の仕上げです。SSH接続用ポート番号を変更します。デフォルトで22を使っているSSH接続ですがここが開いていると「外部接続するようになっている」とわかってしまいます。効果がどれほどあるのかわかりませんが、そのサーバ専用のポートに変更するようにします。
7.1 sshdの設定変更
まずは、sshdのポート番号変更です。設定は、
/etc/ssh/sshd_config
に記載されています。
sudo vi /etc/ssh/sshd_config
デフォルトでは、Port 22
となっていますので、その行をコメントアウトして新しいポート番号(仮に10022にします)を設定します。#Port 22
Port 10022
として保存します。sshdを再起動すれば設定完了です。
$sudo systemctl restart sshd
sudo systemctl restart sshd
7.2 ファイアウォールの設定変更
※ここは、さくらのVPSの手順書と異なるubuntu向けの手順になります。
まず現在の設定状態を確認します。$sudo ufw status
sudo ufw status
ポートが開いていなければ開けていきます。初期設定は何もされていない状態(inactive)だと思いますので、80(http),443(https),10022(ssh)を開けます。(10022は自分で設定したポート番号を使ってください)$sudo ufw allow 80
$sudo ufw allow 443
$sudo ufw allow 10022
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 10022
ファイアウォールを有効にします。$sudo ufw enable
sudo ufw enable
ファイアウォールの状態を確認します。$sudo ufw status
設定した80,443,10022がIPv4、IPv6とも開いていれば完了です。
sudo ufw status
念のため、10022でsshが通るか確認しておいてください。$ssh -l (ユーザ名) (IPアドレス) -i .ssh/id_rsa_sakura-vps -p 10022
ポート番号の-p 10022が追加されています。無事にログインできたでしょうか。
お疲れさまでした。ここまで完了すればひととおり最低限のことはできたでしょう。
8. さくらインターネットさんにお願いします
今回設定したさくらのVPSでは「6.より安全なSSH接続へ」で書いた手順でパスワード認証を無効にできます。しかし、レンタルサーバでは共有サービスのためその手順はできません。せっかく公開鍵認証を使えるようにできるので、レンタルサーバーでもユーザ単位でパスワード認証の有効/無効を切り替えられるようにしていただけるとより安心です。