【クラウドサーバー】さくらVPSのSSHセキュリティ強化設定 4選

クラウドサーバーをリモート操作する場合、クライアントPCからSSH接続するケースがほとんどです。

そのため、悪意あるユーザー(以下、クラッカー)が標的にしやすい部分の1つになりますので、セキュリティを強化し、攻撃を防げるようにしましょう。

本記事ではSSHのセキュリティ強化設定を4つご紹介します。

なお、本記事の具体的な手順はさくらVPSのサーバー(CentOS 7)での手順になりますが、他クラウドサーバーでも同じ観点でセキュリティ設定を行えるので、都度読み替えてご覧ください。

1. ポート番号変更

SSHのポート番号はデフォルトで22番を使用します。

クラッカーは脆弱性を狙って攻撃することが多く、デフォルト設定の22番ポートは標的にされる可能性が高くあります。そのため、このポート番号を変更してセキュリティを強化します。

なお、最後までSSH接続を切らないように1つずつ慎重に設定を進めてください。

接続が切れるとWEBサーバーにアクセスできなくなる可能性があります。

(1.1) SSHDの設定ファイルを開く

sudo vi /etc/ssh/sshd_config

(1.2) 設定ファイルのポート番号を変更

- Port 22
+ Port 65535

なお、ポート番号は1024~65535の範囲で変更してください。

【補足】
ポート番号は1番~65535番までありますが、1番~1023番はウェルノウンポート(Well-known port)と呼ばれ、特定のサービスやプロトロルなどで使用されます。そのため独自でポートを設定する場合は1024番~65535番までを使用することを推奨します。

(1.3) SSHを再起動

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接続しているターミナルは繋げたまま、別で1つターミナルを起動し、サーバーに接続してください。

ssh -p 新しいポート番号 ユーザー名@サーバー

正しく接続できれば、設定完了となります。

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) 接続確認

現在、SSH接続しているターミナルは繋げたまま、別で1つターミナルを起動し、許可ユーザー、拒否ユーザー(許可していないユーザー)のそれぞれでサーバーの接続を試みてください。

許可ユーザーは接続でき、拒否ユーザーは接続できなければ、設定完了です。

3. rootユーザーのSSH接続禁止

rootユーザーは全ての操作権限を持ったユーザーになります。

クラッカーにrootユーザーとしてサーバーに接続されてしまうと、なんでも出来てしまうので危険です。

また、多くのOSではrootユーザーはデフォルトで用意されているため、ログインに必要なユーザー名が特定されている状態になり、パスワードさえ合ってしまえば接続できてしまいます。

それらを回避できるようrootユーザーでのSSH接続を禁止に設定します。

(3.1) SSHDの設定ファイルを開く

sudo vi /etc/ssh/sshd_config

(3.2) rootユーザーのSSH接続を禁止にする

- PermitRootLogin yes
+ PermitRootLogin no

(3.3) SSHDを再起動する

sudo systemctl restart sshd

(3.4) 接続確認

現在、SSH接続しているターミナルは繋げたまま、別で1つターミナルを起動し、rootユーザーで接続を試みてください。接続できなければ設定完了です。

4. SSHの認証方式を公開鍵認証に変更

認証方式を公開鍵認証にすることで、公開鍵を所持したPCからのみアクセスできるようになります。

※ AWSではデフォルトで公開鍵認証でのみログインが可能です。
※ 下記のクライアントPC操作はMacOSのターミナルで実行した場合になります。
さくらインターネットのサイトにも手順が掲載されています。
https://knowledge.sakura.ad.jp/3543/

(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つが表示されればOKです。

なお、拡張子にpubがついているファイルが公開鍵、ついていないものが秘密鍵になります。

(4.4) 公開鍵の内容をコピー

公開鍵の内容をcatコマンドで表示し、コピーしてください。

# クライアントPCで実行
cat sample.pub (ファイル名は作成時に指定したファイル名)

# 表示された内容をコピー

(4.5) サーバーにSSHで接続

ここからはサーバー側の設定になりますので、サーバーにSSH接続してください。

(4.6) サーバーに公開鍵ファイルを作成

クライアントPCで作成した公開鍵の情報を保存するファイルをサーバーで作成します。

cd ~/.ssh

# ~/.sshが存在しない場合は下記を実行
mkdir ~/.ssh
chmod 700 ~/.ssh
cd ~/.ssh

# エディタでファイルを作成
vi authorized_keys

# viが開いたら、コピーした公開鍵の内容を貼り付け :wp で保存し終了

(4.7) 公開鍵の権限を変更

chmod 600 authorized_keys

(4.8) 公開鍵認証でSSH接続確認

下記コマンドで接続できればOKです。

ssh -i ~/.ssh/秘密鍵 -p ポート番号 ユーザー名@サーバー

(4.9) パスワードログインを禁止する

パスワード、公開鍵のいずれの認証方式も可能なので、パスワードを禁止し、公開鍵を所持したPCのみSSH接続できるようにします。

(4.9.1) SSHD設定ファイルを開く

sudo vi /etc/ssh/sshd_config

(4.9.2) PasswordAuthenticationをnoに設定する

- PasswordAuthentication yes
+ PasswordAuthentication no

(4.9.3) SSHDを再起動する

sudo systemctl restart sshd

(4.9.4) パスワード認証が拒否されるか確認

下記コマンドで接続が拒否されればOKです。

ssh -p ポート番号 ユーザー名@サーバー

まとめ

以上、4つのセキュリティ強化設定のご紹介になります。

手順が多いですが、サーバー管理者やサーバーで稼働するアプリケーションやホームページの利用者が少しでも安心して使えるよう是非設定してみてください。