Blocco permanente di IP dopo n tentativi utilizzando fail2ban


38

Ho un fail2ban configurato come di seguito:

  • bloccare l'ip dopo 3 tentativi falliti
  • rilasciare l'IP dopo 300 secondi di timeout

Funziona perfettamente e voglio mantenerlo in questo modo in modo che un utente valido abbia la possibilità di riprovare l'accesso dopo il timeout. Ora, voglio implementare una regola in cui se lo stesso IP viene rilevato come attacco e bloccato, sbloccato 5 volte, blocca permanentemente l'IP e non si sblocca mai più. Questo può essere ottenuto solo con fail2ban o ho bisogno di scrivere il mio script per farlo?

Lo sto facendo in centos.


2
È un'idea piuttosto sciocca: più regole aggiungi a iptables più lentamente diventa.
symcbean,

14
Apprezzo il tuo commento, ma ciò di cui ho bisogno è una risposta e non un suggerimento. Grazie comunque.
BTR Naidu,

5
A volte la risposta giusta a "come faccio X" è "non fare X".
Ceejayoz,

Risposte:


32

Prima di 0.11, non vi era alcuna funzione predefinita o un'impostazione in fail2ban per raggiungere questo obiettivo. Ma a partire dalla prossima versione 0.11, il tempo di ban viene calcolato automaticamente e aumenta esponenzialmente con ogni nuova infrazione che, a lungo termine, significherà un blocco più o meno permanente.

Fino ad allora, l'approccio migliore è probabilmente la configurazione di fail2ban per monitorare il proprio file di registro . È un processo in due fasi ...

Passo 1

Potrebbe essere necessario creare un filtro per verificare la presenza di BAN nel file di registro (file di registro di fail2ban)

Passo 2

Dobbiamo definire la prigione , in modo simile al seguente ...

[Fail2ban]
abilitato = vero
filtro = fail2ban
action = iptables-allports [nome = fail2ban]
logpath = /path/to/fail2ban.log
# findtime: 1 giorno
findtime = 86400
# bantime: 1 anno
bantime = 31536000

Tecnicamente, non è un blocco permanente , ma solo blocchi per un anno (che possiamo aumentare anche).

Comunque, per la tua domanda (questo può essere ottenuto solo con fail2ban o ho bisogno di scrivere il mio script per farlo?) ... scrivere il proprio script potrebbe funzionare bene. Configurare lo script per estrarre gli IP frequentemente vietati e poi inserirli /etc/hosts.denyè ciò che consiglierei.


1
Aggiunta a questa eccellente risposta ... A seconda di come sono configurati la registrazione e MaxAuthTries sshd_config, questo potrebbe potenzialmente bloccare solo 3 accessi non riusciti per una "sessione" sshd - non 3 accessi non riusciti forniti. Ad esempio, per impostazione predefinita un utente malintenzionato potrebbe provare ['pass1', 'pass2', 'pass3'] in una singola sessione prima che sshd si disconnetta. A seconda di come sshd è impostato per il log, questo potrebbe apparire come 1, 2 o 3 tentativi di fail2ban.
Jonathan Vanasco,

5
Ora c'è il filtro recidivo fail2ban per quello.
Guillermo Prandi,

Cosa intendi con la prossima versione 0.11 ? Il più recente sembra essere il 10.3.1: github.com/fail2ban/fail2ban/releases
user5950

Spero che intendessi 0.10.3.1 . Puoi tenere traccia dell'avanzamento di "0.11" su github.com/fail2ban/fail2ban/tree/0.11 . Fondamentalmente, non è ancora stato rilasciato!
Pothi Kalimuthu,

30

Credo che se metti bantime = -1in quella sezione di configurazione, è un blocco permanente.


2
In effetti, impostare bantimeun valore negativo è un divieto permanente (a partire da Fail2Ban ver. 0.6.1 (2006/03/16))
voretaq7

3
l'aggiunta di -1 alle impostazioni ha reso fail2ban non rispondente
Erdem Ece,

13

Phil Hagen ha scritto un eccellente articolo su questo argomento. " Divieto permanente di ripetere i trasgressori con fail2ban ".

Il suo suggerimento è lo stesso di Pothi ma fornisce una guida dettagliata.

Questo includeva:

  • lista di ban separata dal jail (ip.blocklist.ssh, ip.blocklist.xxx)
  • elenchi di ban caricati automaticamente se il servizio viene riavviato (vantaggio principale di questo metodo imho)
  • notifica e-mail se il ripetitore è attivato.

6

Espandere la risposta di Chin è abbastanza semplice. Modifica semplicemente le 2 impostazioni in base /etc/fail2ban/jail.localalle tue preferenze.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5

4

fail2ban ha già un carcere per vietare la recidiva. Se guardi /etc/fail2ban/jail.conf, troverai:

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

Come aggiungere in jail.local?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

Per il check si Loglevel si può fare: fail2ban-client get loglevel.

  • imposta loglevel MYLEVEL : imposta il livello di registrazione su MYLEVEL. Livelli: CRITICO, ERRORE, AVVISO, AVVISO, INFO, DEBUG
  • Più comandi sul wiki .

Con la vecchia versione di fail2ban, è possibile ottenere questo errore .


0

Vai su vim, apri /etc/fail2ban/jail.conf

e basta modificare dopo fail2ban service restart:

# "bantime" is the number of seconds that a host is banned.
bantime  = ***1296000***

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.