さくら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/XXXXXXXXXXXXの部分を設定したファイル名に変更して実行してください。
Enter passphrase for /Users/xxxxx/.ssh/XXXXXX:とパスワードを聞かれるので、鍵作成時に設定したパスワードを入力してEnter。
登録が完了します。
登録したものは下記コマンドにて確認ができます。
$ ssh-add -lid_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_configsshd_configを編集
vimでファイルを3点編集します。
rootユーザーのログインを禁止するために以下。
変更前:
#PermitRootLogin yes
変更後:
PermitRootLogin noパスワード認証を禁止するために以下。
変更前:
#PasswordAuthentication yes
変更後:
PasswordAuthentication noどちらもコメントアウトを外して、yesをnoに変更しています。
次にポート番号を変更します。
変更前:
#Port 22
変更後:
Port 200022は一般的に使われる番号で、だからこそサーバー攻撃の際に真っ先に攻撃対象となります。
そのためポート番号は変更しておく必要があるんですね。
ポート番号は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 -Dsshdが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ユーザーで、パスワードを入力するだけで繋がってしまいます。
ただし、万が一のことを考えてしっかりセキュリティ対策が必要ですよね。
サーバー内のことはわかりにくいですが、しっかり順を追って設定していってください。

コメント