【Linux】SSHセキュリティ強化

Linux
この記事は約5分で読めます。
スポンサーリンク

SSHといえば、元からセキュリティ強化されているプロトコルなので

何もする必要がないのでは?

とんでもない!

きちんと設定しないと不正アクセスされてしまいます。

「通信が暗号化されていること」と

「不特定多数からのアクセスを拒否する」ことは

「セキュリティ」の言葉でくくられますが全くの別物ですよ!

必要なもの

  • サーバ(SSH接続可、OpenSSH導入済)
  • クライアント(SSH接続可)
今回は、クライアントにUbuntu Desktopを利用しています。
Windowsの場合もそれほど変わりませんが、細部は異なります。

ステップ

全体的に事前事後の状態確認は基本動作として割愛しています。(要点を絞るため)
動画では基本動作も含めて全手順をご確認頂けます。

全体的な話ですが。

多分、お作法的にはクライアント側で生成してサーバへ渡すのでしょうね。

今回はすみません、逆でやってしまいました。が、目的は達成可能です。

サーバでSSH鍵を生成

  1. SSH鍵の生成
  2. 公開鍵のリネーム
  3. 公開鍵の権限変更

1. SSH鍵の生成

サーバ側でssh-keygenを実行します。

ssh-keygen -t rsa -b 4096 -C <ユーザー名>     #サーバで実行

オプションのrsa4096は一例ですが、下記のメリットがあります。

  • 比較的暗号強度が高い(突破されにくい)
  • 対応ソフトが多い

~/.sshに、id_rsa(秘密鍵)とid_rsa.pub(公開鍵)が生成されます。

中身はこんな感じです。

秘密鍵/公開鍵の中身は誰にも知られてはいけません!

今回は撮影用に生成し、撮影後に削除しています。

2. 公開鍵のリネーム

SSHサーバ公開鍵はファイル名が定義されていますので、変更します。

cat id_rsa.pub>> authorized_keys     #サーバの~/.sshで実行

3. 公開鍵の権限変更

自分以外の読み書きを制限します。

chmod 600 authorized_keys     #サーバの~/.sshで実行

クライアントへ秘密鍵を導入

  1. 秘密鍵置き場の作成
  2. 秘密鍵の転送
  3. 秘密鍵の権限変更
  4. 秘密鍵のリネーム

1. 秘密鍵置き場の作成

秘密鍵を複数使い分ける≒秘密鍵をクライアントとサーバの対ごとに1つ作成する 場合、フォルダを作っておくと良いでしょう。

(全サーバにクライアントから公開鍵を渡せる運用なら、秘密鍵一つを~/.sshに置けば大丈夫ですよ)

mkdir -p id_rsa; cd $_     #クライアントの~/で実行

2. 秘密鍵の転送

まだSSHパスワード認証で繋がりますね。秘密鍵をサーバからクライアントへ転送します。

scp <サーバのIPアドレス>:<秘密鍵のフルパス> ./     #クライアントの~/id_rsaで実行

3. 秘密鍵の権限変更

自分以外の読み書きを制限します。

chmod 600 id_rsa     #クライアントの~/id_rsaで実行、コマンド中のid_rsaはファイル名

4. 秘密鍵のリネーム

1.同様ですが、複数の秘密鍵を使い分ける人だけでいいです。

mv id_rsa id_rsa_<サーバー名>     #クライアントの~/id_rsaで実行、コマンド中のid_rsaはファイル名

サーバでSSH認証を強化

  1. SSH設定ファイルのバックアップ
  2. SSH設定ファイルの編集
  3. SSH設定変更の反映
  4. 接続確認(パスワード)
  5. 接続確認(秘密鍵)
  6. サーバ側の秘密鍵削除

1. SSH設定ファイルのバックアップ

重要なファイルなので、事前にバックアップを取っておきましょう。

バックアップは、ブレース展開を使うと便利ですね。

sudo cp -p /etc/ssh/sshd_config{,_old}     #サーバで実行
#sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_oldにブレース展開されてから実行されます。

2. SSH設定ファイルの編集

sudo vi /etc/ssh/sshd_config     #サーバで実行
  1. rootのsshを拒否
    PermitRootLogin no
  2. 秘密鍵認証を許可
    PubkeyAuthentication yes
  3. パスワード認証を拒否
    PasswordAuthentication no

vimの保存コマンドは大丈夫ですか?

Esc → :wq

3. SSH設定変更の反映

ファイルを変更しただけでは反映されません。プロセス再起動しましょう。

sudo systemctl restart ssh     #サーバで実行

OSによっては、systemctl以外でのプロセス管理となっています。

すみませんが網羅しきれないため、各自でご確認をお願いいたします。

4. 接続確認(パスワード)

接続できないことを確認します。

ssh <サーバのIPアドレス>     #クライアントで実行

5. 接続確認(秘密鍵)

接続できることを確認します。

ssh <サーバのIPアドレス> -i id_rsa_<サーバー名>     #クライアントの~/id_rsaで実行

6. サーバ側の秘密鍵削除

サーバ側の~/.sshに秘密鍵id_rsaが残っています。

このままだと、他サーバへ接続する際にこの鍵を使ってしまいます。

削除しておきましょう。

rm ~/.ssh/id_rsa     #サーバで実行

動画

文字と写真で表現しきれなかったり、割愛してしまったところを

動画で分かりやすく解説しています。

【Linux】SSHセキュリティ強化

コメント

タイトルとURLをコピーしました