|
|
Zeile 73: |
Zeile 73: |
| | | |
| [[IP-Tables Skripte für Single Host, SMB-Server und Router]] | | [[IP-Tables Skripte für Single Host, SMB-Server und Router]] |
− |
| |
− |
| |
− | Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.
| |
− | Ein Paketfilter wie iptables arbeitet grundsätzlich auf der 3. und 4. OSI-Schicht, die auch als Vermittlunsschicht (auch Netzwerkschicht, englisch network layer) und der Transportschicht (eng. transport layer) arbeitet.
| |
− |
| |
− | Was kann man mit diesen Informationen anfangen? Nun zum einen muss man wissen, dass der gesamte Internetverkehr wie wir ihn kennen über Datenpakete organisiert wird. Ein solches Datenpaket ist einfach ein Folge von Bits die hintereinander gesendet werden und bevor die eigentlichen Daten folgen Steuerindormationen in einem Header besitzt. Auf Grund der Komplexität der im Internet eingestzten Technologien werden dabei diese Datenpakete ineinander geschachtelt wie die russischen Matruschkas, die ineinander verschachtelten Puppen. Das bedeutet einfach das in einem Datenpaket das man empfängt Datenpakete ineinander verschachtelt liegen, in einem typischen Fall sind das von außen nach innen Ethernet-Frame, IP-Datagramm, TCP-Segment, HTTP-Request.
| |
− | Der Paketfilter untersucht also ein IP-Datagramm (oder auch ein ICMP-Datagramm) und das dazugehörige UDP-Datagramme oder TCP-Segment in denen Informationen wie Ziel- und Quell IP-Adresse, die Portnummern und der Zustand einer TCP-Verbindung.
| |
− |
| |
− | Die Portnummer sagen einem Rechner an welchen lauschenden Dienst er ein TCP-Segment schicken soll, so bedeutet beispielsweise der Port 80 dass eine Anfrage an einen Webserver gestellt wurde. Bevor wir uns aber genau anschauen wie IP-Tables arbeitet müssen wir uns noch den Drei-Wege Handshake betrachten. Wirr wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wickepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das syn Bit. Wenn der anderer Rechner diesen Port freigeschaltet hat und ein Dienst an ihm horcht dann sendet dieser Rechner ein TCP-Segment mit einer Bestätigung zurück das sogenannte ack-Bit ist gesetzt (ack=Acknowledgement=Bestätigung). Emfängt der erste Rechner diese Bestätigung beginnt er mit der Übertragung. Das ist ganze ist noch etwas komplexer aber für unsere Zwecke reichen diese Informationen.
| |
− |
| |
− | Man erkennt, dass für einen Dienst wie http also der Transport in zwei Richtungen notwendig ist. Von einem Client zu einem Server und vom Server zurpck zum Client. In den IP-Headern stehen Quell- und Zieladresse in den UDP- bzw. TCP-Headern die Portnummern und zwar auch 2. Die eine, die Zielportnummer ist meist eine sogenannte well-known Nummer die einen konkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser.
| |
− |
| |
− | Es gehören also 4 relevante Informationen zu einem Paket, die Rechner und Prozess adressieren, die Quell-IP, die Ziel-IP, die Quellportnummer und die Zielportnummer. Dabei sind diese Informationen davon abhängig ob das Paket vom Client zum Server oder vom Server zum Client geschickt wird. Betrachten wir das in einem Beispiel. Ein Webbrowser verbindet sich mit einem Webserver um eine Website abzurufen. In dem Paket vom Client mit dem Webbrowser ist die Quell-IP die IP des Client, die Ziel-IP die des Webservers (DNS löst dabei die URL in eine IP auf), die Quell-Portnummer irgendeine Nummer zwischen 1023 und 65525, zum Beispiel 15222 und die Zielportnummer 80. Umgekehrt enthalten dann die Pakete vom Webserver zum Browser als Quell-IP die IP des Webservers, als Ziel-IP die des Webbrowsers, als Quellport den Port 80 und als Zielportnummer in unserem Fall die 15222.
| |
− | Zusätzlich enthält der TCP-Header den Status der Verbindung, ist es eine Anfrage, eine Bestätigung oder ein normales Paket das zu einer aufgebauten Verbindung gehört.
| |
− |
| |
− | Mit diesen Kerninformationen arbeitet der Paketfilter iptables. Durch Regeln (rules) kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor, es bietet einfach eine Reihe von Möglichkeiten an. Dabei gibt es verschiedene Strategien, die nebeneinander existieren. Der Vorläufer von iptables, das ipchain untersuchte nur die IP-Adressen und Portnummern. Man musste also stets in beiden Richtungen sperren, um in inserem Beispiel zu bleiben, sowohl die Pakete vom Client zum Server als auch visa verce.
| |
− |
| |
− | Mit iptables lassen sich aber auch die Zustände von Verbindungen betrachten. Durch die gesetzten Bits kann man nämlich Neuanfragen von Paketen die zu bestehenden Verbindungen gehören unterscheiden. Diese Fähigkeit wird als stateful inspection (Betrachtung des Zustandes) bezeichnet. Dadurch ist es möglich alle rückwärtigen Pakete, die also zu bestehenden Verbindungen gehören zu erlauben und den Paketfilter so zu betreiben, indem man sich auf die Pakete konzentriert, die einen Verbindungsaufbau initieren. Dieser einfachen Strategie steht auch eine komplexere Strategie gegenüber die auch die zu einer bestehenden Verbindung gehörenden Pakete nicht generell sondern gezielt erlaubt. Diese etwas sichere aber aufwendige Strategie erwartet pro Dienst zwei Regelsätze, die einfache Strategie ein Regelsatz.
| |
− |
| |
− | Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben
| |
− |
| |
− |
| |
− | <nowiki>$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT</nowiki>
| |
− |
| |
− | Hier steht also: Erlaube (<nowiki>-j accept</nowiki>) alle Paketen den Transport, die über diese Firewall laufen (<nowiki>FORWARD</nowiki>) und ins lokale Netz wollen (<nowiki>-s $LOCAL_NET</nowiki>) und zu bestehenden Verbindungen gehören (<nowiki>--state STABLISHED,RELATED</nowiki>)
| |
− |
| |
− |
| |
− | Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung. Jetzt muss auch noch der Verbindungsaufbau und die Verbindungen vom Client zum Server zugelassen werden:
| |
− |
| |
− | <nowiki>$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT</nowiki>
| |
− |
| |
− | Hier steht also: Erlaube (<nowiki>-j Accept</nowiki>) alle Pakete den Transport, die aus dem lokalen Netz stammen (<nowiki>-s $LOCAL_NET</nowiki>) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (<nowiki> --state NEW,ESTABLISHED,RELATED</nowiki>) und einen Webserver kontaktieren (<nowiki>--dport http</nowiki> ) und deren Quellportnummern über 1024 liegen (<nowiki> --sport $PORTS_HIGH</nowiki>).
| |
− |
| |
− | Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:
| |
− |
| |
− | Verbindungen vom Client zum Server:
| |
− | <nowiki>$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT</nowiki>
| |
− |
| |
− | Verbindungen vom Server zum Client:
| |
− | <nowiki>$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT</nowiki>
| |
− |
| |
− |
| |
− | In der zweiten Regel werden also explizit nur die Pakete erlaubt die zu bestehenden http Verbindungen gehören, während bei der ersten Methode alle zu bestehenden Verbindungen gehörende Pakete erlaubt sind.
| |
− |
| |
− | Für heute mache ich Schluss, den Rest erläutere ich später.
| |
| | | |
| == Diverses == | | == Diverses == |
Grundlagen
Beschreibt Aufzucht und Hege von TCP/IP-Subnetzen. Wer einen Router konfigurieren will, sollte wissen, was ein Subnetz ist.
Anleitung für Newbies
Netzwerkgeräte
Router
- Internetzugang mit Linux-Rechner als Router Beschreibt wie man Linux konfiguriert sodass mehrere Rechner die Internetverbindung eines Linux-Rechners nutzen können.
- Internet-Zugang über Router Beschreibt wie man Linux konfiguriert, um über einen Router ins Internet zu gehen.
- Linux-Firewall hinter Hardware-Router Beschreibt wie man Linux konfiguriert sodass mehrere Rechner die Internetverbindung eines Linux-Rechners nutzen können. Dabei geht der Linux-Rechner selbst via Router ins Internet, d.h. es sind zwei Router hintereinandergeschaltet.
Probleme
Beschreibt wie man bei Problemen mit der Internetverbindung jene einkreisen kann.
Auch wenn man eigentlich alles richtig gemacht hat, klappt's manchmal einfach nicht mit dem Internet. Hier werden die üblichen Verdächtigen beschrieben:
- ipv6 ist aktiviert, wird aber sonst nicht verwendet
- die MTU ist zu groß
- DNS-Weiterleitung im Router funktioniert nicht richtig
Wenn man zwei Netzwerkkarten hat, kann man bestimmte Probleme bekommen (z.B. dass eine davon nicht angeschlossen ist, Linux aber versucht darüber zu kommunizieren).
DNS Problem SuSE 9.1+ mit .local Domänen / MDNS
Seit SuSE Linux 9.1 ist standardmäßig Multicast DNS aktiviert was zu Problemen mit der *.local
DNS-Zone führt. Leider schlägt Microsoft diese bei der Einrichtung von Active Directory gerne vor.
Allgemeine Tips
Spezielle Hardware und Treiber
http://www.linux-club.de/ftopic40729.html
http://www.linux-club.de/ftopic45256.html
http://www.linux-club.de/ftopic19565.html
http://www.linux-club.de/ftopic28540.html
beschreibt ein Problem mit 'TCP window scaling and broken routers'
Alternativ empfiehlt es sich, bei Problemen mal zu versuchen, TCP S-ACK (nicht das gleiche wie Window Scaling) auszuschalten
echo 0 >/proc/sys/net/ipv4/tcp_sack
Firewall im Eigenbau
IP-Tables Skripte für Single Host, SMB-Server und Router
Diverses
http://www.linux-club.de/viewtopic.php?t=9460 zusammenfassen
http://www.linux-club.de/viewtopic.php?t=39732 zusammenfassen
Siehe /etc/udev/rules.d/30-net_persistent_names.rules
http://www.linux-club.de/viewtopic.php?t=9440 zusammenfassen
Active FTP vs. Passive FTP, a Definitive Explanation
http://slacksite.com/other/ftp.html
Das User Datagram Protocol (Abk. UDP) ist ein minimales, verbindungsloses Netzprotokoll, das zur Transportschicht der Internetprotokollfamilie gehört.
Zurück zu Netzwerkprotokol