SSHのポート番号を変更して不正アクセスの試みを減らす方法

本記事はプロモーションを含みます

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」という設定箇所があります。

/etc/ssh/sshd_config
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

ポート場号を変える場合は先頭の「#」を削除して新たな値を設定します。以下の例ではポート番号を「65123」に変更しています。

/etc/ssh/sshd_config
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番に接続します。

~/.ssh/config
Host example.com
  HostName example.com
  Port 65123