1. さくらのVPSの初期セキュリティ設定を参考にする
ITクオリティでは、さくらインターネットさんのVPSを利用させていただいています。
さくらインターネットさんでは、サーバ作成直後に設定しておくべき初期セキュリティ設定 | さくらの VPS ドキュメントというマニュアルが公開されています。VPSだけに限らず、Unix系サーバ全般の設定に際しては、これを参考にしながら初期セキュリティ設定の参考にさせていただいています。自分でイチから作るのは大変なので参考になるマニュアルは活用させていただいて生産性を上げていきたいと思います。
弊社はVPSでCentOS8で使っていますが、さくらインターネットさんのマニュアルと同じ手順で作業できます。また、クライアント側のPCは、WSLのUbuntu20.04からのアクセスです。それでは、実際にやってみます。
2. 鍵を作成する(クライアント側の作業です)
まず、ローカルPC側で鍵の作成から実施します。コマンドプロンプトで以下を実施します。
ssh-keygen -t rsa -C '(メールアドレス)' -f ~/.ssh/id_rsa_sakura-vps
メールアドレスが「[email protected]」の場合は、以下のようになります。
ssh-keygen -t rsa -C '[email protected]' -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アドレス):~
例えば、ユーザ名が「admin」で相手先IPアドレスが「192.168.1.1」であれば
spc ~/.ssh/id_rsa_sakkura-vps.pub admin@192.168.1.1:~
となります。
これによりサーバのユーザのホームディレクトリに公開鍵が転送できます。
引数の最後の「:~」の部分は転送したい先のディレクトリパスを指定すれば良いので送りたい先のディレクトリを指定すれば任意に変えることができます。
4. 認証キーとして登録する(VPSでの作業です)
クライアントから転送した自分の公開鍵をVPSの自分のアカウントに認証キーとして登録します。これによって、クライアントで自分が秘密鍵で署名すればVPS側の公開鍵で本人確認ができることになります。
登録するVPS側のファイルは、
~/.ssh/authorized-keys
です。自分のホームディレクトリ配下の.sshディレクトリのauthorized-keysというファイルです。このファイル名はこのまま変えずに使います。
初めて認証キーを登録する際にはまだ.sshディレクトリが作成されていませんので作成します。
sshでVPSサーバへパスワード認証でログインします。
VPSコントロールパネルからの作業でもOKです。ユーザーIDとパスワードでログインします。
ログインできたら以下の作業を実施します。
pwdコマンドでホームディレクトリであることを再確認。
$pwd
ls -laコマンドで.sshディレクトリがないことを確認します。
$ls -la
ここでは「.sshというディレクトリがない」ことと、先にscpで転送した「id_rsa_sakura-vps.pubがある」ことを確認します。確認が済んだら、
$mkdir .ssh
mkdir .ssh
として.sshディレクトリを作成します。
次にアクセス権を設定します。
$chmod 700 .ssh
chmod 700 .ssh
ここまでできたら、公開鍵を.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. 公開鍵認証でログインしてみる(クライアント側からです)
上記手順が完了したら、クライアント側のPCからログインの試験をします。
ログインするには、自分の秘密鍵を使って照合します。
$ssh -l (ユーザ名) (IPアドレス) -i .ssh/id_rsa_sakura-vps
とします。-iで自分の秘密鍵を指定します。そうすると、パスフレーズの入力が求められますので、秘密鍵を作成した際に設定したパスフレーズを入力してください。
無事にログインできたら、初期設定は完了です。
6. より安全なSSH接続へ(VPS側の作業です)
さくらインターネットさんのページにもありますが、SSHサーバの設定をより安全に設定していきましょう。
6.1. ログイン関係の設定をする
サーバの/etc/ssh/ssh_configを編集することでセキュリティを強化していきます。(今回は、エディタとしてviを利用していますが、他のエディタでもOKです。例えばnanoでもOK。)
sudo vi /etc/ssh/ssh_config
まずrootでのログインを許可しないにします。
PermitRootLogin no
次にパスワード認証を許可しないにします。鍵認証を使わないパスワードだけのログインをできないようにする、ということです。
PasswordAuthentication no
これをやれば、パスワード認証が無効になり、ブルートフォース攻撃などを回避できるので今までよりセキュリティが強固になります。これは、必ずやりましょう。
2025/04/07追記
久々にUbuntuの設定を行いましたが、上記の設定ではなく、以下のような設定に変更されていました。
#でコメントアウトされているのはデフォルトの設定が適用されている、という意味です。
prohibit-passwordという設定がデフォルトで適用されています。これは公開鍵認証とGSSAPI認証(Kerberos認証など)のみ許可し、パスワードやキーボードインタラクティブ認証(2要素認証など)を禁止する、という設定です。この設定だと公開鍵認証はOKになるので、もし厳密にrootによるログインを禁止したいのであれば、設定をnoにしておきます。コメントアウトを外すのも忘れないようにしてください。
https://linuc.org/study/column/5707/
ということで以下のように記述します。
#PermitRootLogin prohibit-password
PermitRootLogin no
2025/04/07追記ここまで
その後、
$sudo systemctl restart sshd
sudo systemctl restart sshd
として上記の2つの設定を有効にします。
sshd(sshデーモン:sshでのログインを管理しているプログラム)を再起動することで、設定を読込直して有効にしています。
最後にログアウトして確認していきます。
- rootでログインできないこと。(おそらくrootでのログインは試験できません)
- パスワードでログインできないこと。(自分のIDでクライアントからログインしてみます)
- 公開鍵認証でログインできること。(自分のIDで秘密鍵で認証してログインしてみます)
さあこれで公開鍵認証が使えるようになりパスワードが使えなくなりました。rootでもログインできません。ちょっとだけセキュリティが強固になりました。
7. SSH接続用ポート番号の変更
ここまでやったら最後の仕上げです。SSH接続用ポート番号を変更します。デフォルトで22を使っているSSH接続ですがここが開いていると「外部接続するようになっている」とわかってしまいます。効果がどれほどあるのかわかりませんが、そのサーバ専用のポートに変更するようにします。
7.1 sshdの設定変更
まずは、sshdのポート番号変更です。設定は、
/etc/ssh/sshd_config
に記載されています。
$sudo vi /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が追加されています。無事にログインできたでしょうか。
お疲れさまでした。ここまで完了すればひととおり最低限のことはできたと思います。sshを利用して安全にVPSを活用していきましょう。