RHEL6.2を実行しています。ほとんどのユーザーはSSHを使用してパスワードを使用してログインします。いくつかは鍵を持っているかもしれません。すべてのアカウントはローカルです。
N回のパスワードログインに失敗した後、ユーザーをロックアウトする必要があります。
man pam_tally2
およびpam_faillock
の例では、sshoutを使用してユーザーをロックしていません。 pam_tally2
の例では、Telnet(テストを有効にしました)ログインをロックでき、その後sshユーザーをロックアウトします。 sshはそれをトリガーできません。
/etc/ssh/sshd_config
には:
PasswordAuthentication yes # setting to no doesn't allow login with a password!
UsePAM yes
UseLogin no # setting to yes doesn't allow PuTTY logins
マニュアルページの例は、変更されていないシステムで機能するはずです。
PasswordAuthentication
を有効にすると、SSHデーモンはPAMを使用せずに、パスワード自体を処理します。 PAMを使用するように強制するには、実際にはこれを無効にする必要があります。
PasswordAuthentication no
UsePAM yes
ChallengeResponseAuthentication yes
ただし、キーを使用しているユーザーを捕まえることはできません(個人的には問題ないと思いますが)。その場合は、おそらく fail2ban のようなものを使用する必要があります。これは、ログで認証の失敗を検索し、iptablesルールを追加して今後の試行をブロックします。
/etc/pam.d/sshd
に次の行を追加する必要があります。
auth required pam_tally2.so deny=6 onerr=fail unlock_time=1800
account required pam_tally2.so
以下に示すように、3行目と6行目にそれらを追加します。
#%PAM-1.0
auth required pam_sepermit.so
auth required pam_tally2.so deny=6 onerr=fail unlock_time=1800
auth include password-auth
account required pam_nologin.so
account required pam_tally2.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
また、UsePAM yes
が/etc/ssh/sshd_config
に設定されていることを確認してください
これにより、認証が6回失敗した後、sshユーザーが30分間ロックアウトされます。
公式のRHEL 6セキュリティガイド に従うと、/etc/pam.d/sshd
を変更せずにこれを実現できます。
/etc/pam.d/system-auth
と/etc/pam.d/password-auth
の両方を編集し、置き換えます
auth sufficient pam_unix.so nullok try_first_pass
と
auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 unlock_time=600
そして、両方のファイルで、「アカウント」セクションの先頭に次の行を追加します。
account required pam_faillock.so
これにより、コンソールユーザー、スクリーンセーバーユーザーなどにアカウントロックアウト機能が提供されます。
/etc/pam.d/sshd
を調べると、password-auth
を使用していることがわかります。したがって、sshユーザーは同じロックアウト機能を利用できます。
'/etc/pam.d/sshd'を編集する必要がありました
と
認証が必要ですpam_tally2.soDeny = 5 Unlock_time = 1200 Even_deny_root Root_unlock_time = 10
そしてそれは今動作します。
Pam_tallyと比較した場合のpam_faillockのunlock_timeの動作の不一致。 (unlock_timeは、最後に失敗した試行に従ってドリフトされません)system-authおよびpassword-authでdeny = 3およびunlock_time = 300を使用してpam_faillockを構成します。次に、root以外のユーザーでログインし、無効なパスワードを3回入力してから、アカウントは期待どおりにロックされます。たとえば、現在の時刻は1300時間です。アカウントはロックアウトされ、13:05時まで正しいパスワードでログインすることはできません。ユーザーが13:02に再度ログインしようとすると、アカウントがロックアウトされているため、システムは拒否します。同じシナリオで、pam_tallyの場合、ユーザーが13:02にログインしようとすると、ユーザーは13:05ではなく13:07以降にのみロック解除されます。試行に失敗した後、unlock_timeはドリフトされ、ここで調整されます。