我最近在 Ubuntu 16 上安装了 fail2ban,它正常工作,因为禁止/分配到 jail 可以正常工作,但是一旦 jail 分配到期,被禁止的 IP 仍作为 REJECT 保留在 iptables 中。我希望它在 bantime 到期后从 iptables 中删除。
下面的例子是一个非常基本的 DOS 监狱,禁止任何在 30 秒内加载 100 个页面的人,禁止他们 1 小时(3600 秒)。
注意:jail.conf 中的默认禁令时间为 600 秒
监狱.本地
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/apache*/access.log
/home/*/logs/access.log
maxretry = 100
findtime = 30
bantime = 3600
ignoreip = 127.0.0.1/8 ::1
action = iptables[name=HTTP, port=http, protocol=tcp]
filter.d/http-get-dos
# Fail2Ban configuration file
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*
ignoreregex =
我自己通过从其他三台服务器发送 1000 个连接进行了测试,并且它工作正常 - 所有三台服务器都被添加到监狱中,并且 iptables 规则:
iptables -L -n
Chain f2b-HTTP (2 references)
target prot opt source destination
REJECT all -- xx.xx.xx.xx 0.0.0.0/0 reject-with
REJECT all -- xx.xx.xx.xx 0.0.0.0/0 reject-with
REJECT all -- xx.xx.xx.xx 0.0.0.0/0 reject-with
icmp-port-unreachable
然而,已经过去了大约 2 个小时,iptables 中仍然存在三个 REJECT,并且服务器无法连接。
http-get-dos jail 上的实时状态(fail2ban-client status http-get-dos)正确返回了一些 IP是被禁止,但目前没有。
Status for the jail: http-get-dos
|- Filter
| |- Currently failed: 1
| |- Total failed: 613
| `- File list: /var/log/apache2/access.log /home/*/logs/access.log
`- Actions
|- Currently banned: 0
|- Total banned: 3
`- Banned IP list:
在安装 fail2ban 时,我运行:
apt-get install iptables-persistent
在重启时继续禁止,但是这不会(??)忽略禁止时间。
我知道我可以手动从 iptables 中删除一个 IP,但我希望 fail2ban 能够在 bantime 过期后自动执行此操作。
我错过了什么?