目次

Proxmox VE のSSHを制限する


OpenSSHの脆弱性が新たに発表されました。これは放置しておくと SSH を受け付ける全てのサーバーを乗っ取る事ができてしまう脆弱性で、「regreSSHion」と名付けられています。過去対応されたバグが戻ってしまったということで、すこぶる上手いネーミングですね。

そこでさまざまなサーバのSSHの状態を調べていたのですが、ふと、Proxmoxの環境はESXiと違ってデフォルトでSSHが開いていたなと思い出し現状を確認したところ、特に制限が入ってなかったので、SSHを制限することにしました。

SSH制限の方針

rootユーザでのSSHの制限は以下の方向で行うことにします。

  • 一般アカウントの作成
  • 一般アカウントでのSSHを鍵認証のみにする
  • rootユーザのSSHの無効化

一般アカウントの作成

ベースとなるProxmox VEはDebian 12にインストールされています。素に近い環境でしたので、そもそもrootユーザ以外のアカウントが存在しません。そこで、最初に一般アカウントを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 一般アカウントの作成
# ホームディレクトリを作成しユーザを作成する
mkdir /home/<USERNAME>
useradd <USERNAME> -d /home/<USERNAME>

# パスワードを設定する
passwd <USERNAME>

# ホームディレクトリを作成したユーザで操作可能にする
chown <USERNAME>:<USERNAME> /home/<USERNAME>

一般アカウントでのSSHを鍵認証のみにする

この状態で、作成した一般アカウントでSSHが可能です。SSHができるか試してみても良いかもしれません。今回は、事前に払い出した鍵認証のみとし、パスワード認証をさせないことにします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 一般アカウントにスイッチし鍵認証のための設定を行う

su - <USERNAME>

## 以下、一般アカウント
# 一般アカウントのSSH用のディレクトリを作成する

mkdir .ssh
chmod 700 .ssh

# SSHのディレクトリを作成したので、ローカル端末から作業するためにログアウトする
exit

# ローカルホストから鍵を転送する

ssh-copy-id <USERNAME>@<server_ip>

SSHができない場合、.sshディレクトリとauthorized_keysファイルのパーミッションを正しく設定してないことが大半。 ssh-copy-idはauthorized_keysを正しく設定してくれるため、scpやcpを利用するよりも簡単なので推奨。

次に、鍵認証するためのSSHの設定変更を行う。

1
2
3
4
5
# rootユーザにスイッチしてSSHの設定変更を行う

su -

vi /etc/ssh/sshd_config

以下の行のコメントをはずして有効化する。

1
2
#PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys

AuthorizedKeysFileに.ssh/authorized_keys2が存在していたため、(なんだこれは?と思い)今回は削除しておいた。

あとで調べる。

2024/07/07 調べたので追記。

authorized_keysとauthorized_keys2の違いについて

昨日、Proxmoxのsshを制限することをしていたときに、authorized_keys2という見慣れないものを見つけたので調べてみた
1
2
3
4
5
6
# 編集した設定ファイルのテストを行う。
# 設定ファイルに間違いがなければ何も表示されない
sshd -t

# 誤りがなければ、SSHを再起動する
service sshd restart

一般アカウントでのSSHの動作確認

鍵が転送できたためここで鍵認証ができるかを確かめておく。今後、パスワード認証を塞いだときに、正しく鍵認証ができていないと、再びログインできなくなってしまうためである。

1
2
3
4
5
6
7
8
9

# ローカルホストから、秘密鍵を使ったログインを確認する
# ssh-agentに秘密鍵を登録する
# agent登録時に秘密鍵のパスワードを入力する
ssh-add ~/.ssh/id_rsa


# 登録している秘密鍵を利用してログインを行う。パスワードが聞かれなければOK
ssh <USERNAME>@<server_ip>

確認ができたら、最後にrootユーザSSHとパスワードでのSSHを無効化する

rootユーザのSSHの無効化とパスワードでのSSHの無効化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# rootユーザにスイッチしてSSHの設定変更を行う

su -

vi /etc/ssh/sshd_config

### ここから sshd_config の中身
# 以下の行をnoに変更する(デフォルトがyes)

PermitRootLogin no
PasswordAuthentication no

### ここまで sshd_config

# 設定の確認を行う
sshd -t

# 誤りがなければ、SSHを再起動する
service sshd restart

参考

ローカルに秘密鍵はあるけれど、公開鍵がない!という時の公開鍵の作り方

1
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

以上!。

そういえば、ハッキングラボの作り方が全面改訂されていた。全面改訂ということなので、ちょっと興味ある・・・。