×

防暴力破解,不止靠 2FA——fail2ban 自动封禁恶意 IP

hqy hqy 发表于2025-10-30 02:26:00 浏览7 评论0

抢沙发发表评论

摘要:密码被暴力破解是日常;启用 2FA 能挡住大头,但配合 fail2ban 自动封禁来源 IP,能为你的 Linux 服务器再添一道高效、轻量的防线。本文从原理、安装、典型 jail 配置到运维建议,一步到位,适合运维/安全从业者和中小公司快速上手。

一、为什么需要 fail2ban?

日志不会说谎——公网的 SSH/服务每天都会遭到大量脚本式的爆破尝试。即便启用了 2FA,日志里的“失败尝试”依旧会占用带宽、日志容量,甚至触发监控噪声。

fail2ban 的作用:实时扫描日志,识别重复失败的登录尝试后,自动向防火墙(如 iptables、firewalld、nftables)下发规则临时封禁恶意 IP,从而:

    • 降低暴力破解成功率(把攻击者“踢出”很重要);
    • 减少日志/告警噪声;
    • 减轻服务器负载与带宽浪费。

    二、工作原理(简明)

      • fail2ban 监控指定日志文件(/var/log/auth.log、/var/log/secure 等);
      • 根据 filter(正则规则)匹配失败记录;
      • 达到设定阈值(maxretry)与时间窗口(findtime)后触发 action,如添加 iptables 规则封禁 IP(ban);
      • 在 bantime 到期后自动解除封禁(或永久封禁,视配置而定)。

      三、快速安装(常见发行版)

      以 CentOS 7 与 Ubuntu 为例:

      CentOS 7(使用 EPEL):

      sudo yum install epel-release -y
      sudo yum install fail2ban -y
      sudo systemctl enable --now fail2ban
      图片
      图片
      图片

      Ubuntu / Debian:

      sudo apt update
      sudo apt install fail2ban -y
      sudo systemctl enable --now fail2ban

      检查服务状态:

      sudo systemctl status fail2ban

      图片

      四、推荐基本配置(安全又实用)

      不要直接改 fail2ban.conf,应在 /etc/fail2ban/jail.d/ 下放自定义文件或编辑 jail.local

      创建 /etc/fail2ban/jail.d/common.local 示例:

      [DEFAULT]
      ignoreip = 127.0.0.1/8 ::1 203.0.113.5   ; 白名单(替换为你信任的 IP)
      bantime  = 1h       ; 封禁 1 小时(可改为 86400 秒或 -1 永久)
      findtime = 10m      ; 在 10 分钟内统计失败次数
      maxretry = 5        ; 失败 5 次触发封禁
      backend  = auto

      [sshd]
      enabled = true
      port    = ssh
      logpath = /var/log/secure      ; CentOS
      # Ubuntu 可用 /var/log/auth.log
      图片

      说明:

        • ignoreip 请加入可信管理 IP,避免误封你自己;
        • bantimefindtimemaxretry 可根据业务与暴力破解频率调优;
        • backend 默认为 auto,足以满足大多数场景。

        五、典型场景与进阶配置

        1) 针对 SSH(保护关键登录)

        上面 sshd 示例已足够。若使用非标准端口,把 port 改为实际端口。

        2) 针对 Nginx(防爬虫 / 非法请求)

        启用 nginx-http-auth 或自定义 filter 来封禁大量 401/403 请求来源。

        示例(/etc/fail2ban/jail.d/nginx.local):

        [nginx-http-auth]
        enabled = true
        filter  = nginx-http-auth
        port    = http,https
        logpath = /var/log/nginx/error.log
        maxretry = 3

        3) 与 fail2ban 配合 2FA(防线纵深)

        2FA 防止凭证被直接滥用;fail2ban 则把暴力来源临时隔离。两者一起能把“被试探的洪流”压下到最小。

        4) 报警与自动化(email / webhook)

        可以把 action 配置为发送邮件或触发 webhook(如通知 Slack/钉钉),便于运维快速响应。示例 action:action_mw(邮箱+webhook)或自定义脚本。


        六、常见问题与运维建议

        • 误封管理主机:一定要配置 ignoreip,以及把内部跳板机 IP 加到白名单。

        • 误判复现排查:用 sudo fail2ban-client set <JAIL> unbanip <IP> 解封并查看日志定位原因。

        • 查看当前封禁列表

          sudo fail2ban-client status sshd
        • 手动解除封禁

          sudo fail2ban-client set sshd unbanip 1.2.3.4
        • 日志文件旋转:确保日志轮转后 fail2ban 仍能读取(通常 fail2ban 已支持 signal 热重载)。

        • 封禁太激进会影响客户访问:对外服务的策略要慎重,生产环境常用更长的 findtime 与 maxretry,或只封禁恶意特征明显的 IP。

        • 与云服务防护结合:若在云上部署(AWS、阿里云、腾讯云),建议与云厂商的网络ACL、WAF 联动,做更靠近边缘的拦截。

        七、针对 Windows 的说明

        fail2ban 是 Linux 生态工具。对于公网暴露的 Windows RDP,可选择:

          • 使用完整的2FA(如 Duo),阻断凭证持有者之外的登录;
          • 使用 RDP 防爆破工具(如 RDPGuard)或通过 Windows 防火墙/NSG 进行基于 IP 的封禁;
          • 将 RDP 放入 VPN/跳板再暴露到公网。

          八、结语 — 安全是多层防御

          单靠密码已不能保证安全。把 2FA 作为核心防御手段,同时用 fail2ban 自动化清理噪声、封禁恶意 IP,是成本低、见效快的组合 —— 既能减少成功入侵的概率,也能把运维告警变得更“干净”。


          打赏

          本文链接:https://kinber.cn/post/5788.html 转载需授权!

          分享到:


          推荐本站淘宝优惠价购买喜欢的宝贝:

          image.png

           您阅读本篇文章共花了: 

          群贤毕至

          访客