czwartek, 5 kwietnia 2012

Zabezpieczamy Asteriska - fail2ban

W czasach wzmożonych ataków na platformy Asterisk polegających na  próbie poprawnego zalogowania się na jakieś z dostępnych kont SIP warto zablokować taką możliwość. Ponieważ ataki bruteforce/wordlist nie są zazwyczaj groźne - no chyba że nie mamy zabezpieczeń antyfraud'owych - ale potrafią zapchać asteriska/małe łącze  dużą liczbą prób logowań.

Jak poznać czy, ktoś próbuje włamać się na konto SIP'owe?


Jeśli tylko na CLI asteriska widzisz wiele komunikatów w stylu

chan_sip.c: Registration from '' failed for 'xxx.xxx.xxx.xxx' - Wrong password
lub
chan_sip.c: Registration from '"xxx"' failed for 'xxx.xxx.xxx.xxx' - No matching peer found


Najłatwiejsza metoda zabezpieczenia się przed tego typu atakami jaka aktualnie przychodzi mi do głowy to zastosowanie fail2ban w połączeniu z iptables.

Pokażę co i jak, oprę się na ogólnie dostępnych informacjach.

Pobieramy Fail2ban a następnie po rozpakowaniu instalujemy:

python setup.py install


Oczywiście, można też skorzystać z gotowych paczek dla większości dystrybucji.

Po instalacji przechodzimy do konfiguracji. W tym celu należy stworzyć plik
/etc/fail2ban/filter.d/asterisk.conf, a następnie zapisać do niego poniższą konfigurację:

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

#before = common.conf


[Definition]
#_daemon = asterisk

failregex = NOTICE.* .*: Registration from '.*' failed for '' - Wrong password
NOTICE.* .*: Registration from '.*' failed for '' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for '' - Username/auth name mismatch
NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL
NOTICE.* .*: Registration from '.*' failed for '' - Peer is not supposed to register
NOTICE.* .*: Registration from '.*' failed for '' - ACL error (permit/deny)
NOTICE.* .*: Registration from '.*' failed for '' - Device does not match ACL
NOTICE.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*


ignoreregex =



Następnie edytując /etc/fail2ban/jail.conf dodajemy:

enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=admin@voipbilling.pl]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 259200 #Czas bana



W asterisku powinniśmy ustawić format daty do logowania w pliku
/etc/asterisk/logger.conf

[general]
dateformat=%F %T


W CLI asteriska przeładowujemy loggera:

root@asterisk:~# asterisk -rv
asterisk*CLI> logger reload


To już wszystko jeśli chodzi o proces konfiguracyjny teraz należy tylko załączyć fail2ban. Albo przez skrypt startowy np /etc/rc.d/rc.fail2ban start ewentualnie ręcznie /usr/local/bin/fail2ban-client