Fail2Ban to program służący ochronie serwera poprzez blokowanie ataków typu brute-force na najważniejsze usługi systemowe (ssh/ftp/apache/mail).

W wypadku przekroczenia określonej w konfiguracji liczby błędnych logowań, fail2ban blokuje włamywaczowi, robotom albo użytkownikowi dostęp do systemu poprzez ustawienie blokady jego IP w regułach firewalla.
fail2ban ustawia zwykle następnie tzw. unban (odblokowanie) IP po określonym czasie, tak aby nie „zablokować” na stałe prawdziwego użytkownika, który próbował przypomnieć sobie hasło :). Jednakże czas zablokowania jest na ogół na tyle długi aby powstrzymać większość złośliwych ataków robotów i zmniejszyć prawdopodobieństwo ataku słownikowego.

Fail2ban i Denyhosts – porównanie programów

Fail2ban jest podobny do DenyHosts … ale w przeciwieństwie do DenyHosts który koncentruje się na SSH, fail2ban jest stworzony do monitorowania wszelkich usług, które odnotowują zdarzenia do plików dziennika, a oprócz użycia /etc/hosts.deny (DenyHosts), fail2ban wykorzystuje zaporę sieciową (netfilter/iptables) oraz Wrappery TCP (Wrappery to procesy opakowujące, które działają między stosem TCP/IP a właściwą usługą. W klasycznym przypadku odbywa się to we współpracy z superserwerem (x)inetd.).

instalacja i konfiguracja fail2ban

apt-get install fail2ban
cat /etc/fail2ban/jail.conf
touch /etc/fail2ban/jail.local

Główny plik konfiguracyjny programu to jail.conf, ale nie powinniśmy go edytować, zamiast tego należy utworzyć plik jail.local i tam umieścić polecenia, które chcemy zmienić:

W ścieżce ignoreip definiujemy IP, które jest pomijane (tzn. nigdy nie zostanie zablokowane), w tej linii możemy podawać adresy IP, maski CIDR lub nazwy hostów DNS, wartości oddzielamy spacją W wierszu poniżej – bantime – definiujemy czas blokady w sekundach, domyślnie jest ustawione na 10 minut, dla zmylenia przeciwnika możemy ustawić 12 🙂
Ilość możliwych nieudanych prób logowania definiujemy w polu maxretry

ignoreip = 127.0.0.1 280.168.46.140
bantime  = 720
maxretry = 3

Fail2ban – sekcja JAILS

Każda sekcja odpowiada za jakąś usługę, jeśli dane więzienie (ang. jail) ma być włączone to ustawiamy
enabled = true, jeśli wylączone to enabled = false

ważnym parametrem jest logpath w którym definiujemy ścieżkę do logów z danej usługi, które fail2ban ma śledzić. To, że fail2ban analizuje logi zamiast bezpośrednio monitorować ruch jest jego dużą zaletą, bowiem został tak zaprojektowany aby nie obciążać zasobów systemu. Jeśli nie ingerowaliśmy w strukturę logów systemowych, ścieżki logpath najlepiej pozostawić domyślne.

[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

jak ustawić wysyłanie maili o próbie zalogowania w fail2ban?
W dalszym ciągu pozostając przy edycji pliku jail.local, ustawiamy adres e-mail na który mają być wysyłane powiadomienia. destemail = nasz_email@gmail.com a w sekcji # ACTIONS (action=) zmieniamy tryb z „action” (samo banowanie) na „action_mwl” (banowanie z powiadomieniem na email)action = %(action_mwl)s Należy pamiętać aby po każdej zmianie pliku konfiguracyjnego fail2ban zrestartować program: /etc/init.d/fail2ban restart

podglądamy cały plik dziennika:

nano /var/log/fail2ban.log

lub przeglądamy co dopisuje w czasie rzeczywistym

tail -f /var/log/fail2ban.log

lub szukamy zbanowanych

cat fail2ban.log | grep -i WARNING

przykładowy wynik

2011-06-20 02:40:31,925 fail2ban.actions: WARNING [ssh] Ban 186.80.0.189
2011-06-20 02:50:32,560 fail2ban.actions: WARNING [ssh] Unban 186.80.0.189
2011-06-22 05:50:05,105 fail2ban.actions: WARNING [ssh] Ban 190.44.131.77
2011-06-22 06:00:05,740 fail2ban.actions: WARNING [ssh] Unban 190.44.131.77
2011-06-22 09:08:41,607 fail2ban.actions: WARNING [ssh] Ban 201.238.244.98
2011-06-22 09:18:42,241 fail2ban.actions: WARNING [ssh] Unban 201.238.244.98
2011-06-23 03:32:33,744 fail2ban.actions: WARNING [ssh] Ban 190.142.147.139
2011-06-23 03:42:34,379 fail2ban.actions: WARNING [ssh] Unban 190.142.147.139

Aby zobaczyć reguły iptables należy użyć polecenia:

iptables -L