SIP und RTP sind Protokolle die unter anderem bei VoIP zum Einsatz kommen und auf UDP basieren. Dabei erfolgt die komplette Anrufsignalisierung über SIP und der Transport der eigentlichen Gesprächs- bzw. Video-Daten über RTP. Sind die verwendeten Ports bei SIP im Vorfeld klar definiert werden die Ports zur Kommunikation über RTP bei jedem Anruf neu ausgehandelt. Probleme entstehen dabei nur, wenn alle UDP Ports in der Firewall gesperrt sind und nur für sehr vereinzelte Ports Ausnahmen gemacht werden sollen. Genau an dieser Stelle kommt SIP-Inspection zum Einsatz.
SIP-Inspection allgemein
Im ersten Schritt soll Firma A als Beispiel dienen. Firma A besitzt ein paar Computer und ein paar SIP-Telefone. Alle Geräte besitzen eine öffentliche IP-Adresse und sind über eine zentrale Firewall ans Internet angeschlossen. Zum Telefonieren müssen sich die Angestellten mit einem externen Anbieter verbinden.
Die Firewall besitzt zwei Netzwerkkarten eth0(intern) und eth1(extern). Für die Kommunikation mit der Außenwelt sind nur Verbindungen von innen nach außen erlaubt. Dabei ist TCP komplett gestattet, jedoch ist bei UDP nur der Port 5060 für den SIP Verkehr geöffnet. Als IPTables Regeln könnte dies Szenario wie folgt aussehen.
$ echo "1" > /proc/sys/net/ipv4/ip_forward
$ iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
$ iptables -A FORWARD -i eth0 -o eth1 -p tcp -m state --state NEW -j ACCEPT
$ iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 5060 -m state --state NEW -j ACCEPT
Nun sollten sich die Telefone ohne Probleme bei dem externen Anbieter
registrieren können. Jedoch werden im Moment noch alle Gesprächsdaten
von der Firewall geblockt. Genau an dieser Stelle kommt SIP-Inspection
zum Einsatz. Diese kann mit dem Laden des Kernel-Moduls nf_conntrack_sip
geladen und aktiviert werden. Dies könnte wie folgt aussehen.
$ modprobe nf_conntrack_sip
War dies erfolgreich werden im Anschluss alle UDP Pakete an Port 5060 eines externen Servers betrachtet und analysiert. Wird dabei ein SIP Paket erkannt, werden dynamisch weitere UDP Ports für den RTP Datenstrom geöffnet bzw. nach Beendigung des Gesprächs wieder geschlossen.
Achtung: Bestand schon eine SIP Verbindung zum externen Server bevor SIP-Inspection aktiviert wurde, so muss diese Verbindung neu aufgebaut werden, damit die Firewall nach der Aktivierung die Möglichkeit hat den SIP-Verkehr zu erkennen.
SIP-Inspection und NAT
Ein weiteres sehr interessantes Kernel-Modul ist nf_nat_sip. Dieses kann
in Kombination mit nf_conntrack_sip
zum Einsatz kommen. Für die weitere
Betrachtung soll Firma B dienen. Diese besitzt fast die gleiche
Infrastruktur wie Firma A, jedoch besitzt sie nur eine externe
IP-Adresse. Damit trotzdem alle Mitarbeiter auf das externe Netz
zugreifen können kommt NAT zum Einsatz. Um auch jetzt Telefonate zu
ermöglichen müsste jedes Telefon für die NAT-Nutzung konfiguriert
werden. Dies ist jedoch relativ aufwändig. Zusätzlich kommt es auch zu
Problemen mit der SIP-Inspection.
Abhilfe und Erleichterung schafft jedoch das schon genannte nf_nat_sip Kernel Modul. Nach dessen Aktivierung, die wie folgt aussehen könnte.
$ modprobe nf_nat_sip
Sind weitere Einstellungen an Telefon und Firewall nicht mehr notwendig,
da nf_nat_sip
die SIP Pakete beim passieren der Firewall entsprechend
umschreibt.
Links
- IPTables auf Netfilter.org (englisch)
- IPTables auf Wikipedia.org (deutsch)
- SIP auf Wikipedia.org (deutsch)
- RTP auf Wikipedia.org (deutsch)