Linux中多维度身份验证失败后自动封禁的核心是结合pam_faillock与fail2ban:前者在60秒内5次失败后锁定用户15分钟,后者解析日志触发iptables封禁IP;sudo等服务可通过日志适配纳入统一防护。

Linux系统中实现多维度身份验证失败后的自动封禁,核心是结合PAM模块(如pam_faillock)与防火墙规则(如iptables或nftables),辅以日志分析和策略联动。关键不在“多维度”本身,而在于将不同验证环节(SSH登录、sudo提权、本地控制台等)的失败行为统一捕获并触发一致的封禁动作。
配置pam_faillock实现登录失败计数与锁定
pam_faillock是RHEL/CentOS 7+、Fedora及多数现代发行版默认支持的PAM模块,可对用户级失败尝试做本地锁定。需修改/etc/pam.d/sshd(SSH)、/etc/pam.d/system-auth(全局认证)等文件:
- 在
auth [default=bad success=ok user_unknown=ignore]行前添加:auth [default=die] pam_faillock.so preauth silent deny=5 unlock_time=900 fail_interval=60 - 在
auth [default=die]行后添加:auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=60 - 在
account段添加:account required pam_faillock.so
上述配置表示:60秒内连续5次失败即锁定用户900秒(15分钟),适用于SSH、su、login等所有调用该PAM栈的服务。
通过faillock命令管理锁定状态
faillock命令用于查看、清除或手动操作失败记录:
- 查看某用户失败记录:
faillock --user username - 清空指定用户失败计数:
faillock --user username --reset - 清空所有用户记录:
faillock --reset(需root权限)
注意:pam_faillock默认将记录存于/var/run/faillock/(内存文件系统),重启后丢失;如需持久化,可配置dir=/var/log/faillock并确保目录存在且权限为0755、属主root:root。
联动iptables实现IP级自动封禁
仅锁定用户不够——攻击者常换IP暴力探测。需将pam_faillock日志事件转为IP封禁。推荐使用fail2ban作为中间桥梁:
- 安装fail2ban:
yum install fail2ban或apt install fail2ban - 创建
/etc/fail2ban/jail.local,启用SSH防护:
enabled = true
filter = sshd
logpath = /var/log/secure # RHEL/CentOS
# logpath = /var/log/auth.log # Debian/Ubuntu
maxretry = 5
bantime = 900
findtime = 60
banaction = iptables-allports
fail2ban会持续扫描认证日志,匹配到5次失败后,自动调用iptables封禁源IP所有端口,900秒后自动解封。也可替换banaction为iptables-ipset-proto6-allports支持IPv6,或对接nftables。
扩展至sudo和自定义服务的失败监控
若需将sudo失败也纳入封禁范围,需两步:
- 确保
/etc/sudoers中启用日志:Defaults logfile="/var/log/sudo.log"(或确认已写入/var/log/auth.log) - 为fail2ban新增jail,例如在
jail.local中添加:
enabled = true
filter = sudo
logpath = /var/log/sudo.log
maxretry = 3
bantime = 600
对于其他自定义应用(如Web登录后台),只需将其失败日志格式适配fail2ban的filter规则,即可复用同一套封禁机制,真正实现“多维度”统一响应。










