Eu recentemente configurei o Fail2Ban (v0.9.4 no Debian Jessie). Eu só uso para SSH.
Por padrão, minha prisão principal proíbe 5 tentativas fracassadas em 10 minutos por um dia. Essa configuração funcionou bem para mim, no entanto, alguns bots só continuam depois de terem sido desbanidos.
Então eu configurei mais 2 cadeias com um maior tempo de busca e mais maxtries que baniram o IP por um longo tempo. O segundo nível também me envia um email (usando action = %(action_mwl)s
) e o terceiro e último nível reporta o IP usando action = %(action_xarf)s
. As configurações estão funcionando e o fail2ban já encontrou vários canidatos para o último nível.
Mas às vezes (cerca de 50% do tempo) ele falha com uma mensagem de erro como essa (a camada 3 é chamada de sshd-bot):
2016-03-31 10:59:44,849 fail2ban.actions [30358]: NOTICE [sshd-bot] Ban 95.59.143.167
2016-03-31 10:59:44,979 fail2ban.action [30358]: ERROR oifs=${IFS}; IFS=.;SEP_IP=( 95.59.143.167 ); set -- ${SEP_IP}; ADDRESSES=$(dig +short -t txt -q $4.$3.$2.$1.abuse-contacts.abusix.org); IFS=${oifs}
2016-03-31 10:59:44,980 fail2ban.action [30358]: ERROR oifs=${IFS}; IFS=.;SEP_IP=( 95.59.143.167 ); set -- ${SEP_IP}; ADDRESSES=$(dig +short -t txt -q $4.$3.$2.$1.abuse-contacts.abusix.org); IFS=${oifs}
2016-03-31 10:59:44,980 fail2ban.action [30358]: ERROR oifs=${IFS}; IFS=.;SEP_IP=( 95.59.143.167 ); set -- ${SEP_IP}; ADDRESSES=$(dig +short -t txt -q $4.$3.$2.$1.abuse-contacts.abusix.org); IFS=${oifs}
2016-03-31 10:59:44,981 fail2ban.actions [30358]: ERROR Failed to execute ban jail 'sshd-bot' action 'xarf-login-attack' info 'CallingMap({'ipfailures': <function Actions.__checkBan.<locals>.<lambda> at 0x6a07f4acc268>, 'ipmatches': <function Actions.__checkBan.<locals>.<lambda> at 0x6a07f4acc158>, 'failures': 1588, 'ipjailmatches': <function Actions.__checkBan.<locals>.<lambda> at 0x6a07f4acc1e0>, 'time': 1459414784.8492236, 'matches': ' Long string containing all matches ', 'ipjailfailures': <function Actions.__checkBan.<locals>.<lambda> at 0x6a07f4acc2f0>, 'ip': '95.59.143.167'})': local variable 'popen' referenced before assignment
Também houve outras mensagens de erro, mas esta é a mais comum.
Editar:
Aqui estão as configurações para todas as 3 cadeias:
[sshd]
enabled = true
bantime = 86400 ; 1 day
findtime = 600 ; 10 minutes
maxretry = 5
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
action = %(action_)s
[sshd-repeat]
enabled = true
bantime = 2628000 ; 1 month
findtime = 604800 ; 1 week
maxretry = 20
filter = sshd
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
action = %(action_mwl)s
[sshd-bot]
enabled = true
bantime = 315400000 ; 10 years
findtime = 31540000 ; 1 year
maxretry = 200
filter = sshd
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
action = %(action_xarf)s
Tags configuration debian logs fail2ban