Stały blok adresu IP po n ponownych próbach przy użyciu fail2ban

38

Mam skonfigurowany fail2ban jak poniżej:

  • zablokuj ip po 3 nieudanych próbach
  • zwolnij adres IP po upływie 300 sekund

Działa to idealnie i chcę zachować to w ten sposób, aby prawidłowy użytkownik miał szansę ponowić logowanie po upływie limitu czasu. Teraz chcę wdrożyć regułę, w której jeśli to samo IP zostanie wykryte jako atak i zablokowane, odblokowane 5 razy, trwale zablokuj IP i nigdy więcej nie odblokuj. Czy można to osiągnąć za pomocą samego fail2ban, czy muszę napisać własny skrypt, aby to zrobić?

Robię to w centach.

BTR Naidu
źródło
2
To dość głupi pomysł - im więcej reguł dodasz do iptables, tym wolniej się robi.
symcbean
14
Doceń swój komentarz, ale potrzebuję odpowiedzi, a nie sugestii. W każdym razie dzięki.
BTR Naidu
5
Czasami właściwą odpowiedzią na „jak to zrobić X” jest „nie rób X”.
ceejayoz

Odpowiedzi:

32

Przed wersją 0.11 nie było domyślnej funkcji ani ustawienia w fail2ban, aby to osiągnąć. Ale począwszy od nadchodzącej wersji 0.11, czas banowania jest automatycznie obliczany i rośnie wykładniczo z każdym nowym przestępstwem, co w dłuższej perspektywie będzie oznaczało mniej więcej stały blok.

Do tego czasu najlepszym rozwiązaniem jest konfiguracja fail2ban do monitorowania własnego pliku dziennika . Jest to proces dwuetapowy ...

Krok 1

Możemy potrzebować utworzyć filtr, aby sprawdzić BAN w pliku dziennika (plik dziennika fail2ban)

Krok 2

Musimy zdefiniować więzienie , podobnie jak poniżej ...

[fail2ban]
włączone = prawda
filter = fail2ban
action = iptables-allports [name = fail2ban]
logpath = /path/to/fail2ban.log
# findtime: 1 dzień
findtime = 86400
# bantime: 1 rok
bantime = 31536000

Z technicznego punktu widzenia nie jest to blok stały , a jedynie bloki na rok (które również możemy zwiększyć).

W każdym razie, jeśli chodzi o twoje pytanie (czy można to osiągnąć samemu fail2ban, czy też muszę napisać własny skrypt, aby to zrobić?) ... pisanie własnego skryptu może działać dobrze. Zalecam skonfigurowanie skryptu w celu wyodrębnienia często zbanowanych adresów IP, a następnie ich umieszczenie /etc/hosts.deny.

Pothi Kalimuthu
źródło
1
Dodanie do tej doskonałej odpowiedzi ... W zależności od konfiguracji logowania i MaxAuthTries sshd_configmoże to potencjalnie zablokować tylko 3 nieudane logowania dla „sesji” sshd - a nie 3 nieudane logowania. Na przykład domyślnie osoba atakująca może spróbować [„pass1”, „pass2”, „pass3”] w jednej sesji, zanim sshd się rozłączy. W zależności od tego, jak sshd jest ustawione na rejestrowanie, może to wyglądać jako 1, 2 lub 3 próby niepowodzenia fail2ban.
Jonathan Vanasco
5
Teraz dostępny jest do tego filtr recydywistyczny fail2ban.
Guillermo Prandi,
Co rozumiesz przez nadchodzące wydanie 0.11 ? Najnowsze wydaje się być 10.3.1: github.com/fail2ban/fail2ban/releases
user5950
Mam nadzieję, że miałeś na myśli 0.10.3.1 . Postęp śledzenia „0.11” można śledzić na github.com/fail2ban/fail2ban/tree/0.11 . Zasadniczo nie został jeszcze wydany!
Pothi Kalimuthu
29

Wierzę, że jeśli umieścisz bantime = -1tę sekcję konfiguracji, jest to stały blok.

J. Chin
źródło
2
Rzeczywiście, ustawienie bantimena jakąkolwiek wartość ujemną jest trwałym zakazem (od Fail2Ban wer. 0.6.1 (2006/03/16))
voretaq7
3
dodanie -1 do ustawień spowodowało brak odpowiedzi fail2ban
Erdem Ece,
13

Phil Hagen napisał doskonały artykuł na ten temat. „ Trwale zablokuj powtarzających się przestępców za pomocą fail2ban ”.

Jego sugestia jest taka sama jak Pothi, ale zapewnia przewodnik krok po kroku.

Obejmowało to:

  • oddzielna lista banów przez więzienie (ip.blocklist.ssh, ip.blocklist.xxx)
  • listy blokad są ładowane automatycznie po ponownym uruchomieniu usługi (główna zaleta tej metody imho)
  • powiadomienie e-mail, jeśli repeater jest włączony.
xaa
źródło
6

Aby rozwinąć odpowiedź Chin, jest to dość proste. Po prostu edytuj 2 ustawienia w /etc/fail2ban/jail.localcelu dopasowania do swoich preferencji.

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5
Casey Watson
źródło
4

fail2ban ma już więzienie, aby zakazać recydywy. Jeśli obejrzysz /etc/fail2ban/jail.conf, znajdziesz:

# 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

Jak dodać w jail.local?

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

Dla Sprawdź LogLevel można zrobić: fail2ban-client get loglevel.

  • ustaw loglevel MYLEVEL : ustawia poziom rejestrowania na MYLEVEL. Poziomy: KRYTYCZNY, BŁĄD, OSTRZEŻENIE, UWAGA, INFORMACJE, DEBUGA
  • Więcej poleceń na wiki .

W starej wersji fail2ban możesz dostać ten błąd .

A-312
źródło
0

Przejdź do vim, otwórz /etc/fail2ban/jail.conf

i po prostu zmodyfikuj po 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***
Tanveer Ahmad
źródło