We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Linux Paketfiltering reloaded

00:00

Formal Metadata

Title
Linux Paketfiltering reloaded
Title of Series
Number of Parts
94
Author
License
CC Attribution 4.0 International:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Der Einzug von Netfilter in den Kernel, ist eine Weile her. Netfilter und seine Userland-Tools ip(6)tables (u.a.) sind seit 2001 im Kernel und damit erwachsen. In der Zwischenzeit haben neue Technologien Einzug in das Linux-Ökosystem gehalten; iptables wird weiterhin eingesetzt. Iptables kann nicht nur filtern: über Features wie Conntrack und NAT wird aus dem Leben berichtet. Es wird gezeigt, was iptables sonst noch für Dich tun kann und wie man sonst noch Pakete unter Linux filtern kann. Der Einzug von Netfilter in den Kernel, ist eine Weile her. Netfilter und seine Userland-Tools ip(6)tables (u.a.) sind seit 2001 im Kernel und damit erwachsen. In der Zwischenzeit haben neue Technologien Einzug in das Linux-Ökosystem gehalten; iptables wird weiterhin eingesetzt. Es hat sich auch aufgrund seiner Vielseitigkeit von einer Paketfilterimplementierung zu einem unterstützendem Werkzeug für Anwendungen wie Routing, NAT, Application-Level-Proxying, Deep Packet Inspection (DPI), Traffic Shaping und vielem mehr entwickelt. Dieser praxisorientierte Vortrag wird Möglichkeiten des Paketfilterns mit Linux behandeln. Schwerpunkte sind u.a. praktische und esoterische Iptables-Regeln und Targets. Anhand von realen Beispielen wird der Aufbau von Regelwerken aufgezeigt. Es entstehen schnell große Regelsets. Tipps für das Regelmanagement: wie man der Herr der Regeln wird. Iptables kann nicht nur filtern: über Features wie Conntrack und NAT wird aus dem Leben berichtet. Es wird gezeigt, was iptables sonst noch für Dich tun kann und wie man sonst noch Pakete unter Linux filtern kann. Hilfreiches Vorwissen: * basic network knowledge * basic knowledge of linux networking tools
LINUXHTTPPoint cloudCONSULTANT <Datenbank>Terminal equipmentXMLUMLLecture/ConferenceComputer animation
Computing platformSystem of linear equationsService (economics)ProviderPoint cloudComponent-based software engineeringSequelSet (mathematics)IP addressStatement (computer science)Table (information)CalculationComputer animation
Component-based software engineeringCalculationBoom (sailing)Generating functionAPITraffic shapingSet (mathematics)Firewall (computing)Computer animationLecture/Conference
Link (knot theory)Core dumpSSHDigital filterLöschen <Datenverarbeitung>Device driverMainframe computerComputer animationLecture/Conference
IptablesICMPoutputMainframe computerDebuggerJavaScriptWeb-AnwendungComputer animationLecture/Conference
IptablesICMPMainframe computerComputer animationLecture/Conference
IptablesICMPDebuggerCodeScripting languageFRAMEWORK <Programm>Mainframe computerCalculationPublic key certificateDisk read-and-write headProxy serverDialectHTTPDebuggerMobile appSet (mathematics)MAX <Programm>Uniformer RaumSSHComputer animation
IptablesFRAMEWORK <Programm>CodeScripting languageFRAMEWORK <Programm>ZahlLink (knot theory)Kernel (computing)Computer animationLecture/Conference
CodeScripting languageFRAMEWORK <Programm>IptablesSet (mathematics)Atomic nucleusWEBIP addressCubeComputer animationLecture/Conference
CodeScripting languageVideo trackingKernel (computing)IptablesService (economics)Computer animationLecture/ConferenceMeeting/Interview
RSS <Informatik>MathematicsComputer animation
RSS <Informatik>EASY <Programm>HTTPSSHoutputIptablesSet (mathematics)Set (mathematics)IP addressComputer animation
outputEASY <Programm>HTTPSSHIptablesLoginComputer animation
EASY <Programm>HTTPSSHIptablesDrop (liquid)Bus (computing)MySQLComputer animation
UDP <Protokoll>RAW-FormatIptablesGraphical user interfaceMainframe computerDigital filterWEBLecture/ConferenceComputer animation
TARGETS <Programm>Mobile appComputer data loggingAPIIndexRoute of administrationMainframe computerLink (knot theory)ZahlHTTPIP addressComputer animation
Mobile appComputer data loggingTARGETS <Programm>Debian GNU/LINUXIptablesMainframe computeriPadError messageIP addressHTTPComputer animation
NetzwerkschichtSet (mathematics)Large eddy simulationDigital filterComputer animation
LDL <Programmiersprache>outputLimit (category theory)Computer animationSource code
ICMPoutputTypHydraulic jumpSupport vector machineLecture/ConferenceSource code
Computer animationLecture/Conference
AtomizitätLink (knot theory)BASICRun-time systemComputer animation
Structural loadMechanism designBefehlsprozessorComputer animation
Computer animation
CodeCVS <Programm>Computer animation
Computer hardwareLecture/ConferenceComputer animation
Computer animation
Hydraulic jumpoutputTypSource codeComputer animation
Source codeComputer animation
Source codeComputer animation
Source code
Source codeJSONComputer animation
CLOU <Programm>World Wide WebECCE <Programm>PHPLecture/ConferenceComputer animation
HTTPComputer animation
openSUSELecture/ConferenceMeeting/InterviewXMLComputer animation
Transcript: German(auto-generated)
für den Stream, der gerade noch läuft. Ich wurde gefragt. Ja, ich war zu langsam.
Oh, es sind doch noch Leute da, die das interessiert. Scheiße. Du hast es angeboten. Ja, man ist ja nett. So, ich denke, wir können jetzt weitermachen. Du hast drei Beispiele. Und du sagtest, eine Viertelstunde wollen wir es darauf begrenzen. Ja, würde ich sagen.
Wir sagen dir Bescheid. Jawohl. Das eine hatte ich eben schon gezeigt. Das wollte ich einmal praktisch zeigen, weil das glaubt einem keiner. Weil TC ist so ein etwas stiefmütterlich behandeltes Tool. Was man dafür tun muss, ich habe hier irgendwo zwei Terminals auf. Ich mache erst mal dieses Terminal zu.
Und da haben wir... Warum sind da Sachen installiert worden? Ach so. Und ich glaube, ich muss die Schrift vor euch größer machen.
Ist das beides mal ungefähr lesbar? Hervorragend. Sieht gut aus. Mist, ich habe noch verschiedene Taps.
Ja, ich habe es halt angeboten. Ich bin selber schuld. Erst mal gucken, dass ich wirklich nichts mehr hier in meinen Bastelumgebungen habe. Ja, sehr schön.
Auch hier ist es leer. Also iptables-s ist auch ein cooles Kommando, weil das einem alles aus der Tabelle auswirft. Auch wenn das bald der Vergangenheit angehört, ist es immer noch ein cooles Kommando. So, dann...
Jetzt haben wir hier die... Ich habe mir die Befehle mal aufgeschrieben, weil dann geht es schneller. Wir haben hier einen Rechner oder zwei Rechner, die nebeneinander liegen. Die haben einerseits diese Adresse. Und auf dieser Seite haben wir diese Adresse.
Und das heißt, ich könnte einfach mal einen Ping laufen lassen. Indem ich von dem einen Rechner den anderen pinge, aber ohne die Slash 24. Funktioniert, alles smooth. Und weil das ja so spannend ist, kann man jetzt hingehen und sagen, ich habe da mal was schonmal vorbereitet und zwar den...
Wie blocke ich denn ICMP? Das sieht dann so aus, das ist ein ähnliches Filterset, was ihr eben gesehen habt. Und das... Was muss ich tun? Ich muss erstmal eine sogenannte Cueing Disziplin mit TC erzeugen.
TC baut Bäume aus Traffic auf, quasi wie der Traffic zu behandeln ist. Und ich muss irgendwie sagen, da ist ein Hook, wo ich eine Regel dran schmeißen kann. Ob das jetzt eine Traffic Shaping Regel ist oder eine Filterregel. Und das ist das erste, was ich zu erzeugen habe. Das ist dieser Befehl.
Indem ich... Könnt ihr das lesen? Ist das lesbar? Gut. Oh, die existiert sogar schon. Sehr gut, dann brauche ich sie nicht mehr erzeugen. Und dann kann ich quasi in der zweiten Zeile dieses Fragment quasi an das Interface kleben. Wenn ich das mache, dann müsste ja hier drüben irgendwann mal nichts mehr passieren.
Oh, Wunder. Also TC kann man auch als obskure Firewall verwenden, falls ihr mal Kollegen ärgern wollt. Oder sinnvoll verwenden möchtet. Das funktioniert auch für SSH. Das Beispiel würde ich mir sparen, aufgrund von Zeit.
Also das funktioniert auch für relativ komplexe Regelsets. Weil mit TCP Dump kann man ja relativ komplexes Filter bauen. Ich gucke an folgende Positionen in diesem IP-Paket oder IPv6-Paket. Ich gucke, ob das 42 ist und dann handele dementsprechend.
Warte kurz. Dieses BPF-Fall wird jetzt wirklich in die Netzwerk-Hardware-Karte geladen und da ausgeführt? Nein, es wird in diesem Fall nicht in die Netzwerk-Hardware getan. Weil wir reden hier noch nicht von Express-Data-Pass oder BP-Filter, sondern wir reden von TC.
Diese Filterregeln sind im Prinzip das, was TCP Dump auch verwendet. Und zwar ein BPF-Interpreter, der an Interfaces geklebt werden kann. Und in diesem Fall ist es noch nicht hardwarebeschleunigt. Das ist aber hervorragend. Ich mag meine Leute.
Auf jeden Fall wird das jetzt über den Treiber an das Interface geklebt. Aber es ist nicht auf der Hardware gelandet. Das kann TC noch nicht. Gut. Das Löschen ist ein bisschen schwieriger. Man kann sich auch anschauen, wie das denn ausschaut.
Also das ist das Regel-Set, was da gerade... Ich mache da mal den Bildschirm etwas leer und dann wiederholen wir den Befehl. Das ist quasi das Regel-Set, was durch das TC-Regel-Set, was da dran gekommen ist. Es ist nicht so schön lesbar wie IP-Tables und NF-Tables. Deswegen ist das wahrscheinlich auch ein bisschen stiefmütterlich zu behandeln. Oder wird das ein bisschen stiefmütterlich behandelt.
Aber man kann damit filtern. Und das war der Proof, den ich hier eigentlich zeigen wollte, weil sonst einem keiner glaubt. Gut. Zweites Beispiel. Local Traffic Redirection fürs Debugging. Ihr habt eine Web-Anwendung.
Und die tut nicht das, was sie soll. Beziehungsweise ihr wollt wissen, ist es nicht eure Web-Anwendung, sondern ihr wollt sie euch genauer anschauen. Aus Gründen. Okay, ja, es gibt die Web-Developer-Tools in den meisten Browsern, die einem ein bisschen dabei helfen, JavaScript zu debuggen. Aber was passiert denn wirklich auf der Line? Dafür gibt es ein Tool, das nennt sich Mittenproxy.
Da habe ich aber gerade ein Problem, dass ich den in der Version, die ich gerade per Pip gezogen habe, nicht zum Fliegen kriege. Aber es geht in diesem Fall um die Idea. Also, wie ich das mal gemacht habe, ist quasi mit dieser Befehlsteile. Aber das, was mir Pip gerade nachzieht, weil Mittenproxy sollte man aus Pip ziehen, weil dann ist der aktuelle Laund funktioniert.
Oder auch nicht. Genau, was man dann macht, man muss quasi wieder hier hingehen. Jetzt muss ich erst mal das Regel-Set wieder töten, weil sonst kommt mir das irgendwie in die Quere.
Da, jetzt müsste das Pingen auch wieder gehen. Deswegen brauchte ich auch eben meine zwei Taps. Jetzt haben wir nämlich nur noch einen Rechner, weil es geht hier in diesem Fall um eine lokale Applikation, die irgendwas tut.
Ich freu mich immer, wenn ein Plan funktioniert. Ich kann mit IP-Tables in der NAT-Tabelle auf dem Output, weil meine Applikation läuft ja auf dem Host gerade,
eine Regel generieren, die alle TCP-Pakete annimmt für Port 80 und sagen, hey, ihr verlasst gar nicht den Host, sondern ihr fallt lokal auf diesen Host auf Port 8080. Okay, ich wechsle jetzt einmal das Fenster. Ich kann jetzt hier ein VGET nach Heise machen.
Vielleicht sollte ich nur minus vier machen. Ich glaube, kann das VGET? Ja, kann es. Ah, ups, da stehen doch die Regeln drin, also ich brauch sie nicht mehr eintragen.
Das heißt, diese Regel hätte ich eingepflegt, quasi die vorletzte Regel. Und wenn ich diese entferne, ich mach einfach mal dieses Regel-Set, ich weiß ja, wie ich es wieder erzeugen kann, mach ich mal leer. Da ist nichts mehr drin. Dann könnte ich jetzt rein theoretisch, wenn alles gut funktioniert, die Index-HTML von Heise abholen.
Funktioniert super. Warum hat das eben nicht funktioniert? Hat jemand eine Idee? Ich meine, ihr seid jetzt zum Mitdenken hier. Dein lokaler Rechner hat auf 80 ist 80 nicht gehört, wo du ihn umgeleitet hast. Richtig. Was einem natürlich beim Debugging interessiert ist die Header.
Da kann man ein bisschen mit dem Proxy rumspielen, weil der hat eine wunderschöne Curses-Oberfläche, wo er einem anzeigt, welche Requests gerade durchgehen. Man kann das natürlich auch mit Netcat machen. Und das ist natürlich immer so eine schwierige Sache, weil da gibt es so viele Dialekte von. Der lokale Dialekt müsste der hier sein.
Hervorragend. Jetzt muss ich nur leider das Fenster wechseln. Jetzt läuft hier Netcat. Ich mache mal ein bisschen Space. Dann sieht man genauer, was passiert.
Und dann mache ich hier mal den Weget minus vier auf Heise. Minus vier deswegen, weil ich gerade nur IP-Tables V4-Regeln angemacht habe, benutzt habe. V6 funktioniert das analog, wirklich. So, jetzt. Ich möchte eine Prophezeiung abgeben.
Ja, hervorragend. Es gibt Leute, die aufpassen. Ich glaube, wir nehmen nut in den Output für TCP für Port 80 nach Port 8080. Ja, nehmen wir die doch. So, irgendwas passiert.
Es ist sehr langsam, warum auch immer. Gucken wir doch mal ins andere Fenster. Oh, da ist der HTTP-Header, aber der Netcat antwortet nicht. Oder muss ich hier noch? Okay, ich spreche HTTP nicht flüssig.
Was mit dem Proxy einem hier ermöglicht, ist quasi nicht per Netcat hier zu zeigen, was die Header sind, sondern man hätte dann die Möglichkeit, auch noch die Datas zu interspekten bzw. Regeln drauf zu setzen auf HTTP-Treffik, den er dann quasi mangelt und irgendwas damit macht. Ich habe gehört, dass irgendwelche Augmented Reality Games, die irgendwann
mal veröffentlicht worden sind, unter anderem damit gedebugged worden sind. Ich glaube, Pokémon oder Ingress. Auf jeden Fall, man kann das damit. Bei HTTPS-Verbindungen hat man immer noch das Problem mit den Zertifikaten. Aber manchmal kann man auch drum herum arbeiten, wenn man die Anwendung patcht, die man sich anschauen will
oder sagen soll, sie soll Zertifikate, die ungültig sind, ignorieren. Gut, das war Beispiel 2. Wie viel Zeit habe ich noch? So, dann habe ich noch TC in der Network-Emulator. Weil TC ist cool.
Ich glaube, das spare ich mir jetzt einfach. Also ich habe den IP-Tables-Probability-Match vorgestellt, mit dem man Pakete quasi zu einer gewissen Wahrscheinlichkeit matchen lassen kann oder nicht. Das gibt man dann mit einer Zahl zwischen 0 und 1 an, wie das bei Prozent üblich ist.
Oder man macht das mit TC. Man nimmt eine Queuing-Disziplin, fügt sie ETH 0 hinzu und nutzt den Network-Emulator und sagt, bitte verliere 10% der Pakete. Das ist cool, um Verbindungen zu testen. Deswegen habe ich diesen Link hier beigelegt.
Dann noch mehr mitmachen. Unter anderem auch Delays hinzufügen, dass Pakete für so und so viele Millisekunden im Kernel sein sollen. Cooler Scheiß. Ich schließe jetzt einfach mal mit. Bei dem zweiten Beispiel, Probability, hat dann jedes Paket eine gewisse prozentuale Chance, verworfen zu werden.
Ist das beim ersten Beispiel auch so, oder ist das einfach nur jedes Zehnte? Jedes Paket, was matcht. In diesem Fall habe ich natürlich keinen weiteren Match hier angegeben und hier angegeben. O ist das Minus-M-Probability. Sehr Dank.
Da das natürlich auf alle Pakete so trifft, gilt das für hier als auch für hier. Das heißt, wenn ich das hier mit einem Ping mache, funktioniert das genauso. Aber ich kann mit TC auch mit U32-Filtern noch Regeln bauen, die dann genauso ekelig ausstehen wie bei IP-Tables. Und kann dann sagen, okay, nur die TCP-Pakete, weil ob es ein TCP-Paket ist, steht ja fix im IP-Paket, in der Payload drin.
Und dann weiß ich, wo ich hingucken muss, ob es ein TCP-Paket ist. Das heißt, matche nur alle TCP-Pakete für eine bestimmte Portnummer. Und das habe ich dann die Möglichkeit, quasi hier anzugeben. Funktioniert mit IP-Tables ein bisschen angenehmer an der Stelle, aber mit TC geht es auch. Und man hat noch einen viel generäischen Ansatz, weil falls man Regelsets hat,
nicht mit ihnen interfiert, wenn man IP-Tables oder NF-Tables-Regeln hat. Und das ist wiederum cool, weil man ja vielleicht sich Genaues anschauen will. Aber jetzt würde ich schließen. Ich glaube, die Frage war aber eher, wird der Würfel pro Paket geworfen oder nicht? Der Würfel pro Paket geworfen, natürlich. Entschuldigung. Danke.
Gut, Jörg, dann vielen Dank auch nochmal für die Ausführung. Wir sehen uns alle morgen wieder. Ich wünsche allen einen schönen Abend.