细述:Fail2ban 阻止暴力破解案例

细述:Fail2ban 阻止暴力破解案例
最新回答
路人

2021-04-24 10:56:34

Fail2ban通过监控日志、匹配恶意行为模式并调用防火墙规则,可有效阻止针对SSH、Nginx等服务的暴力破解攻击。以下为具体案例及操作流程

一、SSH暴力破解防护案例

场景描述:攻击者通过自动化工具对SSH服务(端口22)进行高频密码尝试,试图获取服务器访问权限。

Fail2ban防护机制

  1. 日志监控:Fail2ban持续监控/var/log/secure(CentOS)或/var/log/auth.log(Ubuntu)中的SSH登录失败记录。
  2. 规则匹配:通过filter.d/sshd.conf中的正则表达式匹配连续失败的登录尝试(如Failed password for关键词)。
  3. 触发动作:当同一IP在findtime(默认600秒)内达到maxretry(默认5次)失败次数时,Fail2ban执行以下操作:

    调用iptables规则屏蔽该IP(动作定义在action.d/iptables-multiport.conf)。

    可选发送邮件通知管理员(需配置邮件服务器)。

  4. 屏蔽时长:被屏蔽的IP默认在bantime(默认86400秒,即24小时)内无法访问SSH服务。

配置示例

# /etc/fail2ban/jail.conf 片段[sshd]enabled = trueport = sshfilter = sshdlogpath = /var/log/securemaxretry = 3 # 失败3次即触发findtime = 300 # 统计周期为300秒bantime = 86400 # 屏蔽24小时action = iptables-multiport[name=SSH, port=ssh, protocol=tcp]

效果验证

  • 执行iptables -L -n可查看被屏蔽的IP列表。
  • 攻击者尝试登录时会收到Connection refused或超时提示。
二、Nginx暴力破解防护案例

场景描述:攻击者针对Nginx的Web登录页面(如WordPress、Drupal后台)进行密码爆破,或扫描敏感路径(如/wp-admin)。

Fail2ban防护机制

  1. 日志监控:监控Nginx错误日志/var/log/nginx/error.log,匹配404错误(路径扫描)或401未授权(登录失败)。
  2. 规则扩展:通过filter.d/nginx-http-auth.conf或自定义规则过滤恶意请求。
  3. 触发动作:对频繁触发规则的IP实施屏蔽,并记录至防火墙。

配置步骤

  1. 创建自定义过滤规则

    # /etc/fail2ban/filter.d/nginx-botsearch.conf[Definition]failregex = ^<HOST> -.* "(GET|POST).*/wp-login.php.*HTTP/1." 404 ^<HOST> -.* "(GET|POST).*/admin.php.*HTTP/1." 401ignoreregex =
  2. 在jail.conf中启用Nginx防护

    [nginx-botsearch]enabled = trueport = http,httpsfilter = nginx-botsearchlogpath = /var/log/nginx/error.logmaxretry = 5bantime = 43200 # 屏蔽12小时
  3. 重启Fail2ban生效

    systemctl restart fail2ban

效果验证

  • 使用fail2ban-client status nginx-botsearch查看被屏蔽IP。
  • 攻击者访问被屏蔽IP时会收到HTTP 403错误或连接超时。
三、关键配置参数说明
  • maxretry:触发屏蔽的失败次数阈值(建议SSH设为3-5次,Web服务设为10-20次)。
  • findtime:统计失败次数的周期(秒),例如findtime=600表示10分钟内。
  • bantime:屏蔽时长(秒),支持动态调整(如bantime=1d表示1天)。
  • action:防护动作,可选iptables、firewalld、sendmail等组合。
四、高级功能扩展
  1. 动态白名单:通过ignoreip参数排除可信IP(如办公网段)。ignoreip = 192.168.1.0/24 127.0.0.1
  2. 多服务联动:同时防护SSH、FTP、SMTP等服务,统一管理规则。
  3. 日志轮转兼容:配置logrotate时保留日志文件扩展名(如.1.gz),确保Fail2ban持续解析。
五、注意事项
  • 日志路径差异:不同系统日志路径可能不同(如Ubuntu的SSH日志在/var/log/auth.log)。
  • 防火墙兼容性:CentOS 7+建议使用firewalld动作替代iptables。
  • 性能优化:高并发场景下可调整gamin监控频率或使用inotifywait替代。

通过合理配置Fail2ban,可显著降低服务器被暴力破解的风险,同时减少人工干预成本。建议根据实际流量模式调整参数,并定期审查被屏蔽IP列表以避免误封。