CentOS Stream9のSSH設定(OpenSSH)

CentOS Stream9でのOpenSSHの設定方法等についてまとめました。

※目次をクリックすると目次の下部にコンテンツが表示されます。

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 パブリックホストキーを収集。

OpenSSH サーバーの起動、停止、ステータス確認
〇開始
# 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
 
〇設定ディレクティブ
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 ポリシーの確認

# 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

関連記事の目次
 
ネットワーク、ポート番号
  • iptablesを使ってCentOSのファイアウォール設定
  • nmapでオープンしているポート番号とバージョンを確認
  •  
    rpmパッケージ、サービス
  • CentOSで不要なサービスは起動しないようにする
  • RPMパッケージのインテグリティチェック
  •  
    パーミッション
  • CentOSのumaskの設定
  • cronで使用するファイルのパーミッション設定
  • ユーザーホームディレクトリ内の権限設定をセキュアにする
  • CentOSのパスワードファイルのパーミッション設定
  • findコマンドでファイル書込権限をいっせいにチェック
  • findコマンドでセットユーザ(グループ)IDが不要にセットされていないかチェック
  • findコマンドで所有者、グループが存在しないファイルを抽出
  •  
    ログイン、認証、パスワード、アカウント制御
  • ログイン時などに表示されるシステムバナーを変更するには?
  • CentOSのユーザーアカウントのパスワードポリシーを設定
  • pam_cracklibモジュールでパスワードポリシーを設定
  • pam_unix.soモジュールを使って過去のパスワード再使用を制限する
  • システムコンソールでのrootログインを制限する方法
  • suコマンドによるrootへのスイッチを制限する
  • root権限でのコマンド実行、sudoだと監査ログが取得できる
  • デーモン用アカウントなどに対しシェルを使用を無効にする
  • パスワード認証を失敗時にアカウントをロックアウトする設定
  • rootアカウントのPATH環境変数のセキュリティについて
  •  
    auditdでシステム監査
  • auditdを使ってシステム監査
  • auditdのログ容量の設定
  • auditd監査ルールの設定方法
  • auditdで時間設定変更操作を監査する
  • auditdでユーザー・グループ設定ファイル変更操作を監査する
  • auditdでネットワーク関連の設定変更を監査する
  • auditdでログイン記録のログファイルの変更を監査する
  • auditdでファイル所有者や権限の変更に関するイベントを監査する
  • auditdでsetuid、setgidプログラムの実行を監査する
  • auditdでマウント操作を監査する
  • auditdでファイル削除操作を監査する
  • auditdでsudo設定ファイルに対する操作を監査する
  • auditdでカーネルモジュールのロード、アンロードを監査する
  • マシン再起動後にauditdの設定変更を有効にする設定
  • ausearch、aureportで監査ログのサマリレポートを作成
  •  
    ツール
  • NTPのセキュリティを考慮した設定
  • セキュリティを考慮してX Windowsを設定または削除する方法
  • ファイルの改ざん対策用にTripwireを導入
  • CentOSにホスト型侵入検知ソフトAIDE(Advanced Intrusion Detection Environment)を導入
  •  
    トラブルシューティング
  • アイドルのシェルを自動で強制終了させるには?
  • CentOSでコアダンプを無効にする方法
  • Linuxのbash脆弱性CVE-2014-6271、Shellshockを修整
  • CentOSでバッファーオーバーフロー脆弱性に対する防御機能が有効になっているか確認する

  • コメントを残す

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

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください