UDP Idle-timer für VoIP anpassen

Zuletzt aktualisiert: 22.11.2023

Manche VoIP Provider verlangen auf den Firewalls, welche den SIP Traffic routen, eine Anpassung des UDP Idle-timers.

Theoretisch gibt es im UDP (User Datagram Protocol) keine Sessions, da es sich um ein verbindungsloses Protokoll handelt. Der Absender eines UDP Pakets versendet dieses, ohne eine Rückmeldung über dessen Verbleib zu erhalten. Der Empfänger des Pakets wird dem Absender – im Gegensatz zu TCP – keine Empfangsbestätigung zukommen lassen.

Für Firewalls stellen diese “Stateless” Pakete eine Herausforderung dar. Die Firewall muss jedes einzelne UDP Paket, welches auf einem Port eingeht, gegen die Firewall Policies prüfen und entsprechend weiterverarbeiten. Bei wenig Verkehr stellt dies kein Problem dar. Sobald die Anzahl Pakete jedoch ansteigt, steigt auch die CPU Auslastung der Firewall an. Denn nach wie vor muss für jedes Paket eine eigene Firewall-Entscheidung getroffen werden.

Die Firewall Hersteller haben sich für dieses Problem daher einen cleveren Workaround einfallen lassen. Die Pakete werden in logische “Sessions” zusammengefasst. Diese Sessions sind für die Ziel- und Quellhosts transparent. Die Firewall teilt alle eingehenden UDP Pakete mit übereinstimmenden Parametern (selber Quell- und Zielport sowie Quell- und Zielhost) in eine logische Session ein. Sessions müssen in der Regel nur einmal gegen die Firewall Policies geprüft werden, nämlich beim ersten Paket der künstlichen “Session”.

Dank dieser logischen Sessions, welche das FortiGate selbst erstellt, kann die CPU Auslastung durch UDP Pakete massiv minimiert werden. Und auch eine Auslagerung auf den NP (Netzwerkprozessor) des FortiGates ist dank der Zugehörigkeit zu einer Session auf einmal möglich.

Im VoIP Umfeld kommen diese Mechanismen ebenfalls zum Einsatz. Dort kann ein Time out, wie es bei TCP Sessions verwendet wird, aber negative Folgeerscheinungen verursachen. So können Gespräche mit längeren Pausen (vermitteln, weiterleiten, …) unterbrochen werden, weil die entsprechenden Pakete von der Firewall verworfen werden (Session nicht mehr vorhanden -> Antwort-Pakete von WAN nach LAN werden verworfen).

Um dies zu verhindern, kann der UDP Idle-timer erhöht werden. Dies geht auf dem FortiGate auf verschiedene Weisen. In den nachfolgenden Beispielen setzen wir den UDP Timeout auf 500 Sekunden:

Selbstverständlich sind Werte wie beispielsweise die UDP Ports den vom Provider vorgeschlagenen Werten an zu passen.


Global

  • Betrifft alle UDP Sessions
  • Kann wie folgt konfiguriert werden:
config system global
   set udp-idle-timer 500
end

Pro Port

  • Betrifft alle Sessions über den Port
  • Kann wie folgt konfiguriert werden:
config sys session-ttl
   config port
      edit 1
         set protocol 17
         set timeout 500
         set start-port 5060
         set end-port 5060
      next
   end
end

Pro Service Definition (Port/Portrange)

  • Betrifft alle UDP Sessions pro Port
  • Kann wie folgt konfiguriert werden:
config firewall service custom
   edit "SIP_Port"
   set protocol TCP/UDP/SCTP
   set udp-portrange 5060-5060
   set udp-idle-timer 500
   next
end

Pro Firewall Policy

  • Betrifft alle Sessions pro Firewall Policy
  • Kann wie folgt konfiguriert werden:
config firewall policy
   edit 4
      set session-ttl 500
   next
end

Allgemeine Hinweise

Selbstverständlich sind Werte wie beispielsweise die UDP Ports den vom Provider vorgeschlagenen Werten an zu passen.

Auf Firewalls bevorzugen wir grundsätzlich immer die Konfiguration, welche weniger Angriffsfläche bietet. Daher ist die Version “pro Service Definition” oder “pro Port” zu bevorzugen, da so nicht alle UDP Sessions von der Änderung betroffen sind.

Ein kurzes “Achtung” zur folgenden Prozedur: Das Löschen der Sessions kann bestehende Verbindungen unterbrechen und daher zu kurzfristigen Unterbrüchen führen!

Nachdem die betroffenen Sessions mit den Befehlen

diagnose sys session filter clear
diagnose sys session filter proto 17
diagnose sys session filter dport 5060
diagnose sys session clear

gelöscht wurden, können wir in der Session Table sehen, dass die neue Idle-timer Einstellung übernommen wurde.

Die Session-Tabelle kann mit dem Befehl

diagnose sys session list

ausgegeben werden. In der Ausgabe ist der neue Wert unter dem Parameter leider nicht wie zu erwarten “timeout” zu finden. Dieser Wert kann nur als Annäherungswert aus dem “expire” Wert ermittelt werden:

session info: proto=17 proto_state=01 duration=2 expire=498 timeout=0 flags=00000000 sockflag=00000000 sockport=0 av_idx=0 use=3

Der Standardwert des globalen udp-idle-timers ist übrigens 180 Sekunden. Der Standardwert für den Timer in der Service Definition ist 0, was den Wert des globalen Timers übernimmt.

4 thoughts on “UDP Idle-timer für VoIP anpassen

  1. ed harris Reply

    normalerweise verwenden wir einen udp timeout von 2 sekunden, wir hatten schon mehrmals den Fall, dass uns sonst ein Burst die Sessions and sie limite gebracht hatte.

    bei welchen produkten wird eine Erhöhung wirklich benötigt?

    PS: Wie immer ein toller Beitrag

    • vla Post authorReply

      Guten Tag Ed
      Besten Dank für Dein Feedback.
      Es gibt diverse Telefonie Provider, welche für die VoIP Telefonie derartige Anpassungen benötigen. Die Provider haben dies jeweils in den Installationsanleitungen oder Datenblättern vermerkt.
      Wie im Artikel beschrieben empfehlen wir, die Einstellungen so restriktiv wie möglich an zu wenden. So bleibt die Angriffsfläche auf die Firewall klein. In der Regel reicht es auch, dieses Setting nur für Verbindungen von der Telefonanlage zum Provider zu setzen.
      Freundliche Grüsse
      BOLL Engineering AG

  2. friday Reply

    Danke für den tollen Beitrag. Etwas klugscheisserei von meiner Seite, mann kann beim session filter nicht mehr port setzen, muss s oder dport definieren: diagnose sys session filter dport 5060

    • vla Post authorReply

      Guten Tag friday
      Besten Dank für die Ergänzung. Ich habe dies entsprechend angepasst, damit der Artikel auch aktuell bleibt.
      Freundliche Grüsse,
      BOLL Engineering AG

Leave a Reply

Your email address will not be published. Required fields are marked *