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.