検索

1.6. OpenSSH のセキュリティーの強化

download PDF

OpenSSH を使用すると、システムを調整してセキュリティーを強化できます。

OpenSSH サーバー設定ファイル /etc/ssh/sshd_config の変更を有効にするには、sshd デーモンを再ロードする必要があることに注意してください。

# systemctl reload sshd
警告

ほとんどのセキュリティー強化の設定変更により、最新のアルゴリズムまたは暗号スイートに対応していないクライアントとの互換性が低下します。

安全ではない接続プロトコルの無効化
SSH を本当の意味で有効なものにするため、OpenSSH スイートに置き換えられる安全ではない接続プロトコルを使用しないようにします。このような接続プロトコルを使用すると、ユーザーのパスワード自体は SSH を使用した 1 回のセッションで保護されても、その後に Telnet を使用してログインした時に傍受されてしまうためです。
パスワードベースの認証の無効化
認証用のパスワードを無効にし、鍵ペアのみを許可すると、攻撃対象領域が縮小されます。詳細は、OpenSSH サーバーで鍵ベースの認証を唯一の方法として設定する セクションを参照してください。
より強力な鍵タイプ

ssh-keygen コマンドはデフォルトで RSA キーのペアを生成しますが、-t オプションを使用すると、Elliptic Curve Digital Signature Algorithm (ECDSA) 鍵または Edwards-Curve 25519 (Ed25519) 鍵を生成するように指定できます。ECDSA は、同等の対称鍵強度において RSA よりも優れたパフォーマンスを実現します。また、より短い鍵を生成します。Ed25519 公開鍵アルゴリズムは、RSA、DSA、ECDSA よりもセキュアで高速な Twisted Edwards 曲線の実装です。

サーバーホストの鍵の RSA、ECDSA、および Ed25519 がない場合は、OpenSSH が自動的に作成します。RHEL でホストの鍵の作成を設定するには、インスタンス化したサービス sshd-keygen@.service を使用します。たとえば、RSA 鍵タイプの自動作成を無効にするには、次のコマンドを実行します。

# systemctl mask sshd-keygen@rsa.service
# rm -f /etc/ssh/ssh_host_rsa_key*
# systemctl restart sshd
注記

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 に準拠しておらず、FIPS モードでは OpenSSH は 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 に設定します。

特定のユーザー、グループ、または IP 範囲への SSH アクセスの制限

/etc/ssh/sshd_config 設定ファイルの AllowUsers ディレクティブおよび AllowGroups ディレクティブを使用すると、特定のユーザー、ドメイン、またはグループのみが OpenSSH サーバーに接続することを許可できます。AllowUsers および AllowGroups を組み合わせて、アクセスをより正確に制限できます。以下に例を示します。

AllowUsers *@192.168.1.* *@10.0.0.* !*@192.168.1.2
AllowGroups example-group

この設定では、次の条件がすべて満たされる場合にのみ接続が許可されます。

  • 接続の送信元 IP が、192.168.1.0/24 または 10.0.0.0/24 サブネット内にある。
  • 送信元 IP が 192.168.1.2 ではない。
  • ユーザーが example-group グループのメンバーである。

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)。

関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.