本記事はプロモーションを含みます
SSHは通常ポート22番を使います。サーバーをインターネット上で公開した経験のある方ならば分かると思いますが、24時間365日休まることなく国内外からSSHログインの試行が繰り返されています。
これらはほとんど自動化されているツールによるものですから、単純なパスワードを使っていないかぎり侵入を許すことはないでしょう。ただ、可能性はゼロではないので自動化された攻撃そのものを排除する方が安全です。
方法のひとつはIPアドレス制限をすることですが、それには送信元IPアドレスが固定されている必要があります。そのため誰でもIP制限できるわけではないと思います。
SSH接続を送信元IPアドレスで制限するための設定手順を分かりやすく解説そこで手軽に実施できる対策がSSHのポート番号を変更することです。人間相手であればポートスキャンを実施してSSHのポート番号を突き止められてしまいますが、自動化ツールの攻撃を防ぐ場合はポート場号の変更で十分です。
注意点として、ポート番号を10022だとか20022のように「22」が付く番号は避けた方がいいです。というのも、これらのポートはSSHの代替ポート番号として使うことが多いためです。攻撃者はそのあたり良く知っているので、ランダムなポート番号をつけましょう。
SSHの設定でポート番号を変更する
設定変更は/etc/ssh/sshd_config
でおこないます。/etc/ssh/sshd_config
の中に「Port」という設定箇所があります。
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
ポート場号を変える場合は先頭の「#」を削除して新たな値を設定します。以下の例ではポート番号を「65123」に変更しています。
Port 65123
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
ポート番号は何番にするべきか?
さきほど書いたように「22」が付く番号は避けた方が良いです。また、0~1023番はシステムで予約されているウェルノウンポート番号なので避けます。
1024~49151番は登録済みポート番号なので利用中のポート番号でなければ使っても問題ありません。また、ダイナミック/プライベートポート番号である49152~65535番は用途が決まっていないポート番号で、外部接続する際に一時的に利用するポート番号ですが自由に使えます。
結論を書くと0~1023番は避け、それ以外のポート番号で利用中でなければ何番を使っても問題ありません。
0~1023番 | システムで予約済み(使わない) |
1024~49151番 | 登録済みポート番号(使用可) |
49152~65535番 | 使用可 |
設定を反映させる
/etc/ssh/sshd_config
を編集して保存してもSSHのポート番号は変わりません。設定を反映させるためにsshdをリロードします。
sudo systemctl reload sshd
sshdをリロードするとポート番号が変わりますが、接続中の通信には影響ないのでポート22番で接続していた方はそのままSSH通信を継続できます。
ポート番号を変更してSSH接続する方法
通常はssh example.com
というコマンドでログインできますが、ポート番号を変更した場合は「-p」オプションを付けてポート番号を指定します。
ssh example.com -p 65123
毎回ポート番号を指定して接続するのは面倒という方は設定ファイルに記述しておくとポート番号を変更する前と同じコマンドでSSH接続できます。
ホームディレクトリ配下に.ssh
というディレクトリが存在しているはずなので(なければ作成する)、その配下にconfig
というファイルを作成します(Windowsの方はC:\Users\ユーザー名\.ssh)。
そこに以下のように記述すると ssh example.com というコマンドを実行した際に自動的にポート65123番に接続します。
Host example.com
HostName example.com
Port 65123