Uwaga, poniższy tutorial jest fragmentem mojej pracy inżynierskiej pt.: „Utwardzanie serwera sieciowego opartego o system Linux.” pod kierunkiem dr. hab. Kordiana Smolińskiego w Katedrze Fizyki Teoretycznej WFiIS UŁ obronionej w czerwcu 2019.
CentOS
Aby zainstalować Fail2Ban na CentOS 7.6, w pierwszej kolejności trzeba będzie zainstalować repozytorium EPEL (ang. Extra Packages for Enterprise Linux). EPEL zawiera dodatkowe pakiety dla wszystkich wersji CentOS, jednym z tych dodatkowych pakietów jest Fail2Ban.
sudo yum install epel-release
sudo yum install fail2ban fail2ban-systemd
Debian/Ubuntu
Dla Debian/Ubuntu wystarczy komenda:
sudo apt-get install fail2ban
W przypadku CentOS następnym kroku należy zaktualizować zasady SELinux. (uwaga: na mikr.us nie ma zainstalowanego SELinux).
sudo yum update -y selinux-policy*
Debian i Ubuntu posiadaja AppArmor.
Po zainstalowaniu, będziemy musieli skonfigurować i dostosować oprogramowanie za pomocą pliku konfiguracyjnego jail.local. Plik jail.local zastępuje plik jail.conf i jest używany w celu zapewnienia bezpieczeństwa aktualizacji konfiguracji użytkownika.
Zrób kopię pliku jail.conf i zapisz go pod nazwą jail.local: zaktualizuj politykę SELinux:
cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Otwórz plik jail.local do edycji w Vim za pomocą następującego polecenia:
sudo -e /etc/fail2ban/jail.local
Kod pliku może składać się z wielu linii kodów, które wykonują się, aby zapobiec zablokowaniu jednego lub wielu adresów IP, ustawić czas trwania bantime, itp. Typowy plik konfiguracyjny więzienia zawiera następujące linie:
[DEFAULT]
ignoreip = 127.0.0.1/8
ignorecommand =
bantime = 600
findtime = 600
maxretry = 5
backend = systemd
- IgnoreIP służy do ustawienia listy adresów IP, które nie będą zakazane. Lista adresów IP powinna być podana z separatorem spacji. Ten parametr jest używany do ustawienia osobistego adresu IP (jeśli istnieje dostęp do serwera ze stałego adresu IP).
- Parametr Bantime służy do ustawienia czasu trwania sekund, na które host ma zostać zbanowany.
- Findtime jest parametrem, który służy do sprawdzenia, czy host musi zostać zbanowany czy nie. Gdy host generuje maksimum w ostatnim findtime, jest on banowany.
- Maxretry jest parametrem używanym do ustawienia limitu liczby prób przez hosta, po przekroczeniu tego limitu, host jest banowany.
Dodawanie pliku więzienia (ang. jail), w celu ochrony SSH.
Utwórz nowy plik za pomocą edytora Vim.
sudo -e /etc/fail2ban/jail.d/sshd.local
Do powyższego pliku należy dodać następujące wiersze kodu.
[sshd]
enabled = true
port = ssh
action = iptables-allports
# logpath = /var/log/secure # manualne ustawienie ścieżki
logpath = %(sshd_log)s
findtime = 600
maxretry = 3
bantime = 86400
W przypadku, gdy używasz iptables , action ustaw jak poniżej:
action = iptables-allports
- Parametr enable jest ustawiony na wartość true, w celu zapewnienia ochrony, aby wyłączyć ochronę, jest ustawiony na false. Parametr filtra sprawdza plik konfiguracyjny sshd, znajdujący się w ścieżce /etc/fail2ban/filter.d/sshd.conf.
- Parametr action służy do wyprowadzenia adresu IP, który musi być zakazany za pomocą filtra dostępnego w pliku /etc/fail2ban/action.d/iptables-allports.conf.
- Parametr port można zmienić na nową wartość, np. port=2244, jak to ma miejsce w tym przypadku. W przypadku korzystania z portu 22, nie ma potrzeby zmiany tego parametru.
- Ścieżka logowania podaje ścieżkę, na której zapisany jest plik logu. Ten plik dziennika jest skanowany przez Fail2Ban.
- Maxretry służy do ustawienia maksymalnego limitu nieudanych wpisów logowania.
- Parametr Bantime służy do ustawienia czasu trwania sekund, na który host musi zostać zablokowany.
Uruchomienie usługi Fail2Ban
Jeśli jeszcze nie używasz zapory sieciowej CentOS, uruchom ją:
sudo systemctl enable firewalld
sudo systemctl start firewalld
Jeśli używasz iptables, to:
sudo systemctl enable iptables
sudo systemctl start iptables
Wykonaj poniższe plecenia, aby uruchomić Fail2Ban na serwerze.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Śledzenie wpisów logowania fail2ban
Poniższe polecenie służy do sprawdzenia, które próby zalogowania się do serwera przez post ssh nie powiodły się.
cat /var/log/secure | grep 'Failed password'
Wykonanie powyższej komendy spowoduje wyświetlenie listy nieudanych prób wprowadzenia hasła głównego z różnych adresów IP. Format wyników będzie podobny do pokazanego poniżej:
Feb 12 19:27:12 centos sshd[25729]: Failed password for root from 150.10.0.107 port 9074 ssh2
Feb 13 15:05:35 deb_usr sshd[1617]: Failed password for invalid user pi from 42.236.138.215 port 58182 ssh2
Sprawdzanie zbanowanych adresów IP przez Fail2Ban
Poniższe polecenie służy do uzyskania listy zablokowanych adresów IP, które zostały rozpoznane jako zagrożenia metodą brute force.
iptables -L –n
Sprawdzanie statusu Fail2Ban
Użyj następującej komendy, aby sprawdzić status plików jail w Fail2Ban:
sudo fail2ban-client status
Wynik powinien być podobny do tego:
# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Poniższe polecenie wyświetli zbanowane adresy IP dla danego więzienia (jail).
sudo fail2ban-client status sshd
Usunięcie zbanowanego adresu IP
W celu usunięcia adresu IP z zablokowanej listy, parametr IPADDRESS jest ustawiony na odpowiedni adres IP, który wymaga odbanowania. Nazwa „sshd” jest nazwą więzienia, w tym przypadku jest to więzienie „sshd”, które skonfigurowaliśmy powyżej. Poniższe polecenie pozwala usunąć adres IP.
sudo fail2ban-client set sshd unbanip IPADDRESS
Dodawanie własnego filtra w celu zwiększenia ochrony
Fail2ban umożliwia tworzenie własnych filtrów. Poniżej krótki opis konfiguracji jednego z nich.
1.Należy przejść do katalogu filter.d Fail2ban:
sudo cd /etc/fail2ban/filter.d
2.Utworzyć plik wordpress.conf i dodać do niego wyrażenie regularne.
sudo -e wordpress.conf
#Fail2Ban filter for WordPress
[Definition]
failregex = - - [(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}] "POST /wp-login.php HTTP/1.1" 200
ignoreregex =
Zapisać i zamknąć plik.
3.Dodać sekcję WordPress na końcu pliku jail.local:
$ sudo -e /etc/fail2ban/jail.local
[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/httpd/access_log
#CentOS Zwróć uwagę, czy jest _ czy .
# W pliku /etc/httpd/conf/httpd.conf masz informację,
# gdzie jest zapisywany log.
# logpath = /var/log/apache2/access.log // Ubuntu/Debian
port = 80,443
Jeśli chcemy banować boty, wystarczy dodać akcję, czas bana oraz ilość prób, jak w przypadku jail sshd opisanego wyżej.
W tym celu użyty zostanie domyślny ban i akcja e-mail. Inne akcje mogą być zdefiniowane przez dodanie akcji = linia.
Zapisz i wyjdź, a następnie uruchom ponownie Fail2ban poleceniem:
sudo systemctl restart fail2ban
Sprawdź również, czy Twój regex działa:
fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/wordpress.conf