必须组合启用密钥认证、账户锁定与ip封禁三层机制:第一步禁用密码登录并强制密钥认证;第二步用fail2ban实时封禁恶意ip;第三步配置pam_faillock实现账户级失败锁定;第四步验证各组件联动生效。

当你的Linux服务器暴露在公网,auth.log或secure日志里频繁出现“Failed password”记录,说明已有自动化脚本在持续试探SSH密码——仅靠改端口或设MaxAuthTries无法阻止攻击者新建连接重试,必须组合启用密钥认证、账户锁定与IP封禁三层机制。
第一步:彻底禁用密码登录,强制密钥认证
只要PasswordAuthentication yes还开着,所有防护都只是拖延时间。这一步操作起来很简单,但必须在确保密钥已生效的前提下执行,否则会立刻锁死自己。
编辑SSH主配置文件:sudo nano /etc/ssh/sshd_config
找到并修改三行(注意取消注释):
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
【务必新开一个终端,用普通用户+密钥成功登录后再关闭当前会话】——这是唯一验证是否生效的可靠方式。
重载服务:sudo systemctl reload sshd
第二步:启用fail2ban实时封禁恶意IP
Fail2ban不依赖PAM,直接解析日志触发防火墙规则,是目前最可靠的动态防线。它不会因系统重启失效,也不需要你手动查IP拉黑。
方法一:一键安装并启用(Ubuntu/Debian)
sudo apt update && sudo apt install -y fail2ban && sudo systemctl enable --now fail2ban
方法二:创建本地配置覆盖默认文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local
在[DEFAULT]段下添加可信运维网段:
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
在[sshd]段下确认以下四行已设置且未被注释:
enabled = true
maxretry = 3
findtime = 120
bantime = 86400
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
关键提醒:logpath必须匹配真实日志路径——Ubuntu/Debian填/var/log/auth.log,RHEL/CentOS填/var/log/secure,写错fail2ban就完全不工作。
第三步:配置pam_faillock实现账户级失败锁定
这是对fail2ban的补充,防止攻击者集中爆破单个用户名。pam_faillock比老旧的pam_tally2更安全,支持自动解锁和IP绑定能力。
第一步:编辑SSH的PAM策略文件
sudo nano /etc/pam.d/sshd
在文件顶部插入两行(顺序不能颠倒):
auth [default=die] pam_faillock.so preauth silent deny=3 unlock_time=600
auth [default=bad] pam_faillock.so authfail
第二步:同步应用到系统级登录(否则只对SSH生效,本地tty不锁)
sudo nano /etc/pam.d/system-auth,同样插入上述两行
测试被锁后,可用sudo faillock --user username查看状态,用sudo faillock --reset --user username手动解封
第四步:验证全部防护是否真正联动
1. 检查fail2ban服务状态:sudo systemctl status fail2ban→应显示active (running)
2. 确认jail已加载:sudo fail2ban-client status sshd→输出含“Status: started”且“Currently banned: 0”
3. 实时监听封禁动作:sudo tail -f /var/log/fail2ban.log
4. 故意用错误密码连一次SSH,几秒内应看到“Found xxx.xxx.xxx.xxx”和“Ban xxx.xxx.xxx.xxx”日志
5. 同时检查源头日志:sudo tail -n 3 /var/log/auth.log需有最新“Failed password”记录,否则fail2ban无数据可分析










