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)