Netzwerkpakete unter Linux filtern mit XDP

Gekonnt aussortieren

Linux bietet viel Flexibilität, was das Filtern von Netzwerkpaketen anhand
definierbarer
Kriterien angeht. Der Berkeley Packet Filter bildet dabei die Basis, während
Nutzer mit Bytecode die Richtlinien für das Filtern von Paketen festlegen. Einen
besonders effizienten Weg, um Daten auch in leistungsfähigen Netzwerken schnell
zu filtern, bietet XDP. Wir stellen den Dreiklang vor.
Eine stillstehende IT kostet Firmen bares Geld, dabei können die Gründe für einen Ausfall vielfältig sein. Im Juni dreht sich der Schwerpunkt im ... (mehr)

Der "Berkeley Packet Filter" (BPF) ist eine im Linux-Kernel eingebaute Engine für die Ausführung spezieller Nutzerprogramme, die zunächst für FreeBSD entwickelt worden sind. Die ursprüngliche Fassung des BPF für Linux ist bereits Anfang der 1990er-Jahre in den Kernel 2.5 aufgenommen worden und diente hauptsächlich dazu, Netzwerktools wie tcpdump zu unterstützen. Dieser klassische BPF (classical BPF oder cBPF) kennt nur einen sehr eingeschränkten Befehlssatz speziell für die Auswertung beziehungsweise das Filtern von Netzwerkpaketen. Werkzeuge im Userspace können dafür jederzeit passenden Assembler-Code generieren und einfach in die BPF-Engine im laufenden Kernel zur Ausführung schieben. Das injizierte Programm wird dann dort immer wieder über jedes eintreffende Paket ausgeführt.

Ein so im Kernel angesetzter Paketfilter kann somit direkt im Inneren des Systems arbeiten und Pakete aussortieren, ohne dass diese zunächst aufwendig in den Userspace gebracht werden, dort selektiert und dann auch wieder zurückgeführt werden müssen. Das bringt für den Bearbeitungs- beziehungsweise Filterdurchsatz einen deutlichen Geschwindigkeitsvorsprung mit sich. Seit 2014 (Kernel 3.15) ist der BPF im Linux-Kernel schrittweise weiter ausgebaut worden, und die moderne Fassung wird gegenüber der originalen Spezifikation mittlerweile als "extended" BPF (eBPF) bezeichnet oder gegenüber dem cBPF auch einfach nur "BPF" genannt. Klassischer BPF-Code, wie derjenige von tcpdump (den Sie mit "-d" ausgeben), ist aber weiterhin lauffähig und wird im Kernel automatisch in modernere eBPF-Instruktionen übersetzt.

Erweiterter Paketfilter eBPF

Der moderne Berkeley Packet Filter bietet einen wesentlich erweiterten und universellen Befehlssatz und kann auch anderen Zwecken dienen als nur dem Filtern von Paketen. Der bereits für den cBPF im Kernel eingebaute

...

Der komplette Artikel ist nur für Abonnenten des ADMIN Archiv-Abos verfügbar.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019