さくらVPSに公開鍵を登録してSSH接続できるようにし、その後の行うべきセキュリティ対策についてまとめました。
実は
$ ssh root@ホスト名 -p 22
のようにroot
ユーザーのまま接続すればパスワード認証でSSH接続が使えてしまいますが、セキュリティ的には問題が残るので放置厳禁。
以下4つを行って対策します。
- 一般ユーザーを作成
- ユーザーの権限を設定
- 公開鍵を設置してSSH接続
root
ユーザーでのSSH接続を禁止 & パスワード認証を禁止
ここまで対策されていれば最低限OKですが、よりセキュリティ対策を意識するのであれば、SSH接続時のポート番号も変更しておくとよいです。
この記事ではポート番号の変更まで含め、すべてわかりやすくまとめていきます。
一般ユーザーを作成
デフォルトで用意されているroot
ユーザー以外に、新規でユーザーを作成します。
いったん、下記のようにroot
ユーザーとして接続してください。
$ ssh root@ホスト名 -p 22
ホスト名はさくらVPS管理画面の「グローバルネットワーク」タブ内に「ネットワーク情報-IPv4」欄があり、「アドレス」として記載された番号です(例:160.12.345.678
)。
接続後、新しいユーザーを作成します。
# useradd sakura
今回は「sakura」という名前のユーザーを作りました。
もちろん名前は好きなものにしてOKです。
次にパスワードを設定します。
# passwd sakura
最後のsakura
は作成したユーザー名に応じて変えてください。
ユーザー sakura のパスワードを変更。
新しいパスワード:
と表示されるので希望のパスワードを入れてください。
入力しても画面上に*
などは追加されませんが、しっかり入力できているので気にせず最後にEnter
で確定してください。
新しいパスワードを再入力してください:
再入力します。
passwd: すべての認証トークンが正しく更新できました。
と表示されればパスワード設定が完了です。
BAD PASSWORD
と表示された場合は、文字数が少ない・よく使われる語句のため利用をさけたほうが良い・同じ文字の連続、などで設定が完了せず警告されています。
違うパスワードの再設定を行う必要があります。
設定後はいったんexit
で終了し、作成したユーザーでSSH接続ができるか確認してください。
$ ssh sakura@ホスト名 -p 22
sakura
以外のユーザー名にした場合は、sakura
部分を変更してください。
ユーザーの権限を設定
先ほど作成したsakura
は一般権限をもつユーザーのため、root
ユーザーと同権限を持つように設定します。
具体的にはwheel
グループに追加することで、sudo
コマンドを使えるように変更するんですね。
wheel
グループとは、sudo
コマンドでroot
権限を実行するための特別なグループです。
# su
こちらでroot
に切り替えます。
パスワード:
パスワードを聞かれるので、root
ユーザーのパスワードを入力します。
OSインストール時に、赤枠の部分で設定したパスワードです。
# usermod -G wheel sakura
ユーザーsakura
をwheel
グループに追加しました。
(もちろん、別のユーザー名で登録した場合はsakura
部分を変更してください)
公開鍵を設置してSSH接続
いったんサーバーを抜けてローカルPC内での作業です。
公開鍵・秘密鍵を作成
SSH接続するために必要な公開鍵・秘密鍵を作成します。
$ cd ~/.ssh
$ ssh-keygen -t rsa
すると以下のように表示されると思います。
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxxx/.ssh/id_rsa):
デフォルトだとid_rsa
というファイル名で作られるので、問題なければEnter
で進んでOK。
ファイル名を変更したい場合は入力してからEnter
を押してください。
Enter passphrase (empty for no passphrase):
とパスワードを聞かれるので、パスワードを設定してください(2回入力します)。
.pub
という拡張子ありのファイルと、拡張子なしのファイルが作成されるはずです。
デフォルトのファイル名id_rsa
で作成した場合は以下の通り。
- id_rsa
- id_rsa.pub
.pub
となっている方が公開鍵です。
これで鍵の作成は完了ですが、もしファイル名をid_rsa
以外に変更した場合は、以下の手順でssh-agentに登録しておく必要があります。
ssh-agentは、SSH接続時に毎回必要になるパスワード入力を自動化してくれるものです。
$ ssh-add -K ~/.ssh/XXXXXX
XXXXXX
の部分を設定したファイル名に変更して実行してください。
Enter passphrase for /Users/xxxxx/.ssh/XXXXXX:
とパスワードを聞かれるので、鍵作成時に設定したパスワードを入力してEnter
。
登録が完了します。
登録したものは下記コマンドにて確認ができます。
$ ssh-add -l
id_rsa
のままで作成した場合、ssh-agentの登録は不要です。
公開鍵をサーバーに転送
公開鍵を配置するためのディレクトリを用意します。
$ ssh sakura@160.XX.XXX.XXX -p 22
$ cd
$ mkdir .ssh
$ exit
ディレクトリ作成後、いったんローカルに戻りました。
次に、作成した公開鍵をサーバーに送信します。
$ scp 公開鍵のファイル名.pub 作成したユーザー名@ホスト名:~/.ssh/authorized_keys
ファイルを安全にネットワーク・ホスト間でコピーするためのscp
コマンドを利用しました。
今回は
- 公開鍵 ⇒ id_rsa.pub
- ユーザー名 ⇒ sakura
- ホスト名 ⇒ 160.XX.XXX.XXX
のため、最終的には下記のコマンドになります。
$ scp id_rsa.pub sakura@160.XX.XXX.XXX:~/.ssh/authorized_keys
これでユーザー名sakura用の公開鍵がサーバーに送信されました。
公開鍵まわりの設定
あとはサーバー上で調整します。
下記コマンドにてサーバーに接続してください。
(ユーザー名は適宜変更してください)
$ ssh sakura@ホスト名 -p 22
パスワードを聞かれると思うので、入力して接続。
先程アップした鍵の権限を調整します。
$ chmod 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys
このあと、logout
もしくはexit
コマンドでいったん接続を終了し、再度ログインを試みてください。
パスワードを入力せずログインできればOKです。
rootユーザーでのSSH接続を禁止 & パスワード認証を禁止
次にroot
ユーザーでSSH接続できないようにしつつ、パスワード認証も無効化します。
バックアップ作成
/etc/ssh/sshd_config
に設定を記述するのですが、何かあったときのためにバックアップファイルを作成してから設定変更しましょう。
# su
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup
もともとのファイルをsshd_config_backup
として複製しておきます。
# vi /etc/ssh/sshd_config
sshd_configを編集
vimでファイルを3点編集します。
rootユーザーのログインを禁止するために以下。
変更前:
#PermitRootLogin yes
変更後:
PermitRootLogin no
パスワード認証を禁止するために以下。
変更前:
#PasswordAuthentication yes
変更後:
PasswordAuthentication no
どちらもコメントアウトを外して、yes
をno
に変更しています。
次にポート番号を変更します。
変更前:
#Port 22
変更後:
Port 2000
22は一般的に使われる番号で、だからこそサーバー攻撃の際に真っ先に攻撃対象となります。
そのためポート番号は変更しておく必要があるんですね。
ポート番号は0〜65535番まで存在しており、0〜1023番は「ウェルノウンポート(Well-known Ports)」と呼ばれるよく使われるものです。
ウェルノウンポートはすでに利用されている可能性があるので割けるのがベター。
さくらVPSの場合は1025~49151番を選んでおけば基本的に問題はありません。
今回は例として2000番を選択しました。
ファイルの保存が終わったら、sshdを再起動して設定を反映させましょう。
# sudo systemctl restart sshd
反映後、正常に稼働しているかどうかを確認します。
# sudo systemctl status sshd
* sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2017-02-15 13:27:39 JST; 14s ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 4955 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 5057 (sshd)
CGroup: /system.slice/sshd.service
└─5057 /usr/sbin/sshd -D
sshdがActive: active (running)
と表示されていればOKです。
もしdead
と表示された場合は、何らかのエラーがあって正常稼働できていないので調整が必要です。
多くのケースではsshd_conifg
の記載ミスですので見直してみてください。
ログはjournalctl -xe
コマンドで確認できます。
設定が反映されたか最終確認
ここまで設定できれば問題ありませんが、最後にroot
ユーザーでログインできないかを確認しておくとよいでしょう。
exit
でいったんSSH接続を終了させます。
$ ssh root@ホスト名 -p ポート番号
とした際、以下のようにエラーが表示されれば完璧です。
root@160.XX.XXX.XXX: Permission denied (publickey).
ファイアウォール(firewalld)の設定
先程利用するポート番号を変更したので、ファイアウォール(firewalld)の設定も変えておく必要があります。
$ ssh root@ホスト名 -p ポート番号
ログインしてください。
パケットフィルターだとポート番号が22に固定されてしまうので、パケットフィルタを停止する必要があります。
さくらVPSの管理画面に入り「グローバルネットワーク」タブ内の最下部にあるパケットフィルター欄へ移動します。
「パケットフィルターを設定」ボタンをクリック。
パケットフィルターを「利用しない」にして「設定」を押下してください。
そのうえで、SSH接続します。
$ ssh sakura@ホスト名 -p ポート番号
これでログインができるはずです。
ログインができたらvimで所定のファイルを編集します。
# sudo vi /usr/lib/firewalld/services/ssh.xml
コマンド入力後に以下のような確認画面が表示されることがあります。
あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:
#1) 他人のプライバシーを尊重すること。
#2) タイプする前に考えること。
#3) 大いなる力には大いなる責任が伴うこと。
[sudo] sakura のパスワード:
内容を確認の上、ユーザーのパスワードを入力してください。
これで次に進めます。
編集中のファイル内に
<port protocol="tcp" port="22"/>
と書かれている部分があるので、22
のところを2000
に変更して保存。
# sudo firewall-cmd --reload
上記コマンドにてファイアウォールの設定を更新します。
success
と表示されればOK。
もしFirewallD is not running
と表示されたときは、ファイアウォールが停止されているので自分で起動する必要があります。
ファイアウォールを起動させます。
$ sudo systemctl start firewalld
$ sudo firewall-cmd --reload
パスワードを入力すると以下のようになるはずです。
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: sakura
Password:
==== AUTHENTICATION COMPLETE ===
これでファイアウォールは起動されました。
ファイアウォールの起動状況を確認したいときは以下のコマンドでできます。
$ sudo firewall-cmd --state
running
指定したポート番号以外でログインできないか最終確認
最後に、本当に指定したポート番号以外はログイン出来ない状況になったか確認します。
ログイン中であれば、いったんlogout
でサーバーから抜けてください。
ポート番号22でログインしようとしてもできなければ完璧です。
$ ssh root@ホスト名 -p 22
ssh: connect to host ホスト名 port 22: Connection refused
まとめ
単にSSH接続するだけなら、OSインストール時に設定したrootユーザーで、パスワードを入力するだけで繋がってしまいます。
ただし、万が一のことを考えてしっかりセキュリティ対策が必要ですよね。
サーバー内のことはわかりにくいですが、しっかり順を追って設定していってください。
コメント