SSHのセキュリティをさらに高める設定

ターミナル画面のイメージ画像

SSHのセキュリティについて見直したので、メモしてみました。

基本的な設定から、暗号スイートや接続数制限など、あまり情報がない設定にまで踏み込んで、SSHのセキュリティをさらに向上させる設定をまとめました。

sshd_config の設定

以下、sshd_config の設定です。詳しい解説はページ下部へ。

設定の反映にはsshdの再起動が必要なのでお忘れなく。

#sshdがリッスンするポート番号の変更
port <22以外の任意のポート番号>

#rootでのログインを禁止
PermitRootLogin no

#公開鍵認証を有効化
PubkeyAuthentication yes

#パスワード認証を無効化
PasswordAuthentication no

#チャレンジレスポンス認証を無効化
ChallengeResponseAuthentication no

#接続をSSH version2 のみに限定する
Protocol 2

#認証が完了していない段階のコネクションを受け入れる最大数
MaxStartups 2

#ログインを許可するユーザーのリスト(スペース区切り)
AllowUsers tanaka yamada

#暗号化アルゴリズムの指定(コンマ区切り)
Ciphers aes256-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-gcm@openssh.com,aes128-ctr,chacha20-poly1305@openssh.com

#鍵交換アルゴリズムの指定
KexAlgorithms curve25519-sha256@libssh.org,curve25519-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

#MACアルゴリズムの指定
MACs umac-128-etm@openssh.com,umac-64-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128@openssh.com,umac-64@openssh.com,hmac-sha2-512,hmac-sha2-256

以下、各設定項目の解説です。

前半の項目に関しては、別記事で解説しているのでそちらを参照してください。

基礎から学ぶ!最初にやるべきSSHのセキュリティ設定【全コマンド例付き】

sshdがリッスンするポート番号の変更(SELinux有効の場合)

当然ですがsshd_configとは別に、ファイアウォールの許可設定が必要です。

また、SELinux有効で運用している場合、別途許可設定が必要です。

#コマンド例(CentOS)
#まだインストールしていない場合のみ
$ yum install policycoreutils-python

$ semanage port -a -t ssh_port_t -p tcp <変更したポート番号>

認証関係の設定

MaxStartups

同時に認証できる接続数の上限を設定することができます。

デフォルトでは、10まで無条件に接続を受け入れ、それを超えると30%の確率で接続を拒否するようになります。それ以降は、接続数が増加する度に拒否の確率が上がり、接続数が100に達すると100%拒否するようになります。

接続数上限のコントロール方法には、上記のように段々拒否する確率を上げていく方法(①)と、単純に上限を決めてそれ以下は無条件に許可する方法(②)の2つがあります。

同時に100接続することは考えにくかったので、許可数を減らしました。

ちなみに、設定の書式は以下のようになっています。

#①の方法
MaxStartups <開始数>:<接続拒否確率>:<上限数>

#②の方法
MaxStartups <上限数>

AllowUsers

ログインを許可するユーザーを指定することができます。これにより、意図していないユーザーへのログインを防ぐことが可能です。

暗号化関係の設定

接続に利用する暗号化のアルゴリズムを設定することができます。WebサーバのSSL設定によく似ています。

デフォルトの設定だと、強度的に少し不安があるものが混じっているので、それらを除きました。

Ciphers

実際の通信を暗号化する暗号化アルゴリズムを指定します。

デフォルトでは、既に脆弱性が報告されている3DES-cbcが有効になっていますが無効化しています。また、古いバージョンのOpenSSHではRC4が有効になっているらしく、こちらはもっと危険です。

KexAlgorithms

実際の通信に先立って、鍵を安全に配送するための鍵交換アルゴリズムを指定します。Key Exchange (KEX) Method Updates and Recommendations for Secure Shell (SSH) を参考にしました。※1curve25519 が2種類ありますが、@libssh.org の方はNIST準拠のものではないそうです。バックドア云々の話が気になる場合は@libssh.orgのつかない方は指定しないほうが良いかも。

Macs

改ざん検知等に利用される、MACのアルゴリズムを指定します。こちらの設定に関しては私もいまいち分からない部分があるので、デフォルト設定から、ハッシュアルゴリズムにMD5やSHA1を使っているものを無効にしました。

公開鍵アルゴリズムの変更

公開鍵のアルゴリズムとして最も一般的に利用されているのはRSAで、現時点では鍵長が2048ビット以上のものはセキュリティ上特に問題ありません。(つまり、公開鍵アルゴリズムの変更は半分趣味みたいなもの)

OpenSSH 6.5 以降では ed25519 を利用することができます。ed25519 は「エドワーズ曲線デジタル署名アルゴリズム」のことで、現状選択できるアルゴリズムの中で最もセキュアということなので、これを利用します。

$ ssh-keygen -t ed25519

鍵長は、256bit固定なので、指定する必要はありません。

ここで生成した鍵ペアを利用するように authorized_keys に設定します。

 

脚注   [ + ]

1. curve25519 が2種類ありますが、@libssh.org の方はNIST準拠のものではないそうです。バックドア云々の話が気になる場合は@libssh.orgのつかない方は指定しないほうが良いかも。

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です