Fail2ban是一款运行在Linux系统上的入侵防御工具,它通过监控服务日志文件,识别频繁失败的认证请求,并利用防火墙规则临时封禁可疑IP地址,从而防止暴力破解尝试。该工具常用于保护SSH、FTP、Web登录等暴露在网络中的服务。

Fail2ban的工作原理
Fail2ban由三部分核心组成:过滤器(filter)、动作(action)和监狱(jail)。过滤器负责从日志中匹配失败记录,监狱将过滤器与动作绑定并定义触发条件,动作则调用系统命令如iptables来封禁IP。
主要组件说明
- filter:定义日志中的失败特征正则表达式
- jail:设置监控服务、日志路径、最大重试次数与封禁时间
- action:指定封禁与解封时执行的命令
安装Fail2ban
在基于Debian或Ubuntu的系统上,可以使用包管理器直接安装:
# 更新软件包索引并安装fail2ban sudo apt update sudo apt install fail2ban -y # 设置开机自启并启动服务 sudo systemctl enable fail2ban sudo systemctl start fail2ban
配置SSH暴力破解防护
Fail2ban的默认配置位于/etc/fail2ban/jail.conf,但建议新建/etc/fail2ban/jail.local进行覆盖配置,避免升级时被覆盖。
# /etc/fail2ban/jail.local [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 600
以上配置表示在600秒内SSH失败超过3次,便封禁该IP一小时。修改后重启服务生效:
sudo systemctl restart fail2ban
查看与管理封禁状态
可以使用fail2ban-client命令查看监狱运行情况及被封禁IP:
# 查看所有启用的监狱 sudo fail2ban-client status # 查看sshd监狱详情与封禁列表 sudo fail2ban-client status sshd # 手动解封某个IP sudo fail2ban-client set sshd unbanip 192.168.0.1
自定义过滤器示例
如果服务日志格式特殊,可自定义过滤器。下面为匹配Nginx登录失败的简单示例:
# /etc/fail2ban/filter.d/nginx-login.conf [Definition] failregex = ^<HOST> -.*POST /wp-login.php.* 200 ignoreregex =
注意事项
配置bantime和maxretry时需平衡安全性与误封风险,同时确保自己的管理IP不会被误禁。若使用云服务器,也可结合安全组做多层防护。
通过上述步骤,你可以利用Fail2ban有效阻止绝大多数自动化暴力破解尝试,为服务器增加一道实用的安全屏障。