CIS Level 1 - Server (2)
はじめに
前回のCIS Level1 - Server (1)では、ディスクマウントオプションについて触れましたが、今回はSSHログインについて確認します。
前回OSインストール時には以下を設定していました。
■ OSインストール時設定
・ソフトウェア選択:最小限インストール
・インストール先:自動パーティション設定
・rootパスワード:8文字(数字+アルファベット)
・ネットワークとホスト名:IPv4固定IP、IPv6自動
・パスワードによるroot SSHログインを許可上記に加え、セキュリティプロファイルで「CIS Level1 - Server」を適用し、パーティション情報を「CIS Level1 - Server」に適合するように変更してOSをインストールしている状態になります。
「パスワードによるroot SSHログインを許可」設定は、セキュリティプロファイル未適用状態のデフォルトでは無効(許可しない)ですが、検証環境でサーバを構築する時は許可にしていました。許可することはセキュリティが緩くなるということですが、この設定がそのまま維持されるかについても確認していきます。
rootログインの拒否
セキュリティプロファイル「CIS Level1 - Server」が適用されているサーバにTeratermでSSHログインしようとすると、Teratermが以下のメッセージを表示するようになります。「操作を監視しています。」という内容のメッセージです。
Authentication Banner
Authorized users only. All activity may be monitored and reported.
また、OSインストール時に「パスワードによるroot SSHログインを許可」を設定しましたが、rootではログインできない状態になっていました。sshdの設定ファイルディレクトリを見てみると、ファイル名に「complianceascode」が含まれるファイルが作成されています。
# ls -l /etc/ssh/sshd_config.d/
合計 16
-rw-------. 1 root root 173 8月 19 15:47 00-complianceascode-hardening.conf
-rw-------. 1 root root 93 8月 19 15:47 01-complianceascode-reinforce-os-defaults.conf
-rw-------. 1 root root 121 8月 19 15:47 01-permitrootlogin.conf
-rw-------. 1 root root 719 8月 19 15:47 50-redhat.confファイルの内容を確認すると、SSH接続時の制限設定が記載されています。(#以降のコメント部分は筆者による追記です。)
# cat /etc/ssh/sshd_config.d/00-complianceascode-hardening.conf
MaxStartups 10:30:60 # → 認証前SSH接続同時受付数
MaxSessions 10 # → 1SSH接続でのセッション数上限
MaxAuthTries 4 # → 1SSH接続での認証試行回数上限
LogLevel VERBOSE # → SSHログレベル 詳細
LoginGraceTime 60 # → 認証完了までの制限時間
Banner /etc/issue.net # → SSH接続時に表示するメッセージ指定
PermitRootLogin no # → rootによるSSH直接ログイン不可
ClientAliveInterval 300 # → SSH接続状態確認間隔
ClientAliveCountMax 1 # → クライアント応答なし許容回数
# cat /etc/ssh/sshd_config.d/01-complianceascode-reinforce-os-defaults.conf
PermitUserEnvironment no # → SSHログイン時の任意の環境変数設定禁止
IgnoreRhosts yes # → rhost認証関連ファイル無効化
PermitEmptyPasswords no # → パスワードなしログイン禁止
HostbasedAuthentication no # → ホストベース認証禁止「Banner /etc/issue.net」が設定されているので、SSH接続時にこのファイルに記載のメッセージが表示されます。ファイルに書かれている文字列は冒頭のTeratermで表示されたメッセージと同じですので、このメッセージが表示されたことがわかります。
# cat /etc/issue.net
Authorized users only. All activity may be monitored and reported.また、OSインストール時に「パスワードによるroot SSHログインを許可」設定を行っているのにも関わらずrootログインできなかったのは「PermitRootLogin no」が指定されている為であることがわかります。
「パスワードによるroot SSHログインを許可」を指定すると通常「01-permitrootlogin.conf」ファイルが作成され、このファイルに「PermitRootLogin yes」の記載がされますが、CIS Level1を指定すると中身が消されています。OSインストール時に設定していた「パスワードによるroot SSHログインを許可」の設定は消された上、「00-complianceascode-hardening.conf」ファイルで無効の設定「PermitRootLogin no」が追加されていました。
# cat /etc/ssh/sshd_config.d/01-permitrootlogin.conf
# This file has been generated by the Anaconda Installer.
# Allow root to log in using ssh. Remove this file to opt-out認証失敗回数による制限
sshd_config
その他にも、「MaxAuthTries 4」で1SSH接続での認証試行回数が4回までに設定されています。4回連続でSSH認証に失敗するとSSH接続が切断されます。Teratermの場合、4回失敗後はパスワード入力ダイアログが出てこなくなり、Teratermを閉じると以下のメッセージが表示されます。

認証失敗の記録は以下のコマンドで確認できます。
# faillock
root:
When Type Source Valid
user01:
When Type Source Valid
2026-08-01 14:35:51 RHOST 192.168.1.10 V
2026-08-01 14:35:58 RHOST 192.168.1.10 V
2026-08-01 14:36:04 RHOST 192.168.1.10 V
2026-08-01 14:36:10 RHOST 192.168.1.10 VPAM_faillock
sshの認証制限設定とは別に、PAMのfaillockも有効になっています。こちらは5回連続失敗すると正しいパスワードを入力してもログインできなくなります。
# cat /etc/security/faillock.conf | tail
# root_unlock_time = 900
#
# If a group name is specified with this option, members
# of the group will be handled by this module the same as
# the root account (the options `even_deny_root>` and
# `root_unlock_time` will apply to them.
# By default, the option is not set.
# admin_group = <admin_group_name>
deny = 5
unlock_time = 900faillockの解除は以下のコマンドで可能です。
# faillock --user user01 --reset認証失敗時のログ
認証失敗やfaillockのログは/var/log/secureに出力されています。TeratermからSSH接続を行い、パスワード4回間違い、Teraterm再起動、パスワード1回間違い(計5回間違い)、正しいパスワード入力と行った際のログです。(#で始まる行は筆者による追記です。実際のログには出力されません。)
### Teraterm起動&SSH接続開始
Aug 24 17:11:06 rhel98 sshd-session[11472]: main: SHA1 in signatures is disabled for RSA keys
Aug 24 17:11:06 rhel98 sshd-session[11472]: Connection from 192.168.1.10 port 58692 on 10.14.223.1 port 22 rdomain ""
### パスワード誤入力1回目
Aug 24 17:11:11 rhel98 unix_chkpwd[11474]: password check failed for user (user01)
Aug 24 17:11:11 rhel98 sshd-session[11472]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.10 user=user01
Aug 24 17:11:13 rhel98 sshd-session[11472]: Failed password for user01 from 192.168.1.10 port 58692 ssh2
### パスワード誤入力2回目
Aug 24 17:11:17 rhel98 unix_chkpwd[11475]: password check failed for user (user01)
Aug 24 17:11:19 rhel98 sshd-session[11472]: Failed password for user01 from 192.168.1.10 port 58692 ssh2
### パスワード誤入力3回目
Aug 24 17:11:21 rhel98 unix_chkpwd[11476]: password check failed for user (user01)
Aug 24 17:11:23 rhel98 sshd-session[11472]: Failed password for user01 from 192.168.1.10 port 58692 ssh2
### パスワード誤入力4回目
Aug 24 17:11:25 rhel98 unix_chkpwd[11477]: password check failed for user (user01)
Aug 24 17:11:27 rhel98 sshd-session[11472]: Failed password for user01 from 192.168.1.10 port 58692 ssh2
Aug 24 17:11:28 rhel98 sshd-session[11472]: error: maximum authentication attempts exceeded for user01 from 192.168.1.10 port 58692 ssh2 [preauth]
Aug 24 17:11:28 rhel98 sshd-session[11472]: Disconnecting authenticating user user01 192.168.1.10 port 58692: Too many authentication failures [preauth]
Aug 24 17:11:28 rhel98 sshd-session[11472]: PAM 3 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.10 user=user01
Aug 24 17:11:28 rhel98 sshd-session[11472]: PAM service(sshd) ignoring max retries; 4 > 3
Aug 24 17:11:28 rhel98 sshd[1099]: srclimit_penalise: ipv4: new 192.168.1.10/32 deferred penalty of 5 seconds for penalty: failed authentication
### Teraterm終了&Teraterm起動&SSH接続開始
Aug 24 17:11:43 rhel98 sshd-session[11478]: main: SHA1 in signatures is disabled for RSA keys
Aug 24 17:11:43 rhel98 sshd-session[11478]: Connection from 192.168.1.10 port 58696 on 10.14.223.1 port 22 rdomain ""
### パスワード誤入力5回目
Aug 24 17:11:48 rhel98 unix_chkpwd[11480]: password check failed for user (user01)
Aug 24 17:11:48 rhel98 sshd-session[11478]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.1.10 user=user01
Aug 24 17:11:48 rhel98 sshd-session[11478]: pam_faillock(sshd:auth): Consecutive login failures for user user01 account temporarily locked
### パスワード入力6回目(正しいパスワード)
Aug 24 17:11:50 rhel98 sshd-session[11478]: Failed password for user01 from 192.168.1.10 port 58696 ssh2
Aug 24 17:12:03 rhel98 sshd-session[11478]: Failed password for user01 from 192.168.1.10 port 58696 ssh2
### SSH接続開始してから60秒後
Aug 24 17:12:44 rhel98 sshd[1099]: srclimit_penalise: ipv4: new 192.168.1.10/32 active penalty of 90 seconds for penalty: exceeded LoginGraceTime4回連続認証失敗した時点で「Too many authentication failures」のログが出力され、合計5回連続で認証失敗した段階でpam_faillockによってロックしたログが出力されています。
ログ中のsrclimit_penaliseはOpenSSHの機能で、CISの基準とは別に認証失敗に対してdeferredのペナルティを与えています。最後のsrclimit_penaliseでは、LoginGraceTime 60の設定により60秒以内に認証が完了しなかったため、接続元IPに対してペナルティが与えられています。上記ログ上では90秒のペナルティが与えられていますが、この秒数は様々な認証失敗の累積により決まる値なので、毎回90秒になるというわけではありません。この辺りはCISではなくOpenSSHの機能なので、OpenSSH公式ドキュメントを参照してください。
まとめ
CIS Level 1のセキュリティプロファイルの適用で、rootユーザーによるSSHログインの禁止や、認証に一定回数失敗したユーザーのロックなど、SSHログインに対するセキュリティ設定が強化されます。今回は、rootユーザーでのSSHログインが拒否されることや、認証失敗を繰り返すことでユーザーがロックされることを確認しました。また、認証失敗やロックの状況はログから確認できるため、不正なログイン試行の調査にも活用できます。
CIS Level 1を導入する際には、設定を適用するだけでなく、各オプションの役割やアプリケーションへの影響についても確認しておくことが重要です。
お問い合わせ
弊社では様々なサービスを取り扱っております。
詳細はサービス一覧からご覧ください。
お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]
お問い合わせ
