透過 PAM (Pluggable Authentication Modules) 的 pam_tally2.so 模組,可限制使用者連續登入失敗次數,超過閾值自動鎖定帳號,有效防禦暴力破解攻擊。本文詳細說明 /etc/pam.d/login (本地登入) 與 /etc/pam.d/sshd (SSH 遠端登入) 的完整配置。
| 參數 | 說明 |
|---|---|
deny=N | 連續失敗 N 次鎖定帳號(含 root) |
lock_time=S | 一般使用者鎖定 S 秒後自動解鎖 |
unlock_time=S | 同 lock_time,較新版本參數名 |
root_unlock_time=S | root 使用者鎖定 S 秒後自動解鎖 |
even_deny_root | 同樣限制 root 使用者(預設不限制 root) |
per_user | 依 /etc/security/faillock.conf 個別設定 |
#%PAM-1.0
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=10
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so close
session optional pam_keyinit.so force revoke
session required pam_loginuid.so
session include system-auth
session optional pam_console.so
session required pam_selinux.so open
關鍵點:pam_tally2.so 行必須放在第二行(#%PAM-1.0 之後),若放在 pam_securetty.so 之後,使用者輸入正確密碼仍可登入,鎖定機制失效。
#%PAM-1.0
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=10
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session optional pam_keyinit.so force revoke
session include system-auth
session required pam_loginuid.so
同樣放在第二行,確保 SSH 暴力破解同樣受保護。
| 指令 | 用途 |
|---|---|
pam_tally2 --user username | 查看指定使用者失敗次數與最後失敗時間 |
pam_tally2 | 查看所有使用者失敗記錄 |
pam_tally2 -r -u username | 手動解鎖指定使用者(歸零計數器) |
pam_tally2 -r | 解鎖所有使用者 |
[root@node100 pam.d]# pam_tally2 --user redhat
Login Failures Latest failure From
redhat 7 07/16/12 15:18:22 tty1
[root@node100 pam.d]# pam_tally2 -r -u redhat
Login Failures Latest failure From
redhat 0 07/16/12 15:18:22 tty1
pam_tally2.so,改用 pam_tally.so(參數略有不同)。man pam_tally2。fail2ban 從網路層面封鎖惡意 IP。