使用 fail2ban 保护 vsftp 登录:
监狱.本地
[vsftpd]
enabled = true
bantime = 600
findtime = 5000
maxretry = 1
port = ftp,ftp-data
action = iptables-multiport
logpath = /var/log/vsftpd/vsftpd.log
正则表达式匹配,如您在此处所见:
fail2ban-regex /var/log/vsftpd/vsftpd.log /etc/fail2ban/filter.d/vsftpd.conf --print-all-matched
Running tests
=============
Use failregex filter file : vsftpd, basedir: /etc/fail2ban
Use datepattern : {^LN-BEG} : Default Detectors
Use log file : /var/log/vsftpd/vsftpd.log
Use encoding : UTF-8
Results
=======
Failregex: 23 total
|- #) [# of hits] regular expression
| 2) [23] ^ \[pid \d+\] \[[^\]]+\] FAIL LOGIN: Client "<HOST>"(?:\s*$|,)
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [385] {^LN-BEG}(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
`-
Lines: 385 lines, 0 ignored, 23 matched, 362 missed
[processed in 0.03 sec]
|- Matched line(s):
| Wed Mar 9 08:36:06 2022 [pid 2619415] [bla] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:36:13 2022 [pid 2619420] [bla] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:36:18 2022 [pid 2619422] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:36:30 2022 [pid 2619425] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:36:37 2022 [pid 2619508] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:36:45 2022 [pid 2619511] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:36:53 2022 [pid 2619514] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:47:39 2022 [pid 2620744] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:47:47 2022 [pid 2620746] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:47:55 2022 [pid 2620748] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:48:03 2022 [pid 2620763] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:48:12 2022 [pid 2620767] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:48:12 2022 [pid 2620766] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:55:07 2022 [pid 2621558] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:55:15 2022 [pid 2621560] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:55:23 2022 [pid 2621562] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:55:23 2022 [pid 2621564] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 08:55:26 2022 [pid 2621566] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 09:36:56 2022 [pid 2627379] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 09:37:48 2022 [pid 2627498] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 09:37:57 2022 [pid 2627500] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 09:37:57 2022 [pid 2627501] [blaas] FAIL LOGIN: Client "some_IP"
| Wed Mar 9 09:37:58 2022 [pid 2627504] [blaas] FAIL LOGIN: Client "some_IP"
`-
Missed line(s): too many to print. Use --print-all-missed to print all 362 lines
使用 fail2ban cli / fail2ban-client status vsftpd 检查
Status for the jail: vsftpd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches:
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
知道什么原因可能导致不禁止“匹配”的 IP /如何进一步调试?
答案1
知道什么原因可能导致不禁止“匹配”的 IP /如何进一步调试?
错误backend
(如果这是systemd
您系统的默认设置)?请尝试backend = auto
为此 jail 指定(它会自动选择与文件相关的监控后端)。
对于其他可能的原因,请参阅https://github.com/fail2ban/fail2ban/wiki/How-fail2ban-works
答案2
你为什么认为它没有被禁止?事实上它没有被禁止现在并不意味着监狱不起作用。
我在你的监狱日志中看到了一个特定的模式布拉斯:连续六次尝试,然后有些延迟(大约 10 分钟),然后再尝试六次,然后延迟一段时间,然后再尝试六次......
这可以有两种解释:
尝试六次后将禁止该账号 10 分钟。然后解除该账号的禁令。
你面临着聪明的bot,它了解 fail2ban 的典型行为,并能够确定 jail 设置(在哪个时间段尝试多少次会触发禁令)。这样的 bot 存在了很长时间。所以,它可能只是调整了自身,以免触发禁令操作。
为了解决这些问题,您需要启用惯犯jail 会扫描 fail2ban 自己的日志文件,查找被禁止和解禁次数过多的地址(例如,每天五个),并禁止它们很长一段时间,比如整整一个月。在第二种情况下,您还必须大大收紧 jail 限制,以便在机器人有机会确定您的 jail 设置之前用 recidive 捕获它。
总是读日志档案(也许/var/log/fail2ban.log
),不是正则表达式匹配助手。该助手专门用于调试导致命中的匹配。当正则表达式匹配器已经调试并正常工作时,它不会帮助调试禁止行为。
我重新阅读了你的问题,注意到了 jail 的定义:禁令时间实际上设置为 10 分钟。如果我可以在不查看设置的情况下确定这一点,为什么机器人不能呢?