Enquanto o fail2ban cria uma cadeia iptables por serviço (por exemplo, fail2ban-ssh ), a verificação de uma proibição existente é baseada no endereço IP. Uma possibilidade para consertar o problema é fazer com que o fail2ban unban um IP (ticket) se ele já esteja na lista de banidos antes que ele seja banido (novamente)
Essas ações acontecem no script python localizado (quando instalado via apt-get install
) em
/usr/share/fail2ban/server
edite o arquivo actions.py
, você deve ver o seguinte código para a definição __checkban
def __checkBan(self):
ticket = self.jail.getFailTicket()
if ticket != False:
aInfo = dict()
bTicket = BanManager.createBanTicket(ticket)
aInfo["ip"] = bTicket.getIP()
aInfo["failures"] = bTicket.getAttempt()
aInfo["time"] = bTicket.getTime()
aInfo["matches"] = "".join(bTicket.getMatches())
if self.__banManager.addBanTicket(bTicket):
logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"]))
for action in self.__actions:
action.execActionBan(aInfo)
return True
else:
logSys.warn("[%s] %s already banned" % (self.jail.getName(), aInfo["ip"]))
return False
modificar / substituir a definição por
def __checkBan(self):
ticket = self.jail.getFailTicket()
if ticket != False:
aInfo = dict()
bTicket = BanManager.createBanTicket(ticket)
aInfo["ip"] = bTicket.getIP()
aInfo["failures"] = bTicket.getAttempt()
aInfo["time"] = bTicket.getTime()
aInfo["matches"] = "".join(bTicket.getMatches())
# changes from here ...
if not self.__banManager.addBanTicket(bTicket):
logSys.warn("[%s] first unban %s before ban" % (self.jail.getName(), aInfo["ip"]))
self.__unBan(ticket)
self.__banManager.addBanTicket(bTicket)
logSys.warn("[%s] Ban %s" % (self.jail.getName(), aInfo["ip"]))
for action in self.__actions:
action.execActionBan(aInfo)
return True
# else:
# logSys.warn("[%s] %s already banned" % (self.jail.getName(),
# aInfo["ip"]))
#return False
e reinicie o fail2ban (por exemplo, /etc/init.d/fail2ban restart
), embora provavelmente não seja necessário ...
Nota: se você quiser 'brincar' com isso, você pode listar as regras do firewall (iptables)
iptables -L
e exclua a regra que foi criada por fail2ban para acessar e forçar um "novo banimento"
iptables -D fail2ban-ssh xxxx
em que xxxx é o número da regra nessa cadeia da lista iptables -L fail2ban-ssh