インターネットサーバーの多くは、ssh/sftpでサーバーに接続します。
このsshは、OSをインストールしたときに有効になっていることが多いですが、そのため弱いセキュリティ設定のまま運用されている環境もあります。
Linuxシステム悩み解決(資料)
今回は、このsshデーモンのセキュリティを強化する設定をしていきます。
本設定では、CentOS7を基本として設定していきます。Ubuntu Server LTSなど、他のディストリビューションの場合には、それぞれ設定ファイルの場所などを確認して設定をお願いいたします。
CentOSでは、次の場所に設定ファイルが保存されています。
/etc/ssh/ssh_config /etc/ssh/sshd_conf
ssh_configは、サーバー上から他のシステムへssh接続するときの設定になります。
sshd_configは、sshデーモン(sshd)が接続を受ける場合の設定になります。
今回は、主にsshd_configを設定していきます。
基本的なセキュリティ設定
sshd_configで、最低限のセキュリティ設定を追加します。
SSHプロトコルのバージョン指定:必須
SSHでは、Protocol 1 と Protocol 2の2つの接続方式があります。
しかし、Protocol 1には、中間者攻撃の問題があるため、サーバーではProtocol 2のみ接続を受け付けるように設定します。
以下の設定を追加します。
Protocol 2
パスワード認証の無効化:必須
ユーザー名、パスワードによる認証では、脆弱なパスワードを設定していた場合簡単に侵入を許してしまします。
パスワード認証を無効にし、RSA鍵認証のみを受け付けるように設定を変更します。
PasswordAuthentication no
空のパスワードの拒否:必須
ほとんどのOSではインストール時点で無効になっていますが、空のパスワードでの接続を拒否する設定も追加します。
PermitEmptyPasswords no
rootユーザーのログインの禁止:必須
この設定もほとんどのOSではインストール時点で禁止になっていますが、以下の設定を追加し確実にrootユーザーでのログインをできないようにします。
PermitRootLogin no
接続するユーザーの制限
サーバーに接続するユーザーがわかっている場合、ログインするユーザーだけが接続できるように、ログインユーザーを制限します。
AllowUsers username
AllowUsersは以下のような記述ができます。
接続ユーザーを指定 | AllowUsers username |
複数のユーザーを指定 | AllowUsers user1 user2 |
特定IPアドレスからユーザー指定 | AllowUsers user@ipaddress |
特定IPアドレスから全ユーザー接続 | AlllowUsers *@ipaddress |
SSH待ち受けポートの変更
SSHのプロトコル ポート22のままの場合、仕様で定義されていますのでポートスキャンですぐにssh接続が有効になっていることを検出されてしまいます。
このポート番号を、別のポート番号に変更することができます。
Port 10022
ポート番号を変更する場合には、0~1023までのWell-known Port以上の値を指定するのが望ましいです。ポート番号の最大値は 65535 となります。
ここまでで基本的な sshデーモン(sshd)の設定が完了となります。
さらに今となっては弱い暗号方式やハッシュアルゴリズムを無効にして対策する場合には、以下の設定を実施します。
弱い暗号を使用しないセキュリティ設定
sshデーモンの基本的な設定は完了していますが、sshでは接続で使用する暗号方式に設定も可能です。
OSで提供されているsshパッケージでは、今では問題が発見されている暗号方式をサポートしたままの場合がありますので、暗号方式を変更することで、よりセキュリティを強化することができます。
現在有効な暗号方式の確認
現在sshがサポートする暗号方式を確認するには、以下のコマンドを実行します。
# ssh -Q cipher 3des-cbc blowfish-cbc cast128-cbc arcfour arcfour128 arcfour256 aes128-cbc aes192-cbc aes256-cbc [email protected] aes128-ctr aes192-ctr aes256-ctr [email protected] [email protected] [email protected]
この中で、CBCモード(Cipher BlockChaining)とRC4(arcfour)ならびに弱い暗号方式を無効にします。
RC4,CBCを無効にした暗号方式の設定
CBC と RC4を削除して、以下の暗号方式を残します。
- aes128-ctr
- aes192-ctr
- aes256-ctr
- [email protected]
- [email protected]
- [email protected]
使用する暗号方式が決まりましたので、/etc/ssh/sshd_config に以下の設定を追加します。
Ciphers [email protected], [email protected], [email protected], aes256-ctr,aes192-ctr,aes128-ctr
現在のハッシュアルゴリズムの確認
同様にsshで使用しているハッシュアルゴリズムを確認します。
# ssh -Q mac hmac-sha1 hmac-sha1-96 hmac-sha2-256 hmac-sha2-512 hmac-md5 hmac-md5-96 hmac-ripemd160 [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
問題の確認されている MD5 と SHA1が有効になっています。
脆弱なハッシュアルゴリズムの無効化
標準で MD5 は SHA-1が有効になっていますので、問題の発見されているハッシュアルゴリズムを無効にします。
しかし、PuTTY の古いsshでは、sha1を無効にしてしまうとssh接続できなくなりますので、sha1(160bit)は、いちばん優先順位を低くして有効にしておきます。
以下の設定を/etc/ssh/sshd_config に以下の設定を追加します。
Macs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected],[email protected],[email protected],hmac-ripemd160,[email protected],[email protected],hmac-sha1
この設定で古い暗号方式(RC4,CBC)とハッシュアルゴリズム(MD5)を無効にすることができます。
実際には、Firewallの組み合わせなどで接続元のIPアドレスの制限など追加の対策はありますが、ここまでの設定でsshdの認証・暗号の弱い部分の対策ができたことになります。
設定の検証と有効化
すべての設定が終わったら、以下のコマンドを実行し設定ファイルに問題がないことを確認し、sshdを再起動します。
# sshd -t (テストモードなので、問題なければ何も表示されません) # systemctl restart sshd