VoIP-Server selbst hosten: Asterisk oder FreePBX
Betreiben Sie Asterisk oder FreePBX auf einem VPS: SIP-Trunks, RTP-Portbereiche und Firewall-Regeln gegen Scanner. So beginnt auch Telefonbetrug.
Was ein selbst gehosteter VoIP-Server ist
Ein selbst gehosteter VoIP-Server ist ein SIP-Server auf einem VPS, den Sie selbst verwalten. Ihre eigene Maschine leitet die Anrufe weiter und nicht ein gehosteter Telefondienst. VoIP (Voice over IP) überträgt Sprache als UDP-Pakete. SIP (Session Initiation Protocol) ist die Signalisierung, die einen Anruf aufbaut und beendet. Die Audiodaten werden nicht über SIP übertragen. Genau diese Tatsache verursacht die meisten der unten beschriebenen Probleme.
Vier Komponenten sind für ein funktionierendes System erforderlich.
- Die PBX-Software (Private Branch Exchange). Asterisk ist die übliche Wahl. Sie verwaltet die Nebenstellen und den Dialplan.
- Die Endgeräte. Tischtelefone oder Softphones registrieren sich mit einem Benutzernamen und einem Secret bei der PBX.
- Der SIP-Trunk. Ein kostenpflichtiges Konto bei einem Anbieter verbindet Sie mit dem öffentlichen Telefonnetz und stellt Ihnen echte Telefonnummern bereit.
- Der Medienpfad. RTP-Streams (Real-Time Transport Protocol) übertragen die Audiodaten über eigene UDP-Ports.
Eine selbst gehostete PBX bedeutet nicht, dass Sie auch die Telefonnummern selbst hosten. Die Nummern stammen von einem Carrier. Sie zahlen weiterhin pro Nummer und pro Minute. Sie verwalten die Anrufweiterleitung, die Voicemail, die Aufzeichnungen und die Liste der Nebenstellen selbst. Damit tragen Sie auch die Verantwortung für die Sicherheit eines Dienstes, den Angreifer aus finanziellen Gründen attackieren.
Welche Ports benötigt ein selbst gehosteter VoIP-Server?
Die SIP-Signalisierung verwendet Port 5060 für UDP und TCP sowie Port 5061 für SIP über TLS (Transport Layer Security). Diese Ports übertragen nur den Verbindungsaufbau. Das Audio jedes Anrufs wird als separater UDP-Datenstrom über einen Port aus dem RTP-Bereich übertragen. Asterisk enthält ein Beispiel-rtp.conf, das rtpstart=10000 und rtpend=20000 setzt. Die einkompilierten Standardwerte sind 5000 und 31000. Jeder Anruf belegt zwei Ports aus diesem Bereich: einen für RTP und einen für RTCP (RTP Control Protocol).
An dieser Trennung scheitern die meisten ersten Versuche. Der Anruf wird verbunden, beide Telefone zeigen ihn als angenommen an, aber keine Seite hört etwas, weil die Firewall 5060 zulässt und jedes RTP-Paket verwirft. Signalisierung und Medien sind separate Datenströme und benötigen daher separate Firewall-Regeln. Wenn diese Unterscheidung neu für Sie ist, lohnt sich eine Erklärung zu Ports und Listening-Sockets unter Linux, bevor Sie etwas öffnen.
Verkleinern Sie den Bereich, bevor Sie ihn öffnen. Zwanzigtausend Ports sind für ein kleines System deutlich mehr als nötig. Zwei Ports pro Anruf bedeuten, dass ein Bereich von zweihundert Ports gleichzeitig einhundert Anrufe abdeckt.
[general]
rtpstart=10000
rtpend=10200Wenden Sie die Einstellung mit sudo asterisk -rx "core reload" an.
Asterisk oder FreePBX installieren?
Asterisk ist die eigentliche Telefonie-Engine. Sie konfigurieren Asterisk mit Textdateien in /etc/asterisk und schreiben den Dialplan selbst. FreePBX ist eine in PHP und JavaScript geschriebene Weboberfläche, die auf Asterisk aufsetzt, diese Dateien für Sie erzeugt und Module für Voicemail und Anrufwarteschlangen bereitstellt.
Bei einem VPS ist entscheidend, wer die Maschine verwaltet. Seit August 2026 erwartet der offizielle FreePBX-17-Installer ein unverändertes Debian-12-System. Er installiert Asterisk, einen Webserver, einen Datenbankserver und PHP. Wenn auf dem Server bereits andere Dienste laufen, sind Probleme vorprogrammiert. Geben Sie FreePBX einen eigenen VPS.
wget https://github.com/FreePBX/sng_freepbx_debian_install/raw/master/sng_freepbx_debian_install.sh -O /tmp/sng_freepbx_debian_install.sh
sudo bash /tmp/sng_freepbx_debian_install.shDas Installationsprotokoll wird in /var/log/pbx/freepbx17-install.log geschrieben. Dort sollten Sie zuerst nachsehen, wenn das Skript vorzeitig abbricht.
FreePBX verwaltet die von ihm erzeugten Konfigurationsdateien. Wenn Sie pjsip.conf auf einem FreePBX-System manuell bearbeiten, ist die Änderung verschwunden, sobald die Weboberfläche diese Datei erneut schreibt. Für manuell geschriebene Konfigurationen liest FreePBX separate Dateien, deren Name _custom enthält. Diese Dateien lässt FreePBX unverändert.
Der entscheidende Unterschied ist folgender: FreePBX stellt eine Weboberfläche bereit und veröffentlicht eine Anmeldeseite für Ihre Telefonanlage im Internet. Eine unveränderte Asterisk-Installation hat überhaupt keine Weboberfläche. Jede Einstellung ist eine dokumentierte Direktive, die Sie in einer Datei lesen und in git versionieren können. Wenn Sie FreePBX installieren, beschränken Sie den Zugriff auf den Webport auf Ihre eigene Adresse oder greifen Sie über ein VPN darauf zu. Eine Administrationsoberfläche für eine Telefonanlage ist ein Ziel mit direktem Zugriff auf finanzielle Werte.
Versionshinweis, gültig im August 2026: Asterisk 22 ist die aktuelle Long-Term-Support-Version. Sie wurde im Oktober 2024 veröffentlicht und erhält bis Oktober 2028 Sicherheitsupdates. Asterisk 23 ist die Standardversion. Ubuntu 24.04 enthält Asterisk 20.6.0 im Universe-Repository.
Asterisk unter Ubuntu 24.04 installieren
Das Distributionspaket ist der schnellste Weg. Ubuntu pflegt es, und es wird automatisch unter systemd gestartet.
sudo apt update
sudo apt install -y asterisk
sudo asterisk -rx "core show version"Beim Erstellen aus dem Quellcode erhalten Sie stattdessen das aktuelle Long-Term-Support-Release.
sudo apt update
sudo apt install -y build-essential wget
cd /usr/local/src
sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz
sudo tar -xzf asterisk-22-current.tar.gz
cd asterisk-22.*
sudo contrib/scripts/install_prereq install
sudo ./configure
sudo make menuselect
sudo make -j"$(nproc)"
sudo make install
sudo make samples
sudo make config
sudo ldconfiginstall_prereq install installiert die Build-Abhängigkeiten für Ihre Distribution, und install_prereq test gibt die auszuführenden Befehle aus, ohne Änderungen vorzunehmen. make menuselect öffnet die Modulauswahl. Dort aktivieren Sie codec_opus unter „Codec Translators“. Führen Sie make samples nur bei einer frischen Installation aus, da der Befehl die Beispielkonfiguration nach /etc/asterisk schreibt. make config installiert das Init-Skript unter /etc/init.d/asterisk. systemd steuert dieses über seine SysV-Kompatibilitätsschicht, sodass sudo systemctl enable --now asterisk anschließend funktioniert.
Unabhängig vom gewählten Weg stellt sudo asterisk -rvvv eine Verbindung zum laufenden Daemon her und öffnet die CLI. Wenn Sie dort core show version ausführen, sehen Sie, was tatsächlich installiert wurde.
SIP-Trunk und eine Nebenstelle konfigurieren
PJSIP ist der SIP-Kanal-Treiber in aktuellen Asterisk-Versionen. Die Konfiguration befindet sich in /etc/asterisk/pjsip.conf und besteht aus kleinen typisierten Abschnitten, die sich gegenseitig über ihren Namen referenzieren. Abschnitte unterschiedlichen Typs dürfen denselben Namen verwenden. Deshalb heißt jeder Block unten mytrunk.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
[mytrunk]
type=registration
outbound_auth=mytrunk
server_uri=sip:sip.example.com
client_uri=sip:1234567890@sip.example.com
retry_interval=60
[mytrunk]
type=auth
auth_type=userpass
username=1234567890
password=REPLACE_WITH_A_LONG_RANDOM_SECRET
[mytrunk]
type=aor
contact=sip:sip.example.com:5060
[mytrunk]
type=endpoint
context=from-trunk
disallow=all
allow=ulaw
outbound_auth=mytrunk
aors=mytrunk
[mytrunk]
type=identify
endpoint=mytrunk
match=sip.example.comDas Objekt registration sendet den REGISTER, der dem Provider mitteilt, wohin er Ihre Anrufe zustellen soll. Über das Objekt identify wird ein vom Provider eingehender Anruf anhand der Quelladresse dieser Nebenstelle zugeordnet. Ein Provider veröffentlicht dafür normalerweise mehrere Adressen, die Sie dort eintragen müssen. Die ausgehende Registrierung und die Nebenstelle sind absichtlich getrennte Objekte: Das eine teilt dem Provider mit, wo Sie erreichbar sind, das andere legt fest, was mit den Anrufen geschieht.
Ein Tischtelefon benötigt drei weitere Objekte.
[6001]
type=endpoint
context=internal
disallow=all
allow=ulaw
auth=auth6001
aors=6001
direct_media=no
[auth6001]
type=auth
auth_type=userpass
username=6001
password=REPLACE_WITH_A_LONG_RANDOM_SECRET
[6001]
type=aor
max_contacts=1direct_media=no sorgt dafür, dass Asterisk im Medienpfad bleibt. Lassen Sie es weg, versucht Asterisk, die beiden Endpunkte RTP direkt untereinander senden zu lassen. Das schlägt fehl, wenn sich ein Telefon hinter NAT (Network Address Translation) auf einem Heimrouter befindet. Verwenden Sie niemals dasselbe Secret wie die Nebenstellennummer. Das Beispiel des Upstream-Projekts verwendet für die Nebenstelle 6001 den Wert password=6001, damit das Beispiel übersichtlich bleibt. Scanner probieren dieses Muster jedoch zuerst aus.
Der Dialplan in /etc/asterisk/extensions.conf legt fest, was jeder Context tun darf.
[internal]
exten => 6001,1,Dial(PJSIP/6001,20)
exten => _9X.,1,Dial(PJSIP/${EXTEN:1}@mytrunk,60)
[from-trunk]
exten => 1234567890,1,Dial(PJSIP/6001,20)
same => n,Hangup()Diese beiden Contexts bilden eine Sicherheitsgrenze. from-trunk verarbeitet Anrufe, die vom Provider eingehen, und kann nur die Nebenstelle 6001 klingeln lassen. Er kann das Muster _9X. nicht erreichen. Ein externer Anrufer kann daher nicht über Ihren Trunk zurück nach außen telefonieren. Wenn Sie die Contexts zusammenführen, schaffen Sie den klassischen Weg für Toll Fraud: Eine fremde Person ruft Ihre Nummer an, Ihr Dialplan wählt über Ihr Konto nach außen, und Sie bezahlen dafür.
Wenden Sie die Konfiguration an und prüfen Sie sie.
sudo asterisk -rx "pjsip reload"
sudo asterisk -rx "pjsip show registrations"
sudo asterisk -rx "pjsip show endpoints"pjsip show registrations sollte mytrunk mit dem Status Registered auflisten. Rejected bedeutet, dass der Provider Ihre Zugangsdaten abgelehnt hat. Unregistered bedeutet, dass Ihr REGISTER unbeantwortet bleibt. Prüfen Sie als Nächstes die Firewall.
Firewall-Regeln für SIP und RTP
Signalisierung und Medienverkehr erfordern eine unterschiedliche Behandlung, weil sie verschiedene Risiken mit sich bringen. Beschränken Sie Port 5060 auf die Adressen, die Ihr Provider tatsächlich verwendet, sowie auf die Netzwerke, in denen sich Ihre Telefone befinden.
sudo ufw allow proto udp from 203.0.113.10 to any port 5060
sudo ufw allow proto tcp from 203.0.113.10 to any port 5060
sudo ufw allow 10000:10200/udp
sudo ufw status verboseDen RTP-Bereich können Sie weniger stark einschränken, weil der Medienverkehr häufig von einer anderen Adresse als die Signalisierung kommt. Fragen Sie Ihren Provider nach den Subnetzen für den Medienverkehr und beschränken Sie den Zugriff darauf, sofern er diese veröffentlicht. Halten Sie den Bereich nur so groß, wie ihn Ihre verkehrsreichste Stunde erfordert. Standardrichtlinien, die Reihenfolge der Regeln und das übrige ufw-Modell werden im Grundlagenleitfaden zur ufw-Firewall für einen VPS behandelt.
Prüfen Sie auch IPv6. Wenn IPV6=no in /etc/default/ufw gesetzt ist, filtert ufw IPv6 überhaupt nicht. Ein Daemon, der an :: gebunden ist, ist dann über IPv6 erreichbar, ohne dass eine der oben genannten Regeln angewendet wird. Ports für IPv6 mit ufw öffnen erläutert die Unterschiede zwischen den beiden Protokollfamilien. Die meisten Provider stellen im Control Panel zusätzlich eine separate Netzwerk-Firewall bereit. Diese wird durchgesetzt, bevor Ihre Pakete den VPS erreichen. Daher muss ein Port an beiden Stellen geöffnet sein.
SIP-Brute-Force und Toll Fraud sind keine optionalen Probleme
Sobald Port 5060 an einer öffentlichen Adresse erreichbar ist, beginnen die Scans. Das Muster ist gleichbleibend: REGISTER- und INVITE-Anfragen von vielen Quelladressen versuchen, gängige Nebenstellennummern mit gängigen Secrets zu verwenden. Asterisk protokolliert jeden Fehler. Die Zeile hat folgende Form.
Request 'REGISTER' from '<sip:1000@198.51.100.20>' failed for '198.51.100.20:5060' (callid: 5f1a5c0d) - No matching endpoint foundDer Grund für den erforderlichen Aufwand ist finanzieller Schaden. Eine gestohlene Nebenstelle wird für teure internationale Anrufe verwendet, oft zu Premiumtarifnummern, die dem Angreifer einen Anteil auszahlen. Die Rechnung geht an Sie, weil die Anrufe Ihre Zugangsdaten verwendet haben. Der Angriff läuft mit der Geschwindigkeit des Rechners und findet meist nachts statt.
Sechs Maßnahmen sind zwingend erforderlich und keine optionale Härtung.
- Erstellen Sie niemals eine Nebenstelle, deren Secret der eigenen Nummer oder einem kurzen Wort entspricht. Erzeugen Sie ein Secret mit
openssl rand -base64 24und fügen Sie es ein. - Lassen Sie anonyme eingehende Anrufe deaktiviert. PJSIP lehnt nicht identifizierte Anrufe standardmäßig ab und akzeptiert sie nur, wenn Sie einen Endpoint mit dem Namen
anonymouserstellen. Erstellen Sie keinen solchen Endpoint. - Halten Sie den Context des Trunks von jedem Context getrennt, der ausgehende Anrufe durchführen kann, wie oben gezeigt.
- Beschränken Sie die Signalisierung anhand der Quelladresse, sowohl in ufw als auch in der Netzwerk-Firewall Ihres Providers.
- Legen Sie bei Ihrem SIP-Trunk-Provider ein Ausgabenlimit fest und deaktivieren Sie internationale Ziele, die Sie nie anrufen. Nur diese Maßnahme begrenzt den Schaden, wenn die anderen Maßnahmen versagen.
- Überwachen Sie das Asterisk-Log mit fail2ban.
Asterisk kann nach wiederholten nicht passenden Anfragen von einer Adresse außerdem ein Security Event auslösen. Der Abschnitt [global] von pjsip.conf akzeptiert unidentified_request_count, standardmäßig 5, und unidentified_request_period, standardmäßig 5 Sekunden. Zusammen bedeutet das: Fünf nicht passende Anfragen von einer Adresse innerhalb von fünf Sekunden erzeugen ein Security Event, auf das fail2ban reagieren kann.
Scanner mit fail2ban sperren
fail2ban liefert bereits eine fertig geschriebene asterisk jail mit. Sie deckt die Ports 5060 und 5061 ab, liest /var/log/asterisk/messages und verwendet standardmäßig maxretry = 10. Die Jail bleibt deaktiviert, bis Sie sie in /etc/fail2ban/jail.local aktivieren.
[asterisk]
enabled = true
maxretry = 5
findtime = 600
bantime = 86400sudo systemctl restart fail2ban
sudo fail2ban-client status asteriskEin korrektes Ergebnis führt die Logdatei der Jail und die Anzahl der derzeit gesperrten Adressen auf. Bei einem öffentlich erreichbaren Port 5060 ist diese Anzahl innerhalb eines Tages nicht mehr null. Der mitgelieferte Filter erkennt die oben genannten No matching endpoint found-Meldungen. Außerdem erkennt er Asterisks strukturierten SecurityEvent-Zeilen. Diese Ereignisse werden an einen separaten Log-Kanal geschrieben, der in /etc/asterisk/logger.conf auskommentiert ist. Aktivieren Sie ihn dort und fügen Sie die Datei in logpath der Jail ein, wenn Sie diese Ereignisse erfassen möchten.
[logfiles]
console => notice,warning,error
messages.log => notice,warning,error
security.log => securityLaden Sie den Logger mit sudo asterisk -rx "logger reload" neu. Der Filter enthält außerdem einen journalmatch für asterisk.service. Daher funktioniert ein Journal-Backend, wenn Sie keine Logdateien speichern möchten. Die Installation, die Struktur von jail.local und das Aufheben einer Sperre für eine versehentlich ausgesperrte Adresse werden im fail2ban-Leitfaden für Ubuntu 24.04 beschrieben.
Latenz und Codec-Auswahl bei einem entfernten VPS
Die Verzögerung wird durch die geografische Entfernung bestimmt und lässt sich nicht wegkonfigurieren. ITU-T G.114 empfiehlt für normale Gespräche eine Verzögerung in eine Richtung von unter 150 ms und stuft bis etwa 400 ms noch als nutzbar ein. Der Audioverkehr eines Telefons läuft zu Ihrem VPS und anschließend weiter zu Ihrem Trunk-Provider. Ein VPS in der falschen Region legt diese Strecke daher zweimal zurück. Wählen Sie einen Standort in der Nähe der Telefone oder des Providers. Wenn beides nicht am selben Ort möglich ist, sollte der VPS näher bei den Telefonen stehen, weil diese Verbindung normalerweise über das Endkundeninternet läuft und dort der Jitter am stärksten ist.
Die Codec-Auswahl bestimmt die Bandbreite pro Gespräch. Jeder Codec sendet hier alle 20 ms ein Paket. Das entspricht 50 Paketen pro Sekunde. Jedes Paket enthält zusätzlich zum Audio-Payload 40 Byte für IP-, UDP- und RTP-Header.
The data behind this chart
[
{
"label": "G.711 ulaw",
"payload_kbps": 64,
"ip_kbps": 80
},
{
"label": "G.722",
"payload_kbps": 64,
"ip_kbps": 80
},
{
"label": "Opus at 24 kbps",
"payload_kbps": 24,
"ip_kbps": 40
},
{
"label": "G.729",
"payload_kbps": 8,
"ip_kbps": 24
}
]G.711 ulaw ist bei den meisten Trunks voreingestellt. Sein Payload beträgt 64 kbps. Mit Headern benötigt ein laufendes Gespräch in jeder Richtung 80 kbps. Opus mit 24 kbps benötigt 40 kbps. G.729 reduziert den Bedarf auf 24 kbps, allerdings auf Kosten der Audioqualität und CPU-Zeit. Diese Werte sind eine Berechnung anhand der Header und keine Messwerte: Payload-Rate plus 40 Byte pro Paket bei 50 Paketen pro Sekunde. Ethernet- oder VLAN-Frames erhöhen den tatsächlichen Bedarf auf der Leitung geringfügig.
Transcoding benötigt CPU-Ressourcen. Wenn Ihre Telefone und Ihr Trunk beide ulaw unterstützen, erlauben Sie ausschließlich ulaw. Asterisk leitet den Audioverkehr dann unverändert weiter. Opus eignet sich gut für verlustbehaftete Verbindungen. Für das Transcoding zwischen Opus und G.711 ist jedoch das externe codec_opus-Modul erforderlich. Sie wählen es in make menuselect aus. Es wird standardmäßig nicht erstellt.
Was fehlschlägt und welche Meldung Sie sehen
Der Anruf wird verbunden, aber niemand hört etwas. RTP trifft nicht ein. Prüfen Sie, ob der Bereich in rtp.conf dem Bereich entspricht, den Sie in der Firewall geöffnet haben. Überwachen Sie anschließend mit sudo tcpdump -ni any udp portrange 10000-10200 den Paketverkehr, während Sie einen Anruf tätigen. Wenn überhaupt keine Pakete eintreffen, verwirft Ihre Firewall oder die Netzwerk-Firewall Ihres Providers die Pakete.
Audio nur in eine Richtung. Eine Seite sendet RTP an eine Adresse, die es nicht empfangen kann. Das ist ein Adressproblem und kein Portproblem. Wenn die öffentliche Adresse Ihres VPS direkt auf dessen Netzwerkschnittstelle liegt, ist keine NAT-Konfiguration erforderlich. Wenn der Provider dem VPS eine private Adresse mit einer 1:1-Zuordnung zu einer öffentlichen Adresse gibt, tragen Sie die öffentliche Adresse im Transport ein und geben Sie Ihren privaten Bereich in local_net an.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
local_net=10.0.0.0/8
external_media_address=198.51.100.5
external_signaling_address=198.51.100.5No matching endpoint found im Log. Die Anfrage passte anhand der IP-Adresse oder des Benutzernamens zu keinem Endpoint. Von einem Scanner ist das normal; fail2ban verarbeitet solche Anfragen. Von Ihrem eigenen Provider bedeutet es, dass der Abschnitt identify die Adresse, von der aus der Provider Sie anruft, nicht enthält.
Der Registrierungsstatus ist Rejected. Der Provider hat die Zugangsdaten in Ihrem Abschnitt auth abgelehnt. Führen Sie pjsip set logger on in der CLI aus. Überwachen Sie eine REGISTER-Anfrage und die zugehörige Antwort. Vergleichen Sie anschließend client_uri und username mit den Angaben des Providers.
Im Log ist überhaupt nichts Brauchbares zu sehen. Asterisk schreibt standardmäßig Meldungen ab der Stufe notice nach messages.log. Erhöhen Sie die Protokollierungsstufe mit core set verbose 4 und pjsip set logger on, während Sie das Problem reproduzieren. Deaktivieren Sie beide Einstellungen anschließend wieder, weil der SIP-Logger jedes Paket schreibt.
Bevor Sie die Anlage öffentlich erreichbar machen
Eine PBX ist nicht mit den anderen Diensten vergleichbar, die Sie selbst hosten. Eine fehlerhafte Webanwendung kostet Sie eine Seite. Eine fehlerhafte PBX verursacht innerhalb weniger Stunden eine Telefonrechnung, während Sie schlafen. Betreiben Sie sie auf einem VPS, der keine anderen Aufgaben übernimmt, beschränken Sie Port 5060 auf bekannte Adressen, verwenden Sie für jede Nebenstelle ein zufällig erzeugtes Secret und legen Sie ein Ausgabenlimit für das Trunk-Konto fest. Für den restlichen Server gelten die gleichen grundlegenden Anforderungen wie für jeden öffentlich erreichbaren Server. Dieser Überblick über die tatsächliche Sicherheit von VPS-Hosting beschreibt diese Anforderungen.
FAQ
Welche Ports muss ich für einen selbst gehosteten VoIP-Server öffnen?
Port 5060 für die SIP-Signalisierung über UDP und TCP, Port 5061 bei Verwendung von SIP über TLS sowie einen Bereich von UDP-Ports für RTP-Medien. Die Beispielkonfiguration von Asterisk rtp.conf verwendet 10000 bis 20000; die einkompilierten Standardwerte reichen von 5000 bis 31000. Jeder Anruf benötigt zwei Ports aus diesem Bereich. Ein Bereich mit zweihundert Ports unterstützt daher einhundert gleichzeitige Anrufe. Öffnen Sie den RTP-Bereich als UDP und beschränken Sie Port 5060 auf die Adressen Ihres Providers und Ihre eigenen Netzwerke, statt ihn für alle Quellen zu öffnen.
Sollte ich Asterisk eigenständig installieren oder FreePBX verwenden?
Installieren Sie Asterisk direkt, wenn Sie eine kleine Angriffsfläche und Konfigurationsdateien wünschen, die Sie in git verwalten können, und wenn Sie bereit sind, den Dialplan selbst zu schreiben. Installieren Sie FreePBX, wenn Sie eine GUI für Nebenstellen, Voicemail und Anrufwarteschlangen benötigen. Seit August 2026 erwartet das Installationsprogramm von FreePBX 17 ein unverändertes Debian-12-System und installiert Asterisk, einen Webserver, einen Datenbankserver und PHP. Verwenden Sie dafür daher einen eigenen VPS. FreePBX erzeugt die von ihm verwalteten Konfigurationsdateien neu. Manuelle Änderungen gehören deshalb in die _custom-Dateien.
Warum ist nach dem Verbindungsaufbau kein Audio vorhanden?
Die Signalisierung hat funktioniert, die Medienübertragung jedoch nicht. SIP hat den Anruf über Port 5060 aufgebaut. Die Audiodaten werden als separater UDP-Datenstrom an einen Port im RTP-Bereich übertragen, den etwas verwirft. Prüfen Sie, ob der Bereich in rtp.conf mit dem in Ihrer Firewall geöffneten Bereich übereinstimmt. Prüfen Sie außerdem die Netzwerkfirewall Ihres Providers und die Firewall auf dem Server. Führen Sie während eines Anrufs sudo tcpdump -ni any udp portrange 10000-10200 aus. Wenn keine Pakete angezeigt werden, werden sie blockiert, bevor sie den Server erreichen.
Wie verhindere ich SIP-Brute-Force-Angriffe und Mautbetrug?
Vergeben Sie für jede Nebenstelle ein langes, zufälliges Secret. Verwenden Sie niemals eines, das der Nebenstellennummer entspricht. Halten Sie den für Ihren Trunk verwendeten Context von jedem Context getrennt, über den ausgehende Anrufe möglich sind. Dadurch kann ein eingehender Anruf nicht über Ihr Konto wieder nach außen telefonieren. Beschränken Sie Port 5060 auf die Adressen Ihres Providers. Aktivieren Sie in fail2ban das asterisk-Jail. Es liest /var/log/asterisk/messages und sperrt die Adressen, die No matching endpoint found Fehlversuche erzeugen. Legen Sie anschließend bei Ihrem Provider ein Ausgabenlimit fest und sperren Sie nicht benötigte internationale Zielgebiete. Nur diese Maßnahme begrenzt den Schaden, wenn die übrigen Schutzmechanismen versagen.
Beeinträchtigt ein VPS in einer weit entfernten Region die Gesprächsqualität?
Ja, weil die Audiodaten zwei Strecken zurücklegen: vom Telefon zum VPS und anschließend vom VPS zum Trunk-Provider. ITU-T G.114 empfiehlt eine Verzögerung in eine Richtung von weniger als 150 ms. Ein ungünstig platzierter VPS kann einen Großteil dieses Budgets allein durch die Entfernung verbrauchen. Wählen Sie eine Region in der Nähe der Telefone, da diese Strecke meist über das Consumer-Internet läuft und dort der Jitter am höchsten ist. Die Codec-Wahl behebt keine Verzögerung. Sie ändert nur den Bandbreitenbedarf. G.729 spart Bytes, kann aber keine Strecke mit 200 ms Latenz ausgleichen.