Eine Firewall bildet zwar die erste Schutzschicht und beschränkt den Zugriff auf definierte Ports und IP-Bereiche. Dennoch ist es essenziell, den Asterisk-Server selbst weiter abzusichern, weil:
Diese Punkte zeigen, dass zwar eine vorgeschaltete Firewall sehr wichtig ist, aber kann kein Allheilmittel sein. Die Sicherheit wird erst durch mehrere aufeinander abgestimmte Schutzmechanismen robust und zuverlässig. Der Schutz auf dem Asterisk-Server ist daher unerlässlich, um den Betrieb sicher und störungsfrei zu gewährleisten. Egal, ob das wie hier ein Raspberry Pi ist, eine Virtual Machine intern oder in einer Cloud oder ein einzelner Bare Metal Server im Internet.
Deshalb wird hier eine solide Firewall mittel des UFW-Tools auf Basis von IPTables gezeigt.
Wir benutzen zur leichteren Konfiguration der IPTables-Regeln das Programm UFW (Uncomplicated Firewall), das wie folgt installiert wird.
~# apt-get update
~# apt install -y ufw
Zuerst sichern wir uns die Default-Einstellungen auf der Firewall.
Die passenden Rules dazu:
~# ufw default deny incoming
~# ufw default allow outgoing
und
~# ufw allow from any to any port 5060 proto udp comment ‘Allow SIP signaling from all IPs (UDP 5060)’
~# ufw allow from any to any port 10000:20000 proto udp comment ‘Allow RTP media streams from all IPs (UDP 10000-20000)’
~# ufw allow from 192.168.0.0/16 to any port 80 proto tcp comment 'Allow HTTP from internal hosts'
~# ufw allow from 192.168.0.0/16 to any port 443 proto tcp comment 'Allow HTTPS from internal host's
~# ufw allow from 192.168.0.0/16 to any port 22 proto tcp comment ‘Allow SSH from internal hosts’
Statt der eben gemachten Regeln könnte man auch strenger vorgehen, wie hier am Beispiel der Deutschen Telekom gezeigt. Man müsste also nur die IP-Adressen seines Providers einsetzen.
~# ufw allow from 87.128.0.0/11 to any port 5060 proto udp comment 'Allow SIP signaling from Telekom SIP servers (UDP 5060)'
~# ufw allow from 217.0.0.0/13 to any port 5060 proto udp comment ‘Allow SIP signaling from Telekom SIP servers (UDP 5060)’
~# ufw allow from 87.128.0.0/11 to any port 10000:20000 proto udp comment 'Allow RTP media streams from Telekom IP ranges (UDP 10000-20000)'
~# ufw allow from 217.0.0.0/13 to any port 10000:20000 proto udp comment ‘Allow RTP media streams from Telekom IP ranges (UDP 10000-20000)’
Zu beachten ist:
Diese Beschränkung auf den eigenen Telefonie-Provider hatte bei mir zur Folge, dass eingehende Telefonate wie gewünscht funktionierten, ausgehende zwar kurz eine Verbindung zur Gegenseite aufbauten. Einen Ton konnte man in der Verbindung nicht hören, sondern die Verbindung brach regelmässig zusammen. Deshalb empfiehlt sich hier die Version mit “from any to any port”. Die Absicherung gegen ungewollte Zugriffe sollte stattdessen über ergänzende Maßnahmen wie Fail2ban mit SIP-spezifischen Filtern erfolgen. Dies schützt effektiv vor Brute-Force-Angriffen oder Scans auf Port 5060, ohne legitimen Traffic einzuschränken.
Abschließend wird die Firewall gestartet.
~# ufw enable
~# ufw status verbose
Oder sofern sie bereits aktiv ist, werden die Regel neugeladen mit
~# ufw reload
~# ufw status verbose
Somit ist auch Ihr Asterisk grundsolide abgesichert.
Wollen Sie auch Angriffe abwehren, so geht das sehr praktikabel mit Fail2ban. Das wird installiert mit
~# apt -y install fail2ban
Anschließend wird eine /etc/fail2ban/jail.local
angelegt und befüllt.
~# vi /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/24
ignorecommand =
bantime = 3600
findtime = 600
maxretry = 5
maxmatches = %(maxretry)s
action = %(action_mwl)s
destemail = fail2ban@example.tld
sender = asterisk@example.tld
mta = sendmail
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 3600
[asterisk]
enabled = true
filter = asterisk
port = 5060,5061,10000:20000
protocol = udp,tcp
logpath = /var/log/asterisk/full
maxretry = 5
findtime = 600
bantime = 3600
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
bantime = 7d
findtime = 1d
maxretry = 5
Die Filter für asterisk
und sshd
respektive recidive
liegen unter /etc/fail2ban/filter.d/
. Wobei die Jail recidive
überwacht, welche IPs schon öfter von Fail2Ban generell gebannt wurden (also „Wiederholungstäter“). Und die Angaben zum Mailversand in [DEFAULT]
sind nur wirksam, wenn auch Ihrem Asterisk ein Mail-Client einrichtet ist. Was aber anzunehmen ist, da sonst der Versand der Voicemail-Nachrichten per Mail nicht funktionieren würde.
~# systemctl restart fail2ban.service
~# systemctl status fail2ban.service
startet den Fail2Ban. Und die Jails kann man sich so anzeigen lassen.
~# fail2ban-client status
~# fail2ban-client status sshd
~# fail2ban-client status asterisk
Somit ist der Asterisk absolut solide grundabgesichert. Je nachdem, welche Services und damit Ports offen sein sollen, lässt sich das auch in der Firewall als auch mit Fail2ban absichern.