CentOS Stream9でのOpenSSHの設定方法等についてまとめました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
- 1.OpenSSHの概要
- 2.OpenSSH サーバーの起動、停止、ステータス確認
- 3.パスワード認証、Rootユーザーのログイン
- 4.特定のユーザー、ソースアドレス等へのアクセス制限
- 5.デフォルト以外のポートに変更
- 6.古いバージョンのSSHクライアントから接続する際の注意点
OpenSSHの概要
●SSHのバージョン
・RHEL の OpenSSH スイートは、SSH バージョン 2 のみをサポート。
・このスイートは、バージョン 1 で知られているエクスプロイトに対して脆弱ではない拡張キー交換アルゴリズムを備えている。
●システム全体の暗号化ポリシー
・OpenSSH は、システム全体の暗号化ポリシーを使用する。
→これにより、弱い暗号スイートおよび暗号化アルゴリズムがデフォルト設定で無効になる。
・ポリシーを変更するには、管理者が update-crypto-policies コマンドを使用して設定を調節するか、システム全体の暗号化ポリシーを手動でオプトアウトする必要がある。
●主なツール
・SSH:リモートログインプログラム (SSH クライアント) 。
・sshd:OpenSSH SSH デーモン。
・scp:安全なリモートファイルコピープログラム。(RHEL 9 では、CVE-2020-15778 など、SCP が原因のセキュリティーの問題が発生しているためSFTPに置き換えられている)。
・sftp:安全なファイル転送プログラム。
・ssh-agent:秘密鍵をキャッシュする認証エージェント。
:ssh-add:秘密鍵の ID を ssh-agent に追加。
・ssh-keygen:ssh の認証キーを生成、管理、および変換。
・ssh-copy-id:ローカルの公開鍵をリモート SSH サーバーの authorized_keys ファイルに追加するスクリプト。
・ssh-keyscan;SSH パブリックホストキーを収集。
・RHEL の OpenSSH スイートは、SSH バージョン 2 のみをサポート。
・このスイートは、バージョン 1 で知られているエクスプロイトに対して脆弱ではない拡張キー交換アルゴリズムを備えている。
●システム全体の暗号化ポリシー
・OpenSSH は、システム全体の暗号化ポリシーを使用する。
→これにより、弱い暗号スイートおよび暗号化アルゴリズムがデフォルト設定で無効になる。
・ポリシーを変更するには、管理者が update-crypto-policies コマンドを使用して設定を調節するか、システム全体の暗号化ポリシーを手動でオプトアウトする必要がある。
●主なツール
・SSH:リモートログインプログラム (SSH クライアント) 。
・sshd:OpenSSH SSH デーモン。
・scp:安全なリモートファイルコピープログラム。(RHEL 9 では、CVE-2020-15778 など、SCP が原因のセキュリティーの問題が発生しているためSFTPに置き換えられている)。
・sftp:安全なファイル転送プログラム。
・ssh-agent:秘密鍵をキャッシュする認証エージェント。
:ssh-add:秘密鍵の ID を ssh-agent に追加。
・ssh-keygen:ssh の認証キーを生成、管理、および変換。
・ssh-copy-id:ローカルの公開鍵をリモート SSH サーバーの authorized_keys ファイルに追加するスクリプト。
・ssh-keyscan;SSH パブリックホストキーを収集。
OpenSSH サーバーの起動、停止、ステータス確認
〇開始
# systemctl start sshd
〇ブート時に自動的に起動するように設定
# systemctl enable sshd
〇ステータス確認
# systemctl status sshd
〇sshdの設定変更後、systemd設定を再読み込みし、sshdを再起動して変更を適用
# systemctl daemon-reload
# systemctl restart sshd
# systemctl start sshd
〇ブート時に自動的に起動するように設定
# systemctl enable sshd
〇ステータス確認
# systemctl status sshd
〇sshdの設定変更後、systemd設定を再読み込みし、sshdを再起動して変更を適用
# systemctl daemon-reload
# systemctl restart sshd
パスワード認証、Rootユーザーのログイン
(1)パスワード認証の有効/無効
〇設定ファイル
/etc/ssh/sshd_config
【デフォルト値】yes
#PasswordAuthentication yes
PasswordAuthentication no
(2)Rootユーザーによるログイン
〇設定ファイル
/etc/ssh/sshd_config
〇設定ディレクティブ
PermitRootLogin
〇設定値
・prohibit-password:デフォルト値。パスワード認証が不可で、鍵ベース認証が必要。
ブルートフォース攻撃を防ぐことでリスクが軽減
・no:Rootユーザーによるログインは不可。
・without-password:デフォルト値
〇設定ファイル
/etc/ssh/sshd_config
【デフォルト値】yes
#PasswordAuthentication yes
PasswordAuthentication no
(2)Rootユーザーによるログイン
〇設定ファイル
/etc/ssh/sshd_config
〇設定ディレクティブ
PermitRootLogin
〇設定値
・prohibit-password:デフォルト値。パスワード認証が不可で、鍵ベース認証が必要。
ブルートフォース攻撃を防ぐことでリスクが軽減
・no:Rootユーザーによるログインは不可。
・without-password:デフォルト値
特定のユーザー、ソースアドレス等へのアクセス制限
〇設定ファイル
/etc/ssh/sshd_config
〇設定ディレクティブ
AllowUsers、AllowGroups
〇設定方法
・特定のユーザー、ドメイン、またはグループのみが OpenSSH サーバーに接続することを許可できる。
・/etc/ssh/sshd_config 内のすべての Allow および Deny ディレクティブを処理した上で接続の可否が判断される。
〇設定例
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 グループに属している必要がある。
/etc/ssh/sshd_config
〇設定ディレクティブ
AllowUsers、AllowGroups
〇設定方法
・特定のユーザー、ドメイン、またはグループのみが OpenSSH サーバーに接続することを許可できる。
・/etc/ssh/sshd_config 内のすべての Allow および Deny ディレクティブを処理した上で接続の可否が判断される。
〇設定例
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 グループに属している必要がある。
デフォルト以外のポートに変更
(1)設定手順
1)SELinux ポリシーの設定(SELinuxを有効にしている場合)
# semanage port -a -t ssh_port_t -p tcp <port_number>
2)firewalldの設定
①ポート番号を追加
# firewall-cmd –zone=<ゾーン名> –add-port <ポート番号>/tcp
②既存のポート番号を削除
〇既存がポート番号で定義されている場合
# firewall-cmd –zone=<ゾーン名> –remove-port=22/tcp
〇既存がサービスで定義されている場合
# firewall-cmd –zone=<ゾーン名> –remove-service=ssh
③新しい設定を永続化
# firewall-cmd –runtime-to-permanent
3)OpenSSHの設定
・/etc/ssh/sshd_config 設定ファイルの Port ディレクティブを使用して指定。
(2)設定例
①SELinux ポリシーの確認
1)SELinux ポリシーの設定(SELinuxを有効にしている場合)
# semanage port -a -t ssh_port_t -p tcp <port_number>
2)firewalldの設定
①ポート番号を追加
# firewall-cmd –zone=<ゾーン名> –add-port <ポート番号>/tcp
②既存のポート番号を削除
〇既存がポート番号で定義されている場合
# firewall-cmd –zone=<ゾーン名> –remove-port=22/tcp
〇既存がサービスで定義されている場合
# firewall-cmd –zone=<ゾーン名> –remove-service=ssh
③新しい設定を永続化
# firewall-cmd –runtime-to-permanent
3)OpenSSHの設定
・/etc/ssh/sshd_config 設定ファイルの Port ディレクティブを使用して指定。
(2)設定例
①SELinux ポリシーの確認
# sestatus SELinux status: disabled
②firewalldの設定内容を確認
# firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client http https ssh ports: protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
③publicゾーンに設定変更するポート番号を追加、既存のポートを削除
# firewall-cmd --zone=public --add-port 1234/tcp # firewall-cmd --zone=public --remove-service=ssh # firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client http https ports: 1234/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # firewall-cmd --runtime-to-permanent
④OpenSSHの設定を変更
・/etc/ssh/sshd_config 設定ファイルの Port ディレクティブを使用して指定。
⑤OpenSSHを再起動
〇ステータス確認
# systemctl status sshd
〇sshdの設定変更後、systemd設定を再読み込みし、sshdを再起動して変更を適用
# systemctl daemon-reload
# systemctl restart sshd
古いバージョンのSSHクライアントから接続する際の注意点
●SSHクライアントからの接続方法
$ ssh ユーザーアカウント名@接続先のIPアドレス
●”no hostkey alg”とコメントされ接続できない
・今回クライアントとして使用したCentOS6のような古いOSからCentOS Stream9にSSH接続するとこの現象が発生。
・CentOS Stream8以降で暗号化ポリシーが変更され、CentOS Stream9のデフォルト設定ではCentOS6からのSSH接続が拒否される。
●CentOS Stream9の暗号化ポリシーを一時的に変更
・暗号化ポリシーが初期状態では”DEFAULT”になっていて、この定義では拒否されてしまうが、”LEGACY”に変更すれば接続できるようになる。
●暗号化ポリシーを変更
・”DEFAULT”から”LEGACY”に変更
update-crypto-policies –show
update-crypto-policies –set LEGACY
・”LEGACY”から”DEFAULT”に戻す
update-crypto-policies –set DEFAULT
update-crypto-policies –show
$ ssh ユーザーアカウント名@接続先のIPアドレス
●”no hostkey alg”とコメントされ接続できない
・今回クライアントとして使用したCentOS6のような古いOSからCentOS Stream9にSSH接続するとこの現象が発生。
・CentOS Stream8以降で暗号化ポリシーが変更され、CentOS Stream9のデフォルト設定ではCentOS6からのSSH接続が拒否される。
●CentOS Stream9の暗号化ポリシーを一時的に変更
・暗号化ポリシーが初期状態では”DEFAULT”になっていて、この定義では拒否されてしまうが、”LEGACY”に変更すれば接続できるようになる。
●暗号化ポリシーを変更
・”DEFAULT”から”LEGACY”に変更
update-crypto-policies –show
update-crypto-policies –set LEGACY
・”LEGACY”から”DEFAULT”に戻す
update-crypto-policies –set DEFAULT
update-crypto-policies –show
- CentOS Stream9の新機能、変更点のメモ
- CentOS Stream9のネットワーク管理(NetworkManager、nmcli)
- CentOS Stream9の環境設定(ロケール、時刻設定等)
- CentOS Stream9のセキュリティ設定(暗号化ポリシー、SELinux)
- CentOS Stream9のファイアウォール設定(firewalld)
- CentOS Stream9のSSH設定(OpenSSH)
- CentOS Stream9のシステム管理(systemd)
- CentOS Stream9のシステム監視・ログ管理(syslog)
- CentOS Stream9でApache、PHPを設定する際の注意点
- CentOS Stream9のリポジトリ・モジュール管理
- CentOS Stream9のパッケージ管理(dnfコマンド)
-
OpenSSH
- レンタルサーバー(VPS)にSSHでログイン
- VPS(レンタル)サーバー上のssh初期設定確認
- SSH接続の仕組み
- OpenSSHの設定ファイル
- OpenSSHの設定をよりセキュアに
- CentOS Stream9のSSH設定(OpenSSH)
- WinSCPを使ってファイル転送
ネットワーク、ポート番号
rpmパッケージ、サービス
パーミッション
ログイン、認証、パスワード、アカウント制御
auditdでシステム監査
ツール
トラブルシューティング