サーバーのsshポート番号を変更して鍵認証に変更する

はじめに

Ubuntu Linux でサーバーを構築した場合、ssh接続でリモート制御する際は「パスワード認証」がデフォルトです。
この方式は直感的でわかりやすいのですが、パスワードによってはブルートフォースアタック(総当たり攻撃)の餌食となり、最悪サーバーが乗っ取られる可能性があります。
ここでは、ブルートフォースアタックに対して有効な対策の1つとなる「公開鍵認証方式」でssh接続する方法を解説します。

公開鍵、秘密鍵の作成

まずTeraTermを起動します。

次に以下の画面が表示された「キャンセル」を選択します。

次に「設定」-> 「SSH鍵生成」の順に選択します。

鍵の種類を「RSA」に設定されていることを確認したら「生成」を選択します。

ここでは「鍵のパスフレーズ」「パスフレーズの確認」を空白にしています。※後述しますが、設定した方がセキュリティが高くなります。
コメントには鍵ファイルの管理用の識別情報を入れたりできます。

次に「公開鍵の保存」を選択します。
id_rsa.pub をどこに保存するか聞かれますので、わかりやすい場所に保存してください。ここではデスクトップに保存したとして進めます。

次に「秘密鍵の保存」を選択します。

その際、パスフレーズを設定していない場合は以下の画面が表示されますが、「はい」を選択します。
選択後、id_rsa をどこに保存するか聞かれますので わかりやすい場所に保存してください。ここでは id_rsa.pub(公開鍵)と同じく、デスクトップに保存したとして進めます。

公開鍵をサーバーに転送

次に、生成した公開鍵をサーバーに転送します。ファイル転送をする方法は色々ありますが、ここではTeraTermの SCP機能で転送してみます。

まず、サーバーにTeraTermでSSH接続します。

ユーザーIDとパスワード認証が完了しましたら、デスクトップに保存した id_rsa.pub をTeraTermの画面にドラッグ&ドロップします。
以下の画面が表示されたら「OK」を選択します。

転送が完了し、サーバーのホームディレクトリに id_rsa.pub が存在するかを確認してください。

公開鍵の登録

公開鍵 id_rsa.pub の内容を以下のコマンドでサーバーに登録します。

cat id_rsa.pub >> ~/.ssh/authorized_keys

SSHサーバーの設定変更

次にSSHサーバー(OpenSSH)の設定を変更します。
以下はエディターにvimを使用していますが、お好みのエディターを適宜使用してください。

sudo vim /etc/ssh/sshd_config

sshd_config ファイルの3点を修正します。

接続ポート番号の変更

まず接続するポート番号をデフォルトの22から任意の値に変更します。
正直、ボート番号の変更はポートスキャンとかで一発でバレるので、気休め程度かもしれません。やらないよりはマシぐらいに思っています。

※15行目ぐらい
#Port 22  ※この行の先頭にある#を削除して、22を別の値に変更する

↓変更後

Port 45678  ※先頭の#を削除し、22 から 45678 に変更しました。
#AddressFamily any

Tips
Linuxでは任意の用途で使用できるポート番号の範囲は、以下のコマンドで確認できます。

cat  /proc/sys/net/ipv4/ip_local_port_range

※実行結果
32768   60999

上記は、32768~60999 の範囲は好きな用途で使用してもいいよ。という意味です。

公開鍵認証の有効化

続いて公開鍵認証を有効にします。

※39行目ぐらい
#PubkeyAuthentication yes 
※↑行の先頭にある#を削除すると公開鍵認証が有効化

↓変更後

PubkeyAuthentication yes ※先頭の#を削除しました。

パスワード認証の無効化

最後にパスワード認証を無効化します。

※58行目ぐらい
PasswordAuthentication yes ※yes を no に変更します。

↓変更後

PasswordAuthentication no ※no に変更しました。

ファイアーウォールのポートを解放する

ファイアーウォールが有効になっている場合は、45678の接続を許可します。ルーターなどのファイアーウォールを使用している場合は不要の場合もあります。

sudo ufw allow 45678

※実行結果
Rule added
Rule added (v6)

設定反映の為にsshdを再起動

全部終了しましたら、sshdを再起動して設定を反映させましょう。

sudo systemctl restart sshd.service

変更したポート番号と秘密鍵でログインしてみましょう

TeraTermを起動します。
TCPポート番号を sshd_configで設定した値に変更します。
※以下の例は 45678 に設定した場合です。

SSH認証画面ではユーザー名と
認証方式 を「 RSA/DSA/ECDSA/ED25519鍵を使用する」を選択し、
先に作成した秘密鍵ファイル id_rsa を指定します。
今回の例ではパスフレーズを未指定にしましたので空白で構いません。

無事認証が成功し、ログインできればOKです。
以降、秘密鍵ファイルが無いとログインはできなくなります。

発展的な内容

今回は未指定ですが、鍵生成時にパスフレーズを追加すれば、秘密鍵が流出しても、パスフレーズがわからないとログインはできないのでセキュリティ的なメリットがあります。

コメントする