AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1092707
Accepted
Patrick32123
Patrick32123
Asked: 2022-02-05 12:02:15 +0800 CST2022-02-05 12:02:15 +0800 CST 2022-02-05 12:02:15 +0800 CST

在 fail2ban 中回测历史日志

  • 772

设置 我在 ubuntu 服务器上运行 apache。我创建了一个 fail2ban 规则,当他们请求太多页面太快时禁止 ip。

# Fail2ban Rule
failregex = ^.*?(:80|:443) <HOST> - .* "(GET|POST|HEAD).*$
ignoreregex =.*(.ico|.jpg|.png|.gif|.js|.css|.woff|.mp4)

findtime = 30
maxretry = 10

目标:
我想针对这个新的 fail2ban 规则运行一个旧的 apache 日志,以便我可以查看它是否会禁止任何合法请求。

尝试#1 我认为我可以使用fail2ban-regex 来获取可能被禁止的用户列表,但它没有该功能。

尝试#2 我认为将历史日志回显到fail2ban 当前正在观看的日志中会使它们被解析。在修复了一个小挂断后,忽略了具有旧日期的日志行(通过向它们添加一年来修复)fail2ban 开始解析它们并禁止其中的 IP。但是,我只需要查看第一个被禁止的 IP 就知道它是错误的。有问题的 IP 总共只发出了 10 个请求,而且它们在时间上并不接近。我只能假设 fail2ban 没有使用日志行的时间戳来确定有效性,这使得这种测试方法失败了。

# echo example
zcat other_vhosts_access.log.8.gz | sed -n 's/\/2022:/\/2032:/p' >> /var/log/apache2/fail2ban_test.log

结论 由于我之前的两次尝试都失败了,我想不出一种理智的方法来解决这个问题。有人可以推荐一种方法来实现我所追求的吗?或者深入了解为什么我的第二个解决方案不起作用。

ubuntu security fail2ban
  • 1 1 个回答
  • 114 Views

1 个回答

  • Voted
  1. Best Answer
    sebres
    2022-02-15T08:15:14+08:002022-02-15T08:15:14+08:00

    尝试#1

    直接看到它确实没有,但是......

    虽然最新版本的 fail2ban-regex 支持输出参数,但你可以这样做:

    fail2ban-client set "$jail" banip $(
       fail2ban-regex -o 'ip' /var/log/path/some.log some-filter | sort --unique | tr '\n' ' '
    )
    

    仅当您发现任何 IP 都失败时才适用,无论计数/时间。在你的情况下,至少没有一些额外的预处理是没有意义的。

    尝试#2 我认为将历史日志回显到fail2ban 当前正在观看的日志中会使它们被解析。

    它不会起作用,因为fail2ban 不会真正正确地考虑消息的时间:要么它太旧(如果未修改记录),要么它不正确(如果现在记录为故障时间,因为你需要考虑maxretry和findtime实际使用)。请注意,fail2ban 会now - findtime从一开始就寻求(因为其他消息对它不感兴趣,因为它已经过时了),请参阅https://github.com/fail2ban/fail2ban/issues/2909#issuecomment-758036512。

    无论如何,目前几乎不可能使用开箱即用的库存 fail2bans 工具(至少除非上面 RFE 的这个“重新扫描”工具得到实施和发布)。

    但是由于fail2ban(以及fail2ban-regex)是python中的一个模块,因此可以使用python中的过滤器将禁令写入某些日志或将它们直接发送到主fail2ban实例,请参阅https://github.com/fail2ban/fail2ban/此类脚本示例的问题/2909#issuecomment-1039267423。

    另请注意,您的过滤器非常脆弱且缓慢,最好尽可能精确地重写它,就像这里一样:

    failregex = ^"<ADDR>" \S+ \S+ [^"]*"[A-Z]+ /(?:\S+/)*[^\.]*(?:\.(?!ico|jpg|png|gif|js|css|woff|mp4)\w+)? [^"]+"
    

    最后但并非最不重要的一点是,您为什么需要它?如果具有此类过滤器的监狱处于活动状态并且此类爬虫返回,则在为监狱配置的期间一旦maxretry出现故障,它们将被禁止。findtime预防性禁止并不是真正需要的,只会用大量 IP 打扰您的网络过滤子系统(它们可能永远不会再回来)。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve