SSH のポート番号を変更しても意味がない
VPS 初心者向けに初期設定の手順を公開しているサイトの多くが「セキュリティー強化のため SSH の Port は10022 に変更」と書かれていますがほぼ無意味である。数分程度の時間稼ぎは出来ると思いますが 0 から 65535 のポートすべてをスキャンすれば SSH のポートは判別可能。結論は SSH の Port はデフォルトの 22 のままで良いということ。
じゃぁ、不正アクセスの対策はどうすればいいかというと…。
- SSH 接続は鍵認証方式(2048 bit以上推奨)のみ受け入れる
- root での SSH 接続は拒否する
- iptables で 接続可能なホストを指定する(固定IP推奨)
- Fail2Ban などの不正アクセス対策ツールを導入
この4つを実践するだけで不正アクセスを大幅に防げます。
開発用の一般ユーザーを準備
一般ユーザーを作成 for お名前.com VPS を参考にユーザーを作成する。
鍵認証方式の準備
ここからは Mac OS X での作業を前提とする。Windows を利用している場合は下記のサイトを参考に設定する。
公開鍵と秘密鍵の生成(Mac)
Mac で 公開鍵と秘密鍵を生成する場合は ssh-keygen コマンドで作成する。
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/xxxxxxx/.ssh/id_rsa): onamae_rsa # ファイル名を指定 Enter passphrase (empty for no passphrase): # パスワード入力 Enter same passphrase again: # パスワード入力(確認用) Your identification has been saved in onamae_rsa. Your public key has been saved in onamae_rsa.pub. The key's randomart image is: +--[ RSA 2048]——+ : : (省略) : +-----------------+
鍵ファイルの確認(Mac)
$ ls -al ~/.ssh total 184 : (省略) -rw------- 1 xxxxxxx staff 1766 8 21 20:14 onamae_rsa -rw-r--r-- 1 xxxxxxx staff 426 8 21 20:14 onamae_rsa.pub
公開鍵である onamae_rsa.pub と秘密鍵である onamae_rsa が作成される。
公開鍵の保存場所を作成(CentOS)
公開鍵を保存するための .ssh ディレクトリを作成する。
$ mkdir ~/.ssh
公開鍵をサーバーに転送(Mac)
サーバーにファイルを転送する場合は scp コマンドを使って送信する。
$ scp ~/.ssh/onamae_rsa.pub sample@[ host name ]:~/.ssh/ sample@[ host name ]'s password: onamae_rsa.pub 100% 426 0.4KB/s 00:00
公開鍵のファイル名を変更(CentOS)
SSH の設定時に全ユーザー共通のファイル名にしないといけないので変更する。
$ mv ~/.ssh/onamae_rsa.pub ~/.ssh/authorized_keys
~/.ssh と authorized_keys のパーミッションを変更
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys
鍵認証方式で SSH 接続できるように設定を変更
SSH の設定ファイルを変更(CentOS)
SSH の設定ファイル「/etc/ssh/sshd_config」を編集する。
# vim /etc/ssh/sshd_config
RSA 認証関連を有効化
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. : : (省略) : -#RSAAuthentication yes +RSAAuthentication yes -#PubkeyAuthentication yes +PubkeyAuthentication yes -#AuthorizedKeysFile .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys
SSH の再起動(CentOS)
SSH を再起動する場合は service コマンドの restart を実行する。
# service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ]
鍵認証方式で SSH 接続できるかを確認(Mac)
ssh コマンドの -l オプションでユーザー名を指定、 -i オプションで秘密鍵を指定する。
Mac の場合は作成した鍵のパスワードを訪ねてきます。以降、パスワード入力を省略したい場合はチェックボックスにチェックを入れて接続すれば良い。
$ ssh [ host name ] -i ~/.ssh/onamae_rsa -l sample Identity added: /Users/macuser/.ssh/onamae_rsa (/Users/macuser/.ssh/onamae_rsa) Last login: Thu Aug 21 19:30:50 2014 from [ client ip address ] [sample@[ host name ] ~]$
SSH のパスワード認証を拒否
SSH の設定ファイルを変更(CentOS)
SSH の設定ファイル「/etc/ssh/sshd_config」を編集する。
# vim /etc/ssh/sshd_config
パスワード認証を拒否
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. : : (省略) : -asswordAuthentication yes +asswordAuthentication no
SSH の再起動(CentOS)
SSH を再起動する場合は service コマンドの restart を実行する。
# service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ]
パスワード形式で SSH 接続が拒否されるか確認(Mac)
新たに hoge をいうユーザーを作成しパスワード認証で SSH 接続できるかを試すもログインできず。
$ ssh [ host name ] -l hoge Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
鍵認証方式を使ってログインできるか確認(Mac)
sample ユーザーを利用して 鍵認証方式でログインする。
$ ssh [ host name ] -i ~/.ssh/onamae_rsa -l sample Last login: Thu Aug 21 19:57:23 2014 from [ client ip address ] [sample@[ host name ] ~]$
root での SSH 接続を拒否
鍵認証方式を使って root で SSH 接続できるか確認(Mac)
$ ssh [ host name ] -i ~/.ssh/onamae_001.key -l root Last login: Thu Aug 21 19:57:23 2014 from [ client ip address ] [root@[ host name ] ~]#
SSH の設定ファイルを変更(CentOS)
SSH の設定ファイル「/etc/ssh/sshd_config」を編集する。
# vim /etc/ssh/sshd_config
パスワード認証を拒否(CentOS)
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. : : (省略) : -# PermitRootLogin yes +PermitRootLogin no
SSH の再起動(CentOS)
SSH を再起動する場合は service コマンドの restart を実行する。
# service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ]
鍵認証方式を使ってログインできないか確認(Mac)
$ ssh [ host name ] -i ~/.ssh/onamae_001.key -l root Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
所感
鍵認証に必要な鍵の作成や SSH の設定がめんどくさいかもしれないがセキュリティを担保するためには必須の作業だと思います。慣れれば15分程度で終わるので絶対に行いましょう。
複数のマシンで秘密鍵を利用する場合には USB メモリーなど紛失する恐れのある媒体ではなく Google Drive や Dropbox などのクラウドストレージに暗号化を施して保管していれば問題ないかと思います。