首页/安全/安全加固速查/失败锁定与 fail2ban 的职责划分
口令与认证策略55 条

失败锁定与 fail2ban 的职责划分

faillock 保护“账号”,fail2ban 保护“来源 IP”:两者互补不冲突,常见组合是 faillock 兜账号、fail2ban 兜网络层。

安全加固速查安全更新于 2026-10-13

两者管的对象不同

pam_faillock 是 PAM 认证栈里的一个模块,按「账号」记账:某账号在 fail_interval 时间窗内失败次数达到 deny,该账号即被锁定,unlock_time 内即使口令正确也登录不上。fail2ban 是独立守护进程,按「来源 IP」记账:解析 /var/log/secure 或 /var/log/auth.log,某 IP 在时间窗内失败超过阈值,就调用 iptables、nftables 或 firewalld 封禁该 IP。一个在认证层按账号判定,一个在网络层按来源判定,这是最本质的分工。

为什么两层都要有

口令喷洒式爆破对每个账号只试一两次,永远碰不到单账号的锁定阈值,但来源固定时会很快触发 fail2ban;反过来换大量 IP 分散尝试时,IP 封禁被稀释,faillock 仍能护住被重点攻击的少数账号。faillock 还有一个 fail2ban 给不了的覆盖:本地 tty 登录、su 与 sudo 提权同走 PAM,防火墙完全管不到这些路径。

基本信息

适用平台Linux(PAM 体系)
faillock 载体pam_faillock 模块,配置在 /etc/security/faillock.conf
fail2ban 载体fail2ban 服务 + 防火墙后端
权限要求root
失败日志Debian/Ubuntu 在 /var/log/auth.log,RHEL 系在 /var/log/secure
常用配置路径/etc/pam.d/、/etc/fail2ban/jail.local

典型使用场景

  • 对外暴露 22 端口的服务器:既防单账号撞库,也压住来源 IP 的扫描噪音
  • 基线核查:口令失败锁定与来源封禁通常是两条独立检查项,只做一条算未达标
  • 仅密钥登录的主机:faillock 价值下降,fail2ban 仍能减少日志噪音
  • 本地终端与 su/sudo 场景:只有认证层锁定时能覆盖
  • 多机统一策略:把 faillock.conf 与 jail.local 纳入配置管理批量下发

现状核查

现状核查
faillock | head                       # 列出各账号的失败次数与锁定状态
faillock --user ops --reset           # 解除某账号锁定(误伤时用)
systemctl is-active fail2ban          # fail2ban 是否在运行
fail2ban-client status sshd           # 看该 jail 当前封禁了哪些 IP
iptables -S | grep -i f2b             # fail2ban 自建链是否已生效
grep -Ev '^#|^$' /etc/security/faillock.conf   # 看锁定阈值配置

faillock 阈值配置

faillock 阈值配置
deny=5              # 连续失败 5 次开始锁定
unlock_time=900     # 锁 900 秒后自动解锁
fail_interval=900   # 只统计 900 秒窗口内的失败
even_deny_root      # 连 root 一起锁,默认 root 不受限
root_unlock_time=300  # root 锁定时间另设,便于应急登录

两层防护对照

维度pam_faillockfail2ban
作用对象账号来源 IP
执行位置PAM 认证栈内日志解析 + 防火墙
防批量撞库弱:分散到多账号即可绕过强:同一 IP 累计即封
防分布式来源强:与来源数量无关弱:每个 IP 都凑不够次数
本地登录覆盖有(tty、su、sudo)无
解除方式faillock --user 用户 --resetfail2ban-client set sshd unbanip IP
误伤表现用户报口令正确也登不上整个出口 IP 或网段被挡
纯密钥登录的机器可只保留 fail2ban:faillock 主要防口令爆破,对公钥认证失败基本没有意义。
两套锁定的阈值与时长必须统一设计:faillock 锁 15 分钟、fail2ban 封 1 小时会让处置口径混乱。用户报「登录不上」时要一次看全两层,否则容易漏判。云环境中 NAT 出口共用公网 IP 时,务必把办公网、监控与堡垒机来源写进 ignoreip。

易错点

  • 只配 fail2ban 不配 faillock:喷洒式爆破对每个账号只试一两次,来源 IP 阈值永远够不着,账号会被逐个撞开
  • 忘记配置 ignoreip 白名单:NAT 环境误封办公出口或监控探针,被挡人员无法自助恢复
  • 阈值与时长两套各配一套:处置口径不一致,审计时说不清锁定依据
  • 在 RHEL 系手改 /etc/pam.d/system-auth 添加 pam_faillock:该文件由 authselect 生成,重新选择 profile 后改动被覆盖,锁定策略静默失效
  • 以为 root 也受 faillock 保护:默认 root 不受锁定限制,需显式开启 even_deny_root 才能拦住对 root 的反复尝试

数据来源与参考

  • man 8 pam_faillock
  • fail2ban 官方文档
  • NIST SP 800-63B:认证安全

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌