Szukaj

Bezpieczeństwo Asteriska: Blokowanie ataków sieciowych za pomocą fail2ban

Bezpieczeństwo Asteriska: Blokowanie ataków sieciowych za pomocą fail2ban

Jeżeli zastanawiałeś się jak zabezpieczyć swojego Asteriska przed atakami sieciowymi, na przykład typu brute force, to odpowiedzią jest aplikacja fail2ban. Zadecydowanie zalecamy jej instalację i konfigurację. Jest to w zasadzie nakładka na iptables lub firewalld gdzie odbywa się zasadnicza blokada. Konfigurując fail2ban sami zdecydujemy co i jak zablokować. Działanie programu opiera się na analizie logów i wychwytywaniu na przykład nieautoryzowanych prób logowania. W naszym artykule, skupimy się na wychwytywaniu ataków na centralkę Asterisk, ale zastosowania tego narzędzia są bardzo szerokie: poprzez ochronę serwera www, strony logowania do różnych usług, po blokowanie exploitów.

Spis treści

1) Instalacja fail2ban

Wykonajmy poniższe polecenie, aby ściągnąć i zainstalować program fail2ban

				
					yum -y install fail2ban # (CentOS/Rocky)
apt -y install fail2ban # (Debian/Ubuntu)
				
			

Po kilkunastu sekundach mamy już zainstalowany nasz program. Jak pamiętamy korzysta on z analizy logów. Musimy więc w naszym asterisku dodać poziom logowania security i załadować odpowiedni moduł. 

2) Dodanie poziomu logowania: security

W tym celu edytujemy dwa pliki konfiguracyjne. Jeśli nie ładujesz modułow Asteriska automatycznie (autoload = yes), najpierw załadujemy moduł res_security_log.so . W tym celu edytujemy plik /etc/asterisk/modules.conf

				
					nano /etc/asterisk/modules.conf
				
			

W sekcji [modules] dodajemy wpis:

load = res_security_log.so

 Następnie przeładowujemy konfigurację modułów poniższym poleceniem:  (z poziomu konsoli asteriska wystarczy > module reload) 

				
					asterisk -rx 'module reload'
				
			

Teraz dodamy poziom logowania security. W tym celu edytujemy plik /etc/asterisk/logger.conf

				
					nano /etc/asterisk/logger.conf
				
			

W sekcji [logfiles] wpis:

messages => notice,warning,error

mówi nam, jakie typy zdarzeń będą przekazywane do pliku messages w katalogu logów dla Asteriska. Znajdziemy je w miejscu wskazanym zmienną astlogdir zdefiniowaną w pliku asterisk.conf. U nas to:

astlogdir => /var/log/asterisk

My chcemy do naszego pliku z logami dodać typ security więc możemy dopisać go do linijki z messages

messages => security,notice,warning,error

lub dodać osobny plik tylko do security (odkomentować lub dopisać linijkę)

security => security

Możemy też zdecydować o przekazywaniu logów typu security dodatkowo bezpośrednio na konsolę Asteriska. W tym celu zmodyfikujemy też odpowiedni wpis dodając słowo kluczowe security:

console => security, notice,warning,error

W sekcji [general] powinniśmy też odkomentować domyślny format czasu:

dateformat=%F %T ; ISO 8601 date format

Aby wprowadzone zmiany weszły w życie, musimy wydać polecenie przeładowujące loggera (z poziomu konsoli asteriska wystarczy > logger reload)

				
					asterisk -rx 'logger reload'
				
			

Po przeładowaniu loggera w konsoli asteriska warto zerknąć czy ustawienia, które wprowadziliśmy weszły w życie i widzimy zdarzenia typu security w spodziewanym formacie czasu.

3) Konfiguracja więzienia

Nie, nie zmieniamy profilu działalności! 😅 Wbrew ponuremu podtytułowi, nie będziemy wchodzić w drogę służbie więziennej w naszej okolicy. Jednak coś w tym jest, bo przecież będziemy ścigać potencjalnych przestępców, którzy będą próbowali się włamać do naszego systemu. Tak czy inaczej, twórcy tego oprogramowania wymyślili do konfiguracji nazwę jail, czyli więzienie. 

W katalogu /etc/fail2ban/filter.d/ jest lista gotowych filtrów stworzonych przez programistów omawianego rozwiązania. Filtry te wyłapują z analizowanego pliku logów podejrzane zachowania. Znajdziemy tam też plik asterisk.conf, który wykorzystamy w naszym samouczku. Zajrzyjmy teraz do kluczowego pliku /etc/fail2ban/jail.conf

				
					nano /etc/fail2ban/jail.conf
				
			

Nie jest zalecana modyfikacja tego pliku, ponieważ przy aktualizacji oprogramowania może zostać nadpisany. Dlatego stworzymy na nasze potrzeby, zgodnie z sugestią producenta nowy plik: jail.local

				
					nano /etc/fail2ban/jail.local
				
			

Stworzymy tam nasze więzienie dla potencjalnych włamywaczy do asteriska. Dodatkowo w sekcji [DEFAULT] stworzymy wpis który ochroni nas przed zbanowaniem samego siebie. Parametr ignoreip w minimalnej konfiguracji powinien zawierać Twój adres IP lub całą bezpieczną podsieć.  Można wpisać kilka takich adresów oddzielonych spacją lub przecinkiem. To bardzo ważne, bo moglibyśmy zostać odcięci od testowanej maszyny na dość długi czas. Jest on określony przez zmienną bantime. Na razie do testów damy jej małą wartość (domyślnie w sekundach), maxentry mówi po ilu powtórzeniach wpisu nastąpi blokada, a logpath wskazuje nasz plik z logami. Proponuję wkleić następujący wpis:

				
					[DEFAULT]
ignoreip = Twój_adres_IP lub bezpieczna podsieć; oddzielone spacją lub przecinkiem

[asterisk]
enabled = true
action = iptables-allports[name=ASTERISK, protocol=all]
logpath  = /var/log/asterisk/security
maxretry = 5
bantime = 60

				
			

Parametr enabled jest ustawiony na wartość true, co oznacza włączenie tej ochrony w trakcie startu lub przeładowania programu. Oprogramowanie sprawdza plik konfiguracyjny filtra, którego nazwa, jest tożsama z nazwą sekcji + rozszerzenie conf. Znajduje się on w ścieżce /etc/fail2ban/filter.d/, czyli w naszym przypadku jest to  /etc/fail2ban/filter.d/asterisk.conf W pliku tym zawarte są między innymi wzorce tekstu jakie są przeszukiwane w pliku z logami i inne dodatkowe ustawienia.

Parametr: action = iptables-allports[name=ASTERISK, protocol=all] wskazuje sposób w jaki zostaną podjęte działania zapobiegające włamaniom.  Oprogramowanie wykona akcje zawarte w pliku tożsamym z nazwą akcji + rozszerzenie .conf – tutaj iptables-allports. Ten plik i inne z akcjami są w katalogu /etc/fail2ban/action.d/,czyli w naszym przypadku jest to /etc/fail2ban/action.d/iptables-allports.conf

4) Uruchomienie i status fail2ban

Czas na uruchomienia naszej aplikacji i sprawdzenie jej statusu. Wywołaj następujące polecenia:

				
					systemctl start fail2ban # (korzystające z system.d: CentOS 7+ / Ubuntu / Debian / Rocky)
service fail2ban start # (starsze wersje Ubuntu / Debian)
chkconfig fail2ban on # (CentOS 6)
fail2ban-client status asterisk

				
			

Zobaczymy, że usługa jest uruchomiona, a więzienie czynne i na razie puste

Dodajmy jeszcze nasz nowo zainstalowany program do autostartu, aby mieć pewność, że zawsze będziemy chronieni.

				
					systemctl enable fail2ban # (korzystające z systemd: CentOS 7+ / Ubuntu / Debian / Rocky)
chkconfig fail2ban on # (Centos 6 oraz starsze wersje Rocky)
update-rc.d fail2ban defaults # (starsze wersje Ubuntu i Debian)
				
			

5) Odparcie ataku

Zasymulujemy teraz atak na naszą centralkę. Dowolnym softphone spróbuję kilka razy zalogować się do telefonu podając błędne hasło. Z poziomu konsoli CLI widać wpisy typu SECURITY z wychwytywanym przez filtr wpisem InvalidPassword. Status pokaże nam ilość prób włamania, ilość zablokowanych adresów i ich listę. Obecnie widnieje tylko jeden adres ponieważ, wciąż dobijałem się z tego samego adresu, a krótki czas banowania sprawił, że ciągle był odblokowywany automatycznie po 60 sekundach.

Jeżeli jesteśmy pewni, że działania użytkownika z pod zablokowanego adresu są niegroźne, na przykład spowodowane kilkukrotnym wpisaniem błędnego hasła, to możemy ręcznie odblokować ten adres zanim minie czas blokady.

				
					fail2ban-client set asterisk unbanip 192.168.0.12
				
			

6) Konfiguracja ochrony usługi SSH

Na podobnej zasadzie możemy włączyć ochronę usługi SSH. 

W katalogu /etc/fail2ban/filter.d/ jest  gotowy filtr  sshd.conf. Zajrzyjmy znów do pliku jail.local i dopiszmy tam drugie więzienie dla potencjalnych włamywaczy po ssh.

				
					nano /etc/fail2ban/jail.local
				
			
				
					[sshd]
enabled = true
mode = normal
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 5
bantime = 60

				
			

Zobaczmy jak teraz wygląda nasze więzienie. Zrestartujmy naszą usługę i wyświetlmy jej status. 

				
					systemctl stop fail2ban # (korzystające z system.d: CentOS 7+ / Ubuntu / Debian / Rocky)
service fail2ban stop # (starsze wersje Ubuntu / Debian)

systemctl start fail2ban # (korzystające z system.d: CentOS 7+ / Ubuntu / Debian / Rocky)
service fail2ban start # (starsze wersje Ubuntu / Debian)

fail2ban-client status asterisk

				
			

Mamy teraz już dwa gotowe i działające więzienia, więc możemy starać się o rządowe dofinansowanie 😁

Fail2ban to podstawowe narzędzie do blokowania włamywaczy, skryptów poszukujących podatności i szkodliwych robotów. Prostota działania zapewnia skuteczną ochronę i umożliwia w łatwy sposób tworzenie własnych reguł banowania. 

Jeżeli chciałbyś monitorować wszystko co dzieje się na Twojej centrali wypróbuj nasze autorskie oprogramowanie VOIPERO

Instalacja i konfiguracja zajmuje kilka minut a system jest obecnie udostępniany całkowicie za darmo.

Przeczytaj co potrafi nasz system VOIPERO w zakresie monitorowania na żywo i raportowania systemów VoIP opartych na asterisku.

Share this post

Masz pytania lub potrzebujesz oferty?

Skontaktuj się z naszym doradcą.

Popularne wpisy

Powiązane posty

Projekt wystartował!

Monitorowanie i raportowanie Twojego serwera VoIP