Veja como eu fiz isso ...
Adicionei isso à jail.local:
[manban]
enabled = true
filter = manban
action = iptables[name=HTTP, port="80,443,110,995,25,465,143,585,993,587,21,22", protocol=tcp]
logpath = /var/log/manban.log
maxretry = 1
# 1 month
bantime = 2592000
findtime = 3600
Então eu adicionei o arquivo /etc/fail2ban/filter.d/manban.conf:
[Definition]
failregex = ^\[\w{1,3}.\w{1,3}.\d{1,2}.\d{1,2}:\d{1,2}:\d{1,2} \d{1,4}. \[error] \[client.<HOST>].File does not exist:.{1,40}roundcube.{1,200}
ignoreregex =
Eu copiei o filtro do filtro de outro filtro mas apontei para um arquivo que não existe, então eu criei um arquivo fictício:
touch /var/log/manban.log
execute o comando:
fail2ban-client reload
Agora, para banir manualmente um endereço IP por um mês, digite:
fail2ban-client set manban banip <IP>
Isso funcionou.
Agora há clientes que "aprendem" o seu bantime fail2ban e ajustam automaticamente as sondas do sistema para não serem banidos. Mas quando você olha para os logs, é óbvio que estes são sondas do sistema. Você pode atrapalhar seus sistemas criando tempos de banimento longos e extraordinários. Você também pode escrever um script que possa despejar IPs correspondentes a um determinado critério ao seu registro de banimento especial e banir o fail2ban por um longo período de tempo.