【クラウドサーバー】さくらVPSのSSHセキュリティ強化設定 4選
クラウドサーバーはネットワークから誰でも接続できるため、悪意のあるユーザー(以下、クラッカー)から狙われやすくなります。
ここでは、その対策としてSSHのセキュリティ強化について4つご紹介します。
なお、具体的な手順はさくらVPS(CentOS 7)になりますが、他のクラウドサーバーでも同じ観点でセキュリティ対策できることが多いので、都度読み替えてご覧ください。
-
SSHのポート変更
-
SSHのユーザー制限
-
SSHのrootユーザー制限
-
SSHの認証方式を鍵認証に変更
1. ポート番号の変更
SSH接続のデフォルトポートは22です。
ポートは1~65535までありますが、デフォルトポートはクラッカーから特に狙われやすいポートになります。
そのため、SSH接続のポートをデフォルトから変更し、セキュリティを強化しましょう。
なお、設定する際は最後までSSH接続を切断しないよう1つずつ慎重に進めてください。
接続が切れるとWEBサーバーにアクセスできなくなる可能性があります。
(1.1) SSHDの設定ファイルを開く
$ sudo vi /etc/ssh/sshd_config
(1.2) 設定ファイルのポート番号を変更
- Port 22
+ Port 65535
ポート番号は1024~65535の範囲で設定することを推奨します。
1~1023はウェルノウンポート(Well-Known port)と呼び、特定のサービスやプロトコルで使用されます。そのため、1~1023はポートが被る可能性が高く、予期しない動作になる原因となりますので注意してください。
(1.3) SSHDの再起動
$ sudo systemctl restart sshd
(1.4) ファイアウォールの設定
通常サーバーには接続ポートの開放設定があります。
ここではデフォルトポートの22をクローズし、新しく設定したポートを開放します。
(1.4.1) iptablesの設定ファイルを開く
$ sudo vi /etc/sysconfig/iptables
(1.4.2) ポート開放の設定
- -A INPUT -m state —state NEW -m tcp -p tcp —dport 22 -j ACCEPT
+ -A INPUT -m state —state NEW -m tcp -p tcp —dport 新しいポート番号 -j ACCEPT
(1.4.3) iptablesを再起動
$ sudo systemctl restart iptables
(1.5) 接続確認
新しくコマンドラインを起動し、サーバーに接続してください。
$ ssh -p 新しいポート番号 -u ユーザー名@サーバー
接続できれば、設定完了です。
接続できない場合は、設定に間違いがないか接続済みのコマンドラインから確認してください。
2. ユーザー制限
SSHで接続できるユーザーを制限します。
不要なユーザーの接続を禁止し、認証数を減らすことで、サーバーに接続される可能性を下げます。
(2.1) SSHDの設定ファイルを開く
$ sudo vi /etc/ssh/sshd_config
(2.2) ユーザーの設定
設定ファイルにSSH接続を許可するユーザーの設定を追記します。
# 基本
AllowUsers ユーザー名
# 複数ユーザーがいる場合
AllowUsers ユーザー名1 ユーザー名2 ユーザー名3
# 接続元IPアドレスを制限する場合
AllowUsers ユーザー名@接続元IPアドレス
# 接続元IPアドレスのみ制限する場合
AllowUsers *@接続元IPアドレス
(2.3) SSHDの再起動
$ sudo systemctl restart sshd
(2.4) 接続確認
新しくコマンドラインを起動し、許可ユーザー、拒否ユーザー(許可していないユーザー)で接続を試してください。
接続に許可ユーザーでは成功し、拒否ユーザーでは失敗になれば設定完了です。
3. rootユーザー制限
rootユーザーは全ての権限を持つユーザーです。
何でも実行でき便利な反面、クラッカーにrootユーザーになりすまされると、非常に危険なユーザーになります。
また、多くのOSではrootユーザーはデフォルトで用意されているため、パスワードさえ合ってしまえば接続できてしまいます。
それらを回避できるようrootユーザーのSSH接続を禁止します。
(3.1) SSHDの設定ファイルを開く
$ sudo vi /etc/ssh/sshd_config
(3.2) rootユーザー接続の設定
- PermitRootLogin yes
+ PermitRootLogin no
(3.3) SSHDの再起動
$ sudo systemctl restart sshd
(3.4) 接続確認
新しくコマンドラインを起動し、rootユーザーで接続を試してください。
接続に失敗すれば、設定完了です。
4. 認証方式を鍵認証に変更
接続の認証方式を公開鍵認証に変更すると、鍵を所持した端末からのみ接続できるようになります。
なお、AWSではデフォルトで公開鍵認証になっているなど、サービスによって初期設定が変わります。
さくらのVPSではデフォルトはパスワード認証ですが、公式サイトに設定手順が紹介されていますので、気になる方はご覧ください。
https://knowledge.sakura.ad.jp/3543/
※ 以下手順はMacOSのターミナルで実行した結果になります。
(4.1) 公開鍵ディレクトリに移動
クライアントPCで公開鍵ディレクトリに移動します。
$ cd ~/.ssh
[ ~/.sshが存在しない場合は下記を実行 ]
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cd ~/.ssh
(4.2) 公開鍵の作成
クライアントPCで公開鍵を作成します。
$ ssh-keygen
[ 上記コマンド実行後、下記入力を求められるので状況に合わせて任意に設定してください。 ]
Enter file in which to save the key (**********): 保存ファイル名を入力
Enter passphrase (empty for no passphrase): パスフレーズを入力(後で使うので覚えておいてください。)
Enter same passphrase again: パスフレーズを再度入力
(4.3) 公開鍵の確認
lsコマンドを実行し、保存ファイル名で指定したファイルが2つ表示されれば作成に成功しています。
なお、拡張がpubのファイルが公開鍵、拡張子がないファイルが秘密鍵になります。
(4.4) 公開鍵のコピー
公開鍵をcatコマンドで表示し、内容をコピーしてください。
$ cat sample.pub (ファイル名は作成時に指定したファイル名)
(4.5) サーバーに接続
ここからはサーバー側の設定になります。
SSHでクライアントPCから接続してください。
$ ssh -p ポート番号 -u ユーザー名@サーバー
(4.6) 公開鍵を配置
公開鍵をサーバーに配置します。
$ cd ~/.ssh
[ ~/.sshが存在しない場合は下記を実行 ]
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cd ~/.ssh
[ エディタでファイルを作成 ]
$ vi authorized_keys
[ viでコピーした公開鍵の内容を貼り付けし :wp で保存 ]
(4.7) 公開鍵の権限変更
$ chmod 600 authorized_keys
(4.8) 接続確認
新しくコマンドラインを起動し、下記コマンドで接続できるか確認してください。
$ ssh -i ~/.ssh/秘密鍵 -p ポート番号 ユーザー名@サーバー
(4.9) パスワード認証の禁止
パスワード認証を禁止し、鍵認証のみで接続できるようにします。
(4.9.1) SSHD設定ファイルを開く
$ sudo vi /etc/ssh/sshd_config
(4.9.2) 設定ファイルの編集
- PasswordAuthentication yes
+ PasswordAuthentication no
(4.9.3) SSHDの再起動
$ sudo systemctl restart sshd
(4.9.4) 接続確認
rootユーザーでの接続が拒否されれば設定完了です。
$ ssh -p ポート -u root -p
まとめ
サーバーを守るためにSSHのセキュリティを強化しておくと良いでしょう。
設定手順が多く感じるかもしれませんが、サーバ管理者やサーバーを通じたサービスの利用者が安心して使えるよう設定しておきましょう。