fail2ban na Ubuntu Server 16.4

Fail2ban jest narzędziem pomagającym zabezpieczyć serwery oparte o systemy Linux skanując logi (np. logi serwera ssh lub ftp), wyszukując błędy autentykacji, po czym wykonując aktualizacje ustawień firewall, żeby odrzucał połączenia z danego IP.

Wszystkie nałożone bany są aktywne tylko podczas pracy programu fail2ban i są usuwane podczas jego zatrzymania. W konsekwencji tego bany nie są pamiętane pomiędzy restartami programu!

Fail2ban jest dostępny w repozytoriach Debiana i Ubuntu, zatem aby go zainstalować wydajemy polecenie:

apt-get install fail2ban

Fail2ban w domyślnej konfiguracji włączony będzie dla autoryzacji poprzez ssh.

Kopiujemy domyślny plik /etc/fail2ban/jail.conf zawierający standardową konfigurację do pliku /etc/fail2ban/jail.local gdyż domyślny plik może zostać nadpisany podczas aktualizacji:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Struktura katalogu konfiguracyjnego

Po zainstalowaniu pakietu będziemy mieli podobną strukturę katalogu /etc/fail2ban/:

/etc/fail2ban/
|-- action.d
|   |-- complain.conf
|   |-- dshield.conf
|   |-- hostsdeny.conf
|   |-- ipfilter.conf
|   |-- ipfw.conf
|   |-- iptables-allports.conf
|   |-- iptables-multiport-log.conf
|   |-- iptables-multiport.conf
|   |-- iptables-new.conf
|   |-- iptables.conf
|   |-- mail-buffered.conf
|   |-- mail-whois-lines.conf
|   |-- mail-whois.conf
|   |-- mail.conf
|   |-- mynetwatchman.conf
|   |-- sendmail-buffered.conf
|   |-- sendmail-whois-lines.conf
|   |-- sendmail-whois.conf
|   |-- sendmail.conf
|   `-- shorewall.conf
|-- fail2ban.conf
|-- filter.d
|   |-- apache-auth.conf
|   |-- apache-badbots.conf
|   |-- apache-common.conf
|   |-- apache-nohome.conf
|   |-- apache-noscript.conf
|   |-- apache-overflows.conf
|   |-- common.conf
|   |-- courierlogin.conf
|   |-- couriersmtp.conf
|   |-- cyrus-imap.conf
|   |-- exim.conf
|   |-- gssftpd.conf
|   |-- lighttpd-fastcgi.conf
|   |-- named-refused.conf
|   |-- nginx-w00tw00t.conf
|   |-- pam-generic.conf
|   |-- php-url-fopen.conf
|   |-- postfix.conf
|   |-- proftpd.conf
|   |-- pure-ftpd.conf
|   |-- qmail.conf
|   |-- sasl.conf
|   |-- sieve.conf
|   |-- sshd-ddos.conf
|   |-- sshd.conf
|   |-- vsftpd.conf
|   |-- webmin-auth.conf
|   |-- wuftpd.conf
|   `-- xinetd-fail.conf
|-- jail.conf

Podstawowe ustawienia zawarte są w pliku

/etc/fail2ban/fail2ban.conf: loglevel,logtarget,socket.

Tu raczej wszystko jest jasne.

Drugim plikiem jest

/etc/fail2ban/jail.conf

i jest to tak naprawdę główny plik odpowiadający za ochronę naszych usług.
W oficjalnej dokumentacji jest informacja, że każdy plik *.conf może być zmieniony na *.local oczywiście zachowując przy tym oryginał (najpierw wczytywane są ustawienia z plików *.conf, później wczytywana/nadpisywana jest konfiguracja z plików .local). W przypadku

fail2ban.conf

nie ma to najmniejszego sensu, to już w przypadku

jail.conf

jest to mocno zalecane. W katalogu konfiguracyjnym znajdują się jeszcze katalogi:

/etc/fail2ban/filter.d/

i

/etc/fail2ban/action.d/

Pierwszy z nich zawiera wyrażenia regularne, dzięki którym fail2ban wyłapuje podejrzane zachowania. W drugim katalogu przechowywana jest konfiguracja określająca działanie wobec wykrytych ataków.

Konfiguracja Fail2Ban

Pierwszym krokiem będzie utworzenie pliku

jail.local

na podstawie jail.conf:

 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Zawartość pliku podzielona jest na następujące sekcje :

  • DEFAULT – globalne ustawienia programu, które można nadpisać w pozostałych sekcjach
  • ACTIONS – globalne definicje akcji jakie będą podejmowane wobec “atakującego” adresu IP.
  • JAILS – indywidualna konfiguracja dla poszczególnych usług sieciowych

W pliku

/etc/fail2ban/jail.local

można zmodyfikować kilka parametrów. Kilka najważniejszych to:

ignoreip: w tym parametrze podajemy listę adresów IP które powinny być wyłączone z zasad fail2ban. Można dodać swój adres IP.

bantime: określa jak długo ( w sekundach) ban będzie aktywny (domyślnie jest 10 minut).

maxretry: ten parametr określa domyślną ilość prób połączenia zanim ban zostanie nałożony na adres IP(domyślnie jest 3).

destemail: ta opcja pozwala ustawić adres e-mail, na który będą przychodzić powiadomienia zdarzeń

logpath: ważne aby sprawdzić dla każdej monitorowanej usługi czy ścieżka do pliku logów podana w parametrze logpath jest prawidłowa

Jeśli chcemy zmienić monitorowane parametry dla danej usługi to modyfikujemy jej sekcję:

[ssh] -> nazwa jaila
enabled = true -> czy włączony (jeśli wyłączony to enabled = false)
port = ssh -> port usługi – przyjmuje wartość numeryczną lub nazwę portu, listę nazw portów można uzyskać z pliku /etc/services
filter = sshd -> pierwszy człon nazwy filtra logów: /etc/fail2ban/filter.d/sshd.conf
logpath = /var/log/auth.log -> ścieżka do pliku monitorowanych logów – możliwa tylko jedna wartość, ale dopuszczalna jest *
maxretry = 15 -> maksymalna ilość nieudanych prób autoryzacji

Fail2ban monitoruje logi plików dla prób połączeń. Jeśli z danego adresu IP zostanie przekroczona maksymalna ilość prób połączeń to blokuje dostęp dla tego adresu i zdarzenie jest logowane do pliku /var/log/fail2ban.log.

Wyświetlenie bieżącej konfiguracji:

fail2ban-client –d

Wyświetlanie bieżących banów:

iptables -L -n -v

Jeśli chcemy usunąć bana to znajdujemy nazwę łańcucha(jail) i numer reguły w tym łańcuchu dla adresu, który chcemy odblokować(nr_reg) i wykonujemy:

iptables -D jail nr_reg

Restart usługi fail2ban wykonujemy za pomocą polecenia:

/etc/init.d/fail2ban restart

Po instalacji (przynajmniej na Debianie) aktywowana jest już ochrona ssh. Chcąc uruchomić na przykład ochronę serwera smtp postfix wystarczy w sekcji JAILS znaleźć sekcję [postfix] i zmienić na true opcję enabled .

Wszystkie opcje, które są skonfigurowane w sekcjach DEFAULT i ACTIONS można nadpisywać indywidualnie w ustawieniach poszczególnych usług sieciowych.
Przykład konfiguracji, która blokuje ataki na ssh (openssh-server), smtp(s),sasl (postix), imap(s) (dovecot), http(s) (nginx, skaner w00tw00t). Plik jail.local:

# Fail2Ban configuration file.
# The DEFAULT allows a global definition of the options. They can be override
# in each jail afterwards.
[DEFAULT]

ignoreip = 127.0.0.1 ip.ip.ip.ip
bantime  = 1800
maxretry = 3
backend = auto
destemail = user@ulos.pl

#
# ACTIONS
#
banaction = iptables-allports
mta = sendmail
# Default protocol
protocol = tcp

## blokada hosta
#action = %(action_)s
## blokada hosta + powiadomienie email
action = %(action_mw)s
## blokada hosta + powiadomienie email + załączone logi w mailu
action = %(action_mwl)s
#
# JAILS
#
# Optionally you may override any other parameter (e.g. banaction,
# action, port, logpath, etc) in that section within jail.local


[ssh]

enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
#action = sendmail-whois[name=ssh, dest=dominik.switkowski@gmail.com,sender=root@lsnet.pl]
bantime = 24400
maxretry = 2

#
# Http servers
#

[nginx-w00tw00t]
enabled  = true
port      = http,https
filter   = nginx-w00tw00t
action   = iptables-allports[nginx-w00tw00t]
logpath = /var/log/nginx/*.access.log
maxretry = 1
bantime  = 96400

#
# Mail servers
#

[postfix]
enabled  = true
port     = smtp,ssmtp,submission
filter   = postfix
logpath  = /var/log/mail.log
bantime  = 1880
maxretry = 2

[sasl]
enabled  = true
port     = smtp,ssmtp,imap2,imap3,imaps
filter   = sasl
logpath  = /var/log/mail.log
bantime  = 1880
maxretry = 1

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-allports[name=dovecot-pop3imap]
port = imap2,imap3,imaps
logpath = /var/log/mail.log
maxretry = 3
bantime = 9200

Powyższego przykładu nie polecam kopiować jeden do jednego, niektóre opcje należy dostosować do swojej konfiguracji serwera. W sekcji ACTIONS opcja banaction ma wartość iptables-allports co oznacza blokadę wszystkich usług. Drugą możliwością jest iptables-multiport wtedy blokada nałożona na atakującego obejmuje tylko atakowaną usługę. Przedstawiając to obrazowo, jeśli ktoś nam atakuje http to fail2ban blokuje mu dostęp do naszego serwera www, ale już do ssh,smtp… jak najbardziej dostęp ma. W sekcji JAILS w konfiguracjach dla poszczególnych usług zwróćmy uwagę na zmienną port. W konfiguracji dla usługi ssh port jest ustawiony na… ssh. Wygląda to co najmniej śmiesznie natomiast wynika to ze sposobu jak fail2ban rozwiązuje odwzorowanie nazw usług sieciowych na numery portów, korzystając przy tym z pliku /etc/services. Równie dobrze można podawać port w postaci liczby.

Warto wspomnieć o możliwości otrzymywania email-a o blokadzie atakujących nas hostów. Dla mnie jest to zbyteczna funkcjonalność wobec tego nie opisuje jej szczegółowo. Jeżeli jednak zdecydujemy się na w/w powiadomienia musimy mieć zainstalowany serwer smtp.

Rozszerzenie fail2ban o obsługę dodatkowych usług sieciowych, aplikacji jest możliwe i zarazem dość proste. W sieci jest wiele gotowych rozwiązań, również sami możemy pokusić się o stworzenie własnych filtrów pod warunkiem znajomości wyrażeń regularnych.

 

Zdejmowanie banów możemy zrealizować na dwa sposoby. Pierwszy to po prostu restart procesu fail2ban, wtedy wszystkie blokady zostaną usunięte. Od wersji 0.8.6 po zrestartowaniu programu w dalszym ciągu utrzymywane są blokady. Drugi sposób zdejmuje bana z konkretnego adresu IP za pomocą iptables, oczywiście, o ile wybraliśmy sposób blokowania za pomocą iptables.

    • W pierwszym kroku wyświetlam zawartość wszystkich reguł poleceniem: iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination
fail2ban-default  all  --  0.0.0.0/0     0.0.0.0/0
DROP       all  --  223.25.195.163       0.0.0.0/0
DROP       all  --  202.72.179.219       0.0.0.0/0
...
...
...
Chain fail2ban-default (1 references)
target     prot opt source               destination
DROP       all  --  58.83.157.6          0.0.0.0/0
DROP       all  --  94.56.48.130         0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain fail2ban-postfix (1 references)
target     prot opt source               destination
DROP       all  --  14.63.214.64         0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain fail2ban-sasl (1 references)
target     prot opt source               destination
DROP       all  --  221.139.14.120       0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
DROP       all  --  87.106.227.246       0.0.0.0/0
DROP       all  --  217.126.193.74       0.0.0.0/0
DROP       all  --  220.164.144.135      0.0.0.0/0
DROP       all  --  67.137.122.86        0.0.0.0/0
DROP       all  --  50.116.61.79         0.0.0.0/0
DROP       all  --  121.196.45.14         0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
    • Nas interesują łańcuchy fail2ban-<nazwa_usługi>, ponieważ przy odblokowywaniu adresu IP będzie potrzebna nam jego nazwa. Przykładowo, chcąc odbanować ssh dla adresu IP: 220.164.144.135 jako root (ubuntu sudo) wydajemy polecenie:
      iptables -D fail2ban-ssh -s 220.164.144.135 -j DROP. Analogicznie odblokowanie dla serwera poczty adresu IP: 14.63.214.64 będzie wyglądało następująco: iptables -D fail2ban-postfix -s 14.63.214.64 -j DROP.
    • W celu uniknięcia pomyłki w czasie przepisywania adresu IP można ponumerować zablokowane wpisy wydając polecenie: iptables -nL fail2ban-ssh –line-numbers.
Chain fail2ban-ssh (1 references)
num  target     prot opt source               destination
1    DROP       all  --  87.106.227.246       0.0.0.0/0
2    DROP       all  --  217.126.193.74       0.0.0.0/0
3    DROP       all  --  220.164.144.135      0.0.0.0/0
4    DROP       all  --  67.137.122.86        0.0.0.0/0
5    DROP       all  --  50.116.61.79         0.0.0.0/0
6    DROP       all  --  121.196.45.14        0.0.0.0/0
7    RETURN     all  --  0.0.0.0/0            0.0.0.0/0
  • Mając takie wylistowanie bazujemy na nazwie łańcuchów i numerze: iptables -D fail2ban-ssh 4.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Translate »