帮助制作 fail2ban 过滤器

帮助制作 fail2ban 过滤器

我已经为我的 fail2ban 做了一些过滤器,但只是一些简单的事情,例如:

[Definition]
failregex = ^ .* "GET .*/wp-login.php
ignoreregex =

我的服务器上不使用 wordpress,因此我阻止了许多恶意尝试。我还创建了类似的,例如:phpmyadmin、wp-admin、wp-include 等。

但是我在我的 access.log 中发现了一些奇怪的事情,例如:

167.172.145.56 - - [22/Sep/2021:06:44:50 -0700] "GET /wp-login.php HTTP/1.1" 403 9901 "http://cpanel.alebalweb-blog.com/wp-login.php" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"
167.172.145.56 - - [22/Sep/2021:06:44:50 -0700] "GET /wp-login.php HTTP/1.1" 403 9901 "http://mail.alebalweb-blog.com/wp-login.php" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"


61.135.15.175 - - [22/Sep/2021:05:45:24 -0700] "GET / HTTP/1.1" 200 26210 "http://webdisk.alebalweb-blog.com/" "Mozilla/5.0 (Linux; Android 10.0; MI 2 Build/O012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4472.114 Mobile Safari/537.36"    
61.135.15.175 - - [22/Sep/2021:05:45:24 -0700] "GET / HTTP/1.1" 200 26210 "http://webmail.alebalweb-blog.com/" "Mozilla/5.0 (Linux; Android 10.0; MI 2 Build/O012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4472.114 Mobile Safari/537.36"    
61.135.15.175 - - [22/Sep/2021:05:45:24 -0700] "GET / HTTP/1.1" 200 26210 "http://cpcalendars.alebalweb-blog.com/" "Mozilla/5.0 (Linux; Android 10.0; MI 2 Build/O012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4472.114 Mobile Safari/537.36"

这些子域名不存在。

受 apache-badbots 的启发,我尝试创建一个新的过滤器,但我不确定它是否正确:

[Definition]

varioustoblock = cpanel\.|store\.|webdisk\.|autodiscover\.|app\.|cpcalendars\.|cpcontacts\.|webmail\.|mail\.|fulaifushi\.|surf11818\.|asg\.|owa\.|exchange\.\$

failregex = ^<HOST> -.*"(GET|POST).*HTTP.*".*(?:%(varioustoblock)s).*"$
ignoreregex =

datepattern = ^[^\[]

特别是对于 (.),过去我遇到了 fail2ban 过滤器中的 (.) 问题,解决方案是将其完全删除...

但在这种情况下,它们无法被删除,我无法阻止我的网址中包含“邮件”一词的任何人...我需要确保阻止“邮件”。

我想创建一个大型过滤器,可以识别不存在的子域并尝试访问 wordpress 或 phpmyadmin,但是如果您从未使用过 pyton regex,那真的很可怕......

谁能帮我?

(我也考虑过从 dns 配置中删除 *.alebalweb-blog.com,但我不确定这是否是个好主意,因为我也使用了一些子域。)

附言:如果有人试图访问我的网站上不存在的子域名,我应该有多担心?

答案1

可能的过滤器可能如下所示:

[Definition]

datepattern = ^\S+ \S+ \S+( \[{DATE}\])

errcode = (?!401)[45]\d\d
allowedsubdomains = www|mail|cpannel
wrongdomains = (?!(?:%(allowedsubdomains)s)?\.)(?:[^\."]+\.){2,}[^\."]+
failregex = ^<ADDR> \S+ \S+ "[A-Z]+ /[^"]*" (?:(?P<err>%(errcode)s)|\d+)(?(err)| \d+ "https?://%(wrongdomains)s")

errcode由于条件匹配,例如代码的情况,这将匹配指定的任何“坏”代码或错误域200

在哪里:

  • (?:(?P<err>%(errcode)s)|\d+)- 匹配指定的错误代码(例如 403 并将其存储为命名组err)或任何其他代码(例如 200);
  • (?(err)...A...|...B...)- 如果条件表达式与子表达式 A 匹配,则与err上述表达式匹配(仅为错误代码,因为这里 A 为空),否则匹配子表达式 B(错误的子域)。
  • (?!(?:%(allowedsubdomains)s)?\.)(?:[^\."]+\.){2,}[^\."]+- 由于负向前瞻(?!...)(?:[^\."]+\.){2,}[^\."]+某些类似 zzz.xxx.yyy 的情况,匹配除以允许的子域开头的字符串之外的任何内容。

但最好在网络服务器端限制域名并禁止任何对非法域名的请求。

在这种情况下,过滤器可能是这样的:

[Definition]

datepattern = ^\S+ \S+ \S+( \[{DATE}\])

errcode = (?!401)[45]\d\d
failregex = ^<ADDR> \S+ \S+ "[A-Z]+ /[^"]*" %(errcode)s\b

相关内容