Fail2ban 禁止 IP,但前提是它已经有数百个请求

Fail2ban 禁止 IP,但前提是它已经有数百个请求

我有一个 jail,可以检测特定的用户代理。它最终会禁止该代理,但仍能处理数百个请求。

以下是相关信息(除非需要其他信息):

/etc/fail2ban/jail.conf 中的禁止操作

banaction = iptables-allports

这是 /etc/fail2ban/jail.local 中的条目

[domaincrawler-bot]
enabled = true
filter = domaincrawler-bot
logpath = /var/log/nginx/*access.log
port = 8221,8222,8231,8232
maxretry = 1
findtime = 10
bantime = -1
action = iptables-allports[name=domaincrawler-bot]

我有一个 shell 脚本,可以按 IP 地址将最频繁的访问分组到一起,并且在禁止之前它仍然可以接收数百个请求:

Count    IP Address    User Agent String

543 80.248.225.168 | "DomainCrawler/3.0 ([email protected]; http://www.domaincrawler.com/***************************.com)" "-"
455 80.248.225.79 | "DomainCrawler/3.0 ([email protected]; http://www.domaincrawler.com/********.com)" "-"
282 80.248.225.4 | "DomainCrawler/3.0 ([email protected]; http://www.domaincrawler.com/********************.com)" "-"

我可以验证它最终确实被发送到 iptables:

root@****:/var/log/nginx# iptables -L -vn | grep 80.248.225.4
0     0 REJECT     all  --  *      *       80.248.225.4         0.0.0.0/0            reject-with icmp-port-unreachable

这是我在 /etc/fail2ban/filter.d/domaincrawler-bot.conf 中的正则表达式条目

[Definition]
failregex = ^\d{4} <HOST> .*DomainCrawler.*

执行正则表达式测试会产生数千条匹配的行:

root@****:/var/log/nginx# fail2ban-regex --print-all-matched access.log "^\d{4} <HOST> .*DomainCrawler.*"



 Running tests
=============

Use   failregex line : ^\d{4} <HOST> .*DomainCrawler.*
Use         log file : access.log
Use         encoding : UTF-8


Results
=======

Failregex: 2222 total
|-  #) [# of hits] regular expression
|   1) [2222] ^\d{4} <HOST> .*DomainCrawler.*
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [80276] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 80276 lines, 0 ignored, 2222 matched, 78054 missed [processed in 7.69 sec] 

我还在 regex101.com 上验证了它确实找到了以下字符:

regex101_图像

这是检查监狱状态时的输出:

    root@****:/var/log/nginx# fail2ban-client status domaincrawler-bot
Status for the jail: domaincrawler-bot
|- Filter
|  |- Currently failed: 1
|  |- Total failed: 31178
|  `- File list:    /var/log/nginx/access.log
`- Actions
   |- Currently banned: 12
   |- Total banned: 12
   `- Banned IP list:   176.74.192.36 176.74.192.40 176.74.192.42 185.6.8.3 185.6.8.7 185.6.8.9 194.68.17.5 80.248.225.142 80.248.225.168 80.248.225.4 80.248.225.7 80.248.225.79

此特定服务器获得很多流量,所以在解析访问日志时可能稍微滞后了?我还能做些什么来提高性能?正如我所说,它最终会禁止 IP,但在此之前会收到数百(有时数千)个针对不同监狱的请求。

谢谢你们。

答案1

间隔为N 秒日志扫描间隔。大约 1-5 秒。Fail2ban 会在以下时间后阻止maxretry 或者 N 秒,以较晚者为准。

相关内容