1.6. OpenSSH のセキュリティーの強化
以下のヒントは、OpenSSH を使用する際にセキュリティーを高めるのに役に立ちます。OpenSSH 設定ファイル /etc/ssh/sshd_config
を変更するには、sshd
デーモンを再読み込みして有効にする必要があることに注意してください。
# systemctl reload sshd
ほとんどのセキュリティー強化の設定変更により、最新のアルゴリズムまたは暗号スイートに対応していないクライアントとの互換性が低下します。
安全ではない接続プロトコルの無効化
- SSH を本当の意味で有効なものにするため、OpenSSH スイートに置き換えられる安全ではない接続プロトコルを使用しないようにします。このような接続プロトコルを使用すると、ユーザーのパスワード自体は SSH を使用した 1 回のセッションで保護されても、その後に Telnet を使用してログインした時に傍受されてしまうためです。このため、telnet、rsh、rlogin、ftp などの安全ではないプロトコルを無効にすることを検討してください。
鍵ベースの認証の有効化およびパスワードベースの認証の無効化
認証用パスワードを無効にして鍵のペアのみを許可すると、攻撃対象領域が減ってユーザーの時間を節約できる可能性があります。クライアントにおいて、
ssh-keygen
ツールを使用して鍵のペアを生成し、ssh-copy-id
ユーティリティーを使用して OpenSSH サーバーのクライアントから公開鍵をコピーします。OpenSSH サーバーでパスワードベースの認証を無効にするには、/etc/ssh/sshd_config
のPasswordAuthentication
オプションをno
に変更します。PasswordAuthentication no
鍵のタイプ
ssh-keygen
コマンドは、デフォルトで RSA 鍵のペアを生成しますが、-t
オプションを使用して ECDSA 鍵または Ed25519 鍵を生成するように指定できます。ECDSA (Elliptic Curve Digital Signature Algorithm) は、同等の対称鍵強度で RSA よりも優れたパフォーマンスを提供します。また、短いキーも生成します。Ed25519 公開鍵アルゴリズムは、RSA、DSA、および ECDSA より安全で高速な歪曲エドワーズ曲線の実装です。サーバーホストの鍵の RSA、ECDSA、および Ed25519 がない場合は、OpenSSH が自動的に作成します。RHEL でホストの鍵の作成を設定するには、インスタンス化したサービス
sshd-keygen@.service
を使用します。たとえば、RSA 鍵タイプの自動作成を無効にするには、次のコマンドを実行します。# systemctl mask sshd-keygen@rsa.service
注記cloud-init
が有効になっているイメージでは、ssh-keygen
ユニットが自動的に無効になります。これは、ssh-keygen template
サービスがcloud-init
ツールに干渉し、ホストキーの生成で問題が発生する可能性があるためです。これらの問題を回避するには、cloud-init
が実行している場合に、etc/systemd/system/sshd-keygen@.service.d/disable-sshd-keygen-if-cloud-init-active.conf
ドロップイン設定ファイルによりssh-keygen
ユニットが無効になります。SSH 接続の特定の鍵タイプを除外するには、
/etc/ssh/sshd_config
で該当行をコメントアウトしてsshd
サービスを再読み込みします。たとえば、Ed25519 ホストキーだけを許可するには、次のコマンドを実行します。# HostKey /etc/ssh/ssh_host_rsa_key # HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key
重要Ed25519 アルゴリズムは FIPS-140 に準拠していないため、OpenSSH は FIPS モードの Ed25519 キーでは機能しません。
デフォルト以外のポート
デフォルトでは、
sshd
デーモンは TCP ポート 22 をリッスンします。ポートを変更すると、自動ネットワークスキャンに基づく攻撃にシステムがさらされる可能性が減るため、あいまいさによりセキュリティーが向上します。ポートは、/etc/ssh/sshd_config
設定ファイルのPort
ディレクティブを使用して指定できます。また、デフォルト以外のポートを使用できるように、デフォルトの SELinux ポリシーも更新する必要があります。そのためには、
policycoreutils-python-utils
パッケージのsemanage
ツールを使用します。# semanage port -a -t ssh_port_t -p tcp <port_number>
さらに、
firewalld
設定を更新します。# firewall-cmd --add-port <port_number>/tcp # firewall-cmd --remove-port=22/tcp # firewall-cmd --runtime-to-permanent
前のコマンドの <port_number> は、
Port
ディレクティブを使用して指定した新しいポート番号に置き換えます。
Root ログイン
PermitRootLogin
はデフォルトでprohibit-password
に設定されています。これにより、root としてログインしてパスワードを使用する代わりに鍵ベースの認証が使用され、ブルートフォース攻撃を防ぐことでリスクが軽減します。警告root ユーザーとしてログインを有効にすることは、どのユーザーがどの特権コマンドを実行するかを監査できないため、安全ではありません。管理コマンドを使用するには、ログインして、代わりに
sudo
を使用します。
X セキュリティー拡張機能の使用
Red Hat Enterprise Linux クライアントの X サーバーは、X セキュリティー拡張を提供しません。そのため、クライアントは X11 転送を使用して信頼できない SSH サーバーに接続するときに別のセキュリティー層を要求できません。ほとんどのアプリケーションは、この拡張機能を有効にしても実行できません。
デフォルトでは、
/etc/ssh/ssh_config.d/50-redhat.conf
ファイルのForwardX11Trusted
オプションがyes
に設定され、ssh -X remote_machine
コマンド (信頼できないホスト) とssh -Y remote_machine
コマンド (信頼できるホスト) には違いがありません。シナリオで X11 転送機能を必要としない場合は、
/etc/ssh/sshd_config
設定ファイルのX11Forwarding
ディレクティブをno
に設定します。
特定のユーザー、グループ、またはドメインへのアクセス制限
/etc/ssh/sshd_config
設定ファイルのAllowUsers
ディレクティブおよびAllowGroups
ディレクティブを使用すると、特定のユーザー、ドメイン、またはグループのみが OpenSSH サーバーに接続することを許可できます。AllowUsers
およびAllowGroups
を組み合わせて、アクセスをより正確に制限できます。以下に例を示します。AllowUsers *@192.168.1.* *@10.0.0.* !*@192.168.1.2 AllowGroups example-group
この設定行は、192.168.1.* サブネットおよび 10.0.0.* のサブネットのシステムの全ユーザーからの接続を許可します (192.168.1.2 アドレスのシステムを除く)。すべてのユーザーは、
example-group
グループに属している必要があります。OpenSSH サーバーは、その他のすべての接続を拒否します。OpenSSH サーバーは、
/etc/ssh/sshd_config
内のすべての Allow および Deny ディレクティブを渡す接続のみを許可します。たとえば、AllowUsers
ディレクティブに、AllowGroups
ディレクティブにリストされているグループの一部ではないユーザーがリストされている場合、そのユーザーはログインできません。許可リストは、許可されていない新しいユーザーまたはグループもブロックするため、許可リスト (Allow で始まるディレクティブ) の使用は、拒否リスト (Deny で始まるオプション) を使用するよりも安全です。
システム全体の暗号化ポリシーの変更
OpenSSH は、RHEL のシステム全体の暗号化ポリシーを使用し、デフォルトのシステム全体の暗号化ポリシーレベルは、現在の脅威モデルに安全な設定を提供します。暗号化の設定をより厳格にするには、現在のポリシーレベルを変更します。
# update-crypto-policies --set FUTURE Setting system policy to FUTURE
警告システムがインターネット上で通信する場合、
FUTURE
ポリシーの厳密な設定により、相互運用性の問題が発生する可能性があります。
システム全体の暗号化ポリシーにより、SSH プロトコルの特定の暗号のみを無効にすることもできます。詳細は、セキュリティーの強化 ドキュメントの サブポリシーを使用したシステム全体の暗号化ポリシーのカスタマイズ セクションを参照してください。
OpenSSH サーバーのシステム全体の暗号化ポリシーをオプトアウトするには、/etc/ssh/sshd_config.d/
ディレクトリーにあるドロップイン設定ファイルに暗号化ポリシーを指定します。このとき、辞書式順序で 50-redhat.conf
ファイルよりも前に来るように、50 未満の 2 桁の数字接頭辞と、.conf
という接尾辞を付けます (例: 49-crypto-policy-override.conf
)。
詳細は、sshd_config(5)
の man ページを参照してください。
OpenSSH クライアントのシステム全体の暗号化ポリシーをオプトアウトするには、次のいずれかのタスクを実行します。
-
指定のユーザーの場合は、
~/.ssh/config
ファイルのユーザー固有の設定でグローバルのssh_config
を上書きします。 -
システム全体の場合は、
/etc/ssh/ssh_config.d/
ディレクトリーにあるドロップイン設定ファイルに暗号化ポリシーを指定します。このとき、辞書式順序で50-redhat.conf
ファイルよりも前に来るように、50 未満の 2 桁の接頭辞と、.conf
という接尾辞を付けます (例:49-crypto-policy-override.conf
)。
関連情報
-
sshd_config(5)
、ssh-keygen(1)
、crypto-policies(7)
、およびupdate-crypto-policies(8)
の man ページ - セキュリティー強化 ドキュメントの システム全体の暗号化ポリシーの使用
- ssh サービスのみに対して特定のアルゴリズムと暗号を無効化する方法 の記事