Fail2ban是Linux公网服务器防御SSH暴力破解最轻量可靠的首道防线,通过自动解析auth.log或secure日志、触发iptables/nftables封禁恶意IP实现无人值守防护;Ubuntu/Debian执行sudo apt update && sudo apt install -y fail2ban安装启用,CentOS/RHEL 8+用sudo dnf install -y fail2ban,配置需创建jail.local、启用sshd、设maxretry=3、findtime=600、bantime=1h、ignoreip白名单,并指定正确logpath与backend=auto,最后通过fail2ban-client status sshd和tail -f /var/log/fail2ban.log验证生效。

Linux服务器暴露在公网后,每分钟都可能遭遇SSH暴力破解攻击,Fail2ban能自动读取认证日志、识别异常登录行为,并调用iptables或nftables实时封禁恶意IP,整个过程无需人工干预,是当前最轻量且可靠的首道防线。
安装Fail2ban并启用服务
Ubuntu/Debian系统执行一条命令完成安装、依赖解析与开机自启:
sudo apt update && sudo apt install -y fail2ban
CentOS/RHEL 8+系统直接使用dnf(EPEL已内置):
sudo dnf install -y fail2ban
安装完成后服务默认启用,但必须验证是否真正运行:
sudo systemctl status fail2ban → 若显示inactive或failed,则立即执行sudo systemctl enable --now fail2ban
创建并编辑本地配置文件
切勿直接修改/etc/fail2ban/jail.conf,该文件会在软件升级时被覆盖:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
用nano或vim打开新配置文件:
sudo nano /etc/fail2ban/jail.local
这是唯一允许写入修改的配置入口,所有后续调整都基于此文件。
配置SSH防护核心参数
在jail.local中定位到[sshd]区块,确保以下设置全部存在且值合理:
第一步:启用防护开关
enabled = true
第二步:指定日志路径(【必须匹配你系统的实际路径】)
Ubuntu/Debian填logpath = /var/log/auth.log
CentOS/RHEL填logpath = /var/log/secure
第三步:设定触发阈值
maxretry = 3 → 3次失败即封,比默认5更早拦截自动化脚本
findtime = 600 → 10分钟窗口,太短易误封,太长留出爆破时间
bantime = 1h → 封禁1小时,足够打断攻击节奏;慎用-1(永久封禁)
第四步:添加白名单避免把自己锁门外
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5 → 把你常用运维IP或内网段填进去
适配防火墙后端防止静默失效
方法一:新系统(Ubuntu 22.04+/Debian 12+/RHEL 9+)默认用nftables
在[DEFAULT]区块添加:
backend = auto
方法二:若系统已停用iptables但fail2ban仍尝试调用,会静默失败
先查当前后端:
sudo fail2ban-client get sshd banaction
若返回iptables但sudo iptables -L报错,则改用:
backend = systemd
这一步不做,fail2ban可能“以为封了”,其实防火墙规则根本没写入。
验证封禁是否真实生效
重启服务使配置落地:
sudo systemctl restart fail2ban
检查当前封禁状态:
sudo fail2ban-client status sshd → 输出中必须含“Currently banned: X”且X ≥ 0
实时盯住日志流,确认链路通透:
sudo tail -f /var/log/fail2ban.log
此时用错误密码SSH连接一次,几秒内应刷出Found和Ban记录
最后反向验证日志源是否就绪:
sudo tail -n 3 /var/log/auth.log(或secure)→ 必须看到最新Failed password行,否则fail2ban无米下锅。











