<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://linupedia.org/wiki/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gaw</id>
	<title>Linupedia.org - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://linupedia.org/wiki/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gaw"/>
	<link rel="alternate" type="text/html" href="https://linupedia.org/opensuse/Spezial:Beitr%C3%A4ge/Gaw"/>
	<updated>2026-04-03T19:08:32Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17147</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17147"/>
		<updated>2007-06-03T16:25:58Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wikepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das '''SYN''' Bit (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genaugenommen ist iptables also nur das Werkzeug mit der sich Paketfilter erstellen lassen. Was wie gefiltert wird, liegt daran, wie wir iptables konkret einsetzen. Nach den oben beschriebenen Skript wird zunächst alles verboten. Dann beginnt man einzelne Pakte zu erlauben. Dabei muss man berücksichtigen, dass auch auf dem Rechner selbst Programme ablaufen die über eine Netzwerkschnittstelle kommunizieren, selbst dann wenn der Rechner keinen Netzanschluß besitzt. Der Grund ist einfach, Programmentwickler müssen keine Fallunterschiede zwischen Programmteilen vornehmen, die auf entweder auf verteilten Rechnern oder alle auf den gleichen Rechner laufen. Läuft der Dienst auf dem gleichen Rechner so kann er über die lokale Schnittstelle mit der IP-Adresse 127.0.0.1 angesprochen werden. Um Prozesse, die auf dem lokalen Rechner laufen ungestört über diese lokale Schnittstelle kommunizieren zu lassen, können folgende einfache iptables Befehle verwendet werden, wobei wir der Vollständigkeithalber die Zuweisung der itables Programmdatei stehen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -A OUTPUT -o lo -j ACCEPT&lt;br /&gt;
 $IPTABLES -A INPUT  -i lo -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der einzelnen Parameter:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 -A bedeutet wir hängen einer Regel an eine existierende Chain (OUTPUT, INPUT, FORWARD etc.)&lt;br /&gt;
 -o die Schnittstelle zu der das Paket gesendet wird&lt;br /&gt;
 -i die Schnittstelle von der ein Paket empfangen wird&lt;br /&gt;
 -j das Target (Ziel) was mit dem Paket geschehen soll, zum Beispiel ACCEPT (akzeptiere das Paket) oder DENY (Lehne es ab)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So betrachtet sagt die erste Regel:&lt;br /&gt;
Hänge diese Regel an den Regelsatz ausgehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle gesendet werden&lt;br /&gt;
&lt;br /&gt;
und die zweite&lt;br /&gt;
Hänge diese Regel an den Regelsatz eingehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle empfangen werden&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten sagen beide Regeln, erlauben allen lokalen Programmen die lokale Schnittstelle zu benutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17146</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17146"/>
		<updated>2007-06-03T16:25:32Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wikepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das '''SYN''' Bit (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genaugenommen ist iptables also nur das Werkzeug mit der sich Paketfilter erstellen lassen. Was wie gefiltert wird, liegt daran, wie wir iptables konkret einsetzen. Nach den oben beschriebenen Skript wird zunächst alles verboten. Dann beginnt man einzelne Pakte zu erlauben. Dabei muss man berücksichtigen, dass auch auf dem Rechner selbst Programme ablaufen die über eine Netzwerkschnittstelle kommunizieren, selbst dann wenn der Rechner keinen Netzanschluß besitzt. Der Grund ist einfach, Programmentwickler müssen keine Fallunterschiede zwischen Programmteilen vornehmen, die auf entweder auf verteilten Rechnern oder alle auf den gleichen Rechner laufen. Läuft der Dienst auf dem gleichen Rechner so kann er über die lokale Schnittstelle mit der IP-Adresse 127.0.0.1 angesprochen werden. Um Prozesse, die auf dem lokalen Rechner laufen ungestört über diese lokale Schnittstelle kommunizieren zu lassen, können folgende einfache iptables Befehle verwendet werden, wobei wir der Vollständigkeithalber die Zuweisung der itables Programmdatei stehen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 $IPTABLES -A OUTPUT -o lo -j ACCEPT&lt;br /&gt;
 $IPTABLES -A INPUT  -i lo -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der einzelnen Parameter:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 -A bedeutet wir hängen einer Regel an eine existierende Chain (OUTPUT, INPUT, FORWARD etc.)&lt;br /&gt;
 -o die Schnittstelle zu der das Paket gesendet wird&lt;br /&gt;
 -i die Schnittstelle von der ein Paket empfangen wird&lt;br /&gt;
 -j das Target (Ziel) was mit dem Paket geschehen soll, zum Beispiel ACCEPT (akzeptiere das Paket) oder DENY (Lehne es ab)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So betrachtet sagt die erste Regel:&lt;br /&gt;
Hänge diese Regel an den Regelsatz ausgehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle gesendet werden&lt;br /&gt;
&lt;br /&gt;
und die zweite&lt;br /&gt;
Hänge diese Regel an den Regelsatz eingehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle empfangen werden&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten sagen beide Regeln, erlauben allen lokalen Programmen die lokale Schnittstelle zu benutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17145</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17145"/>
		<updated>2007-06-03T16:25:23Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wikepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das '''SYN''' Bit (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genaugenommen ist iptables also nur das Werkzeug mit der sich Paketfilter erstellen lassen. Was wie gefiltert wird, liegt daran, wie wir iptables konkret einsetzen. Nach den oben beschriebenen Skript wird zunächst alles verboten. Dann beginnt man einzelne Pakte zu erlauben. Dabei muss man berücksichtigen, dass auch auf dem Rechner selbst Programme ablaufen die über eine Netzwerkschnittstelle kommunizieren, selbst dann wenn der Rechner keinen Netzanschluß besitzt. Der Grund ist einfach, Programmentwickler müssen keine Fallunterschiede zwischen Programmteilen vornehmen, die auf entweder auf verteilten Rechnern oder alle auf den gleichen Rechner laufen. Läuft der Dienst auf dem gleichen Rechner so kann er über die lokale Schnittstelle mit der IP-Adresse 127.0.0.1 angesprochen werden. Um Prozesse, die auf dem lokalen Rechner laufen ungestört über diese lokale Schnittstelle kommunizieren zu lassen, können folgende einfache iptables Befehle verwendet werden, wobei wir der Vollständigkeithalber die Zuweisung der itables Programmdatei stehen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 $IPTABLES -A OUTPUT -o lo -j ACCEPT&lt;br /&gt;
 $IPTABLES -A INPUT  -i lo -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der einzelnen Parameter:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 -A bedeutet wir hängen einer Regel an eine existierende Chain (OUTPUT, INPUT, FORWARD etc.)&lt;br /&gt;
 -o die Schnittstelle zu der das Paket gesendet wird&lt;br /&gt;
 -i die Schnittstelle von der ein Paket empfangen wird&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 -j das Target (Ziel) was mit dem Paket geschehen soll, zum Beispiel ACCEPT (akzeptiere das Paket) oder DENY (Lehne es ab)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So betrachtet sagt die erste Regel:&lt;br /&gt;
Hänge diese Regel an den Regelsatz ausgehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle gesendet werden&lt;br /&gt;
&lt;br /&gt;
und die zweite&lt;br /&gt;
Hänge diese Regel an den Regelsatz eingehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle empfangen werden&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten sagen beide Regeln, erlauben allen lokalen Programmen die lokale Schnittstelle zu benutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17144</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17144"/>
		<updated>2007-06-03T16:24:37Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wikepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das '''SYN''' Bit (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genaugenommen ist iptables also nur das Werkzeug mit der sich Paketfilter erstellen lassen. Was wie gefiltert wird, liegt daran, wie wir iptables konkret einsetzen. Nach den oben beschriebenen Skript wird zunächst alles verboten. Dann beginnt man einzelne Pakte zu erlauben. Dabei muss man berücksichtigen, dass auch auf dem Rechner selbst Programme ablaufen die über eine Netzwerkschnittstelle kommunizieren, selbst dann wenn der Rechner keinen Netzanschluß besitzt. Der Grund ist einfach, Programmentwickler müssen keine Fallunterschiede zwischen Programmteilen vornehmen, die auf entweder auf verteilten Rechnern oder alle auf den gleichen Rechner laufen. Läuft der Dienst auf dem gleichen Rechner so kann er über die lokale Schnittstelle mit der IP-Adresse 127.0.0.1 angesprochen werden. Um Prozesse, die auf dem lokalen Rechner laufen ungestört über diese lokale Schnittstelle kommunizieren zu lassen, können folgende einfache iptables Befehle verwendet werden, wobei wir der Vollständigkeithalber die Zuweisung der itables Programmdatei stehen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 $IPTABLES -A OUTPUT -o lo -j ACCEPT&lt;br /&gt;
 $IPTABLES -A INPUT  -i lo -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der einzelnen Parameter:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 -A bedeutet wir hängen einer Regel an eine existierende Chain (OUTPUT, INPUT, FORWARD etc.)&lt;br /&gt;
 -o die Schnittstelle zu der das Paket gesendet wird&lt;br /&gt;
 -i die Schnittstelle von der ein Paket empfangen wird&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 -j das Target (Ziel) was mit dem Paket geschehen soll, zum Beispiel ACCEPT (akzeptiere das Paket) oder DENY (Lehne es ab)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So betrachtet sagt die erste Regel:&lt;br /&gt;
Hänge diese Regel an den Regelsatz ausgehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle gesendet werden&lt;br /&gt;
&lt;br /&gt;
und die zweite&lt;br /&gt;
Hänge diese Regel an den Regelsatz eingehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle empfangen werden&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten sagen beide Regeln, erlauben allen lokalen Programmen die lokale Schnittstelle zu benutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17143</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17143"/>
		<updated>2007-06-03T16:23:50Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wikepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das '''SYN''' Bit (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genaugenommen ist iptables also nur das Werkzeug mit der sich Paketfilter erstellen lassen. Was wie gefiltert wird, liegt daran, wie wir iptables konkret einsetzen. Nach den oben beschriebenen Skript wird zunächst alles verboten. Dann beginnt man einzelne Pakte zu erlauben. Dabei muss man berücksichtigen, dass auch auf dem Rechner selbst Programme ablaufen die über eine Netzwerkschnittstelle kommunizieren, selbst dann wenn der Rechner keinen Netzanschluß besitzt. Der Grund ist einfach, Programmentwickler müssen keine Fallunterschiede zwischen Programmteilen vornehmen, die auf entweder auf verteilten Rechnern oder alle auf den gleichen Rechner laufen. Läuft der Dienst auf dem gleichen Rechner so kann er über die lokale Schnittstelle mit der IP-Adresse 127.0.0.1 angesprochen werden. Um Prozesse, die auf dem lokalen Rechner laufen ungestört über diese lokale Schnittstelle kommunizieren zu lassen, können folgende einfache iptables Befehle verwendet werden, wobei wir der Vollständigkeithalber die Zuweisung der itables Programmdatei stehen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 $IPTABLES -A OUTPUT -o lo -j ACCEPT&lt;br /&gt;
 $IPTABLES -A INPUT  -i lo -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der einzelnen Parameter:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-A bedeutet wir hängen einer Regel an eine existierende Chain (OUTPUT, INPUT, FORWARD etc.)&lt;br /&gt;
-o die Schnittstelle zu der das Paket gesendet wird&lt;br /&gt;
-i die Schnittstelle von der ein Paket empfangen wird&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
-j das Target (Ziel) was mit dem Paket geschehen soll, zum Beispiel ACCEPT (akzeptiere das Paket) oder DENY (Lehne es ab)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
So betrachtet sagt die erste Regel:&lt;br /&gt;
Hänge diese Regel an den Regelsatz ausgehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle gesendet werden&lt;br /&gt;
&lt;br /&gt;
und die zweite&lt;br /&gt;
Hänge diese Regel an den Regelsatz eingehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle empfangen werden&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten sagen beide Regeln, erlauben allen lokalen Programmen die lokale Schnittstelle zu benutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17142</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17142"/>
		<updated>2007-06-03T16:22:14Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wikepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das '''SYN''' Bit (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genaugenommen ist iptables also nur das Werkzeug mit der sich Paketfilter erstellen lassen. Was wie gefiltert wird, liegt daran, wie wir iptables konkret einsetzen. Nach den oben beschriebenen Skript wird zunächst alles verboten. Dann beginnt man einzelne Pakte zu erlauben. Dabei muss man berücksichtigen, dass auch auf dem Rechner selbst Programme ablaufen die über eine Netzwerkschnittstelle kommunizieren, selbst dann wenn der Rechner keinen Netzanschluß besitzt. Der Grund ist einfach, Programmentwickler müssen keine Fallunterschiede zwischen Programmteilen vornehmen, die auf entweder auf verteilten Rechnern oder alle auf den gleichen Rechner laufen. Läuft der Dienst auf dem gleichen Rechner so kann er über die lokale Schnittstelle mit der IP-Adresse 127.0.0.1 angesprochen werden. Um Prozesse, die auf dem lokalen Rechner laufen ungestört über diese lokale Schnittstelle kommunizieren zu lassen, können folgende einfache iptables Befehle verwendet werden, wobei wir der Vollständigkeithalber die Zuweisung der itables Programmdatei stehen lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 $IPTABLES -A OUTPUT -o lo -j ACCEPT&lt;br /&gt;
 $IPTABLES -A INPUT  -i lo -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Bedeutung der einzelnen Parameter:&lt;br /&gt;
&lt;br /&gt;
-A bedeutet wir hängen einer Regel an eine existierende Chain (OUTPUT, INPUT, FORWARD etc.)&lt;br /&gt;
-o die Schnittstelle zu der das Paket gesendet wird&lt;br /&gt;
-i die Schnittstelle von der ein Paket empfangen wird&lt;br /&gt;
-j das Target (Ziel) was mit dem Paket geschehen soll, zum Beispiel ACCEPT (akzeptiere das Paket) oder DENY (Lehne es ab)&lt;br /&gt;
&lt;br /&gt;
So betrachtet sagt die erste Regel:&lt;br /&gt;
Hänge diese Regel an den Regelsatz ausgehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle gesendet werden&lt;br /&gt;
&lt;br /&gt;
und die zweite&lt;br /&gt;
Hänge diese Regel an den Regelsatz eingehende Pakete, die Regel lautet: Akzeptiere alle Pakete die über die lokale Schnittstelle empfangen werden&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten, erlauben allen lokalen Programmen die lokale Schnittstelle zu benutzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17141</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=17141"/>
		<updated>2007-06-03T16:03:37Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir wollen dabei nicht zu sehr in die technischen Einzelheiten gehen, das kann man sich in entsprechenden Wikepediaartikeln selbst durchlesen, wichtig ist, das zunöchst eine Anfrage für einen Verbindungsaufbau erfolgt, das entsprechende Bit im TCP-Header ist das '''SYN''' Bit (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Genaugenommen ist iptables also nur das Werkzeug mit der sich Paketfilter erstellen lassen. Was wie gefiltert wird, liegt daran, wie wir iptables konkret einsetzen.&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16655</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16655"/>
		<updated>2007-05-25T17:02:08Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|487px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|519px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16654</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16654"/>
		<updated>2007-05-25T16:53:37Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|510px|left]][[Bild:Dreiwegehandshake2.jpg|thumb|510px|right]]&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|600px|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16651</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16651"/>
		<updated>2007-05-25T15:16:41Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|300px|center]][[Bild:dreiwegehandshake2.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
Hier ein Code-Auschnitt aus dem Skript:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;#Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16650</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16650"/>
		<updated>2007-05-25T15:12:51Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|300px|center]][[Bild:dreiwegehandshake2.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16649</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16649"/>
		<updated>2007-05-25T15:11:30Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg|thumb|300px|center]][[Bild:dreiwegehandshake2.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
 &amp;lt;code&amp;gt;&lt;br /&gt;
 #!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen und weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16621</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16621"/>
		<updated>2007-05-25T11:37:12Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile angepasst werden. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16620</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16620"/>
		<updated>2007-05-25T11:36:11Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptables- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor aber die unterschiedlichen Strategien an einem Beispiel gezeigt werden können, sollte der Umgang mit iptables betrachtet werden. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. Wie in solchen Bash-Skripten üblich, wird hier das Programm iptables nicht direkt aufgerufen, sondern es wird eine Variable gesetzt. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Das ist sehr vernünftig, wenn man das Skript in Umgebungen einsetzen will, in denen das Programm iptables aus Sicherheitsgründen umbenannt oder in ein anderes Verzeichnis gesetzt worden ist. Dann muss nur diese eine Zeile anpassen. Außerdem erlaubt das auch Variablen auszulagern. Dazu aber später mehr.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16619</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16619"/>
		<updated>2007-05-25T11:29:56Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16618</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16618"/>
		<updated>2007-05-25T11:24:57Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/sbin/sh&lt;br /&gt;
 ################## Firewall die alles verbietet&lt;br /&gt;
 &lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
 &lt;br /&gt;
 ################## Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
 &lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16617</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16617"/>
		<updated>2007-05-25T11:23:23Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/sbin/sh&lt;br /&gt;
&lt;br /&gt;
 # Programm&lt;br /&gt;
 IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 $IPTABLES -P INPUT DROP&lt;br /&gt;
 $IPTABLES -P FORWARD DROP&lt;br /&gt;
 $IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
 # Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
&lt;br /&gt;
 # Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
 $IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
 # Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
 $IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
 # Lösche alle selbstdefinierte Regeln&lt;br /&gt;
 $IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16616</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16616"/>
		<updated>2007-05-25T11:22:03Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#!/sbin/sh&lt;br /&gt;
&lt;br /&gt;
# Programm&lt;br /&gt;
IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$IPTABLES -P INPUT DROP&lt;br /&gt;
$IPTABLES -P FORWARD DROP&lt;br /&gt;
$IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
&lt;br /&gt;
 Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
# Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
$IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Lösche alle selbstdefinierte Regeln&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16615</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16615"/>
		<updated>2007-05-25T11:17:18Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
&lt;br /&gt;
# Programm&lt;br /&gt;
IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$IPTABLES -P INPUT DROP&lt;br /&gt;
$IPTABLES -P FORWARD DROP&lt;br /&gt;
$IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
&lt;br /&gt;
 Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
# Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
$IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Lösche alle selbstdefinierte Regeln&lt;br /&gt;
$IPTABLES -X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16614</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16614"/>
		<updated>2007-05-25T11:16:35Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#!/sbin/sh&lt;br /&gt;
&lt;br /&gt;
############ Programm&lt;br /&gt;
IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
############# Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$IPTABLES -P INPUT DROP&lt;br /&gt;
$IPTABLES -P FORWARD DROP&lt;br /&gt;
$IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############# Alle eventuell noch vorhandenen Regeln werden gel\uffffscht&lt;br /&gt;
&lt;br /&gt;
 Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
# Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
$IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Lösche alle selbstdefinierte Regeln&lt;br /&gt;
$IPTABLES -X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16613</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16613"/>
		<updated>2007-05-25T11:15:50Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#!/sbin/sh&lt;br /&gt;
&lt;br /&gt;
############ Programm&lt;br /&gt;
IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
############# Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$IPTABLES -P INPUT DROP&lt;br /&gt;
$IPTABLES -P FORWARD DROP&lt;br /&gt;
$IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############# Alle eventuell noch vorhandenen Regeln werden gel\uffffscht&lt;br /&gt;
&lt;br /&gt;
# L\uffffsche alle Regeln aus der Filter Tabelle&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
# L\uffffsche aller Regeln aus der NAT Tabelle&lt;br /&gt;
$IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
# L\uffffsche alle selbstdefinierte Regeln&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16612</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16612"/>
		<updated>2007-05-25T11:10:05Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#!/sbin/sh&lt;br /&gt;
&lt;br /&gt;
############ Programm&lt;br /&gt;
IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
############# Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$IPTABLES -P INPUT DROP&lt;br /&gt;
$IPTABLES -P FORWARD DROP&lt;br /&gt;
$IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############# Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
&lt;br /&gt;
# Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
# Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
$IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Lösche alle selbstdefinierte Regeln&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16611</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16611"/>
		<updated>2007-05-25T10:58:35Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
############# Programm&lt;br /&gt;
IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
############# Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$IPTABLES -P INPUT DROP&lt;br /&gt;
$IPTABLES -P FORWARD DROP&lt;br /&gt;
$IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############# Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
&lt;br /&gt;
# Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
# Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
$IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Lösche alle selbstdefinierte Regeln&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16610</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16610"/>
		<updated>2007-05-25T10:47:55Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Bevor wir aber die unterschiedlichen Strategien erörten, sollten wir den Umgang mit iptables betrachten. Dazu formulieren wir ein einfaches Skript, das einen Paketfilter einrichtet, der alles verbietet, ganz nach dem Prinzip '''Verbiete zunächst alles und dann erlaube bestimmen Paketen den Verkehr''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
############# Programm&lt;br /&gt;
IPTABLES=&amp;quot;/usr/sbin/iptables&amp;quot;&lt;br /&gt;
&lt;br /&gt;
############# Alle Pakete der Grundeinstellung werden verworfen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$IPTABLES -P INPUT DROP&lt;br /&gt;
$IPTABLES -P FORWARD DROP&lt;br /&gt;
$IPTABLES -P OUTPUT DROP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
############# Alle eventuell noch vorhandenen Regeln werden gelöscht&lt;br /&gt;
&lt;br /&gt;
# Lösche alle Regeln aus der Filter Tabelle&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
&lt;br /&gt;
# Lösche aller Regeln aus der NAT Tabelle&lt;br /&gt;
$IPTABLES -t nat -F&lt;br /&gt;
&lt;br /&gt;
# Lösche alle selbstdefinierte Regeln&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein solches Skript könnte man als Art ultimiativen Paketfilter betrachten, der alles dicht macht. Beim Testen sollte man sicher sein, dass man ein solches Skript nicht remote von einem anderen Rechner ausführt, denn dann sperrt man sich selber aus. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der folgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16608</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16608"/>
		<updated>2007-05-25T10:32:26Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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 (steht für synchronize). Unter Synchronozise wird das Senden der Anfangsnummer des TCP-Segmentes verstanden, das aus Sicherheitsgründen nicht mit 1 beginnt, sondern mit einer zufällig ausgewählten laufenden Nummer. 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 (ACK=Acknowledgement=Bestätigung) und ebenfalls ein '''SYN''' BIT, für die andere Richtung werden also andere Nummern verianbart. Emfängt der erste Rechner diese Bestätigung sendet er zum Abschluß nur das '''ACK'''-Bit und beginnt mit der Übertragung. Das ganze kann noch etwas komplexer sein, aber für unsere Zwecke reichen diese Informationen, siehe Abbildung.&lt;br /&gt;
&lt;br /&gt;
Wenn man iptable- Regeln formuliert, muss man sich über diesen 3-Wegehandshake immer im Klaren sein. Für eine Neu-Anfrage ist also das SYN-Bit ohne ACK-Bit gesetzt, dass kann ein Pakerfilter feststellen und so zwischen Paketen unterscheiden die eine Verbindung neu aufbauen, oder die zu einer bestehenden Verbindung gehören. Wichtig ist immer das man die Richtung und die Portnummern richtig intepretiert, dort werden die meisten Fehler begannen. Der Client also zum Beispiel ein Webbrowser trägt als Zielport in seine Pakete den Well-Known Port ein, in diesem Fall 80 für http, als Quellport wird ein beliebiger Portonkreten Dienst wie http, pop3 oder smtp anspricht. Die andere ist mit einem konkreten Prozeß auf dem Client verbunden, zum Beispiel einen Webbrowser. &lt;br /&gt;
&lt;br /&gt;
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. 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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der ffolgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16607</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16607"/>
		<updated>2007-05-25T10:18:19Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Dazu ist es unerläßlich sich den 3 Wegehandshake unter TCP zu betrachten:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Dreiwegehandshake1.jpg]][[Bild:dreiwegehandshake2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wir 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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der ffolgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=Datei:Dreiwegehandshake2.jpg&amp;diff=16606</id>
		<title>Datei:Dreiwegehandshake2.jpg</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=Datei:Dreiwegehandshake2.jpg&amp;diff=16606"/>
		<updated>2007-05-25T10:17:19Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=Datei:Dreiwegehandshake1.jpg&amp;diff=16605</id>
		<title>Datei:Dreiwegehandshake1.jpg</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=Datei:Dreiwegehandshake1.jpg&amp;diff=16605"/>
		<updated>2007-05-25T10:16:49Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16571</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16571"/>
		<updated>2007-05-23T16:24:25Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, Diese Chains sind in der Abbildiung schraffiert. Zu den Chans gehören: PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält dabei alle Tabellen. Die Table Mangle ist dafür zuständig Pakete zu markieren, die Table Filter dient dazu Pakete zu filtern, dass bedeutet abzulehnen (deny) oder zu akzeptieren (accept). Die Table Nat schreibt die Ziel oder Quelladressen (und/oder Ports) um, ist also für das Network Adress Translation, das Masquerading (verallgemeinertes Source-NAT: überschrieben privater Pakete mit der zugwiesenen Adresse ders Providers), das Portforwarding (Portumleitung, z. B bei transparenten Proxies) und das Destination NAT (umschreiben der Pakete aus dem Internet, die an einen Server im Netz gedacht sind). Da NAT entweder vor oder nach den eigentlichen Filter einen Sinn ergibt ist auch nur eine NAT Tabl in den Chains PREROUTUNG und POSTROUTING sinnvoll. &lt;br /&gt;
Die INPUT Chain ist für Pakete gedacht, die als Ziel lokale Prozessen auf dem Firewallrechner ansteuern, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain für Pakte deren Uraprung lokale Prozesse des Firewallrechner sind. Die FORWARD Chain ist im Grunde die wichtigste Chain, denn sie ist für die Weiterleitung der Pakete aus dem lokalen Netz ins Internet bzw. umgekeht zuständig. &lt;br /&gt;
&lt;br /&gt;
Durch Regeln (rules), die in ene Chain eingefügt, angehängt oder gelöscht werden, kann der Anwender definieren welche Pakete durchgelassen werden. Wie man diese Regeln erstellt, das schreibt iptables nicht vor. Der Filter Iptables ist also genaugenommen ein Werkzeug, mit dem sich ein Paketfilter einrichten lässt. Dabei gibt es ganz verschiedene Strategien. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Anhand dieser Regel lassen sich Gundprinzipien erläutern. Zunächst wird das Programm iptables hier nicht direkt, sondern über eine Variable ($IPTABLES) angesprochen. Damit lassen sich solche Skripte unabhöngig von dem genauen Location erstellen. Man kann dann am Anfang eines solchen Skriptes das Programm zuordnen (z.B: &amp;lt;nowiki&amp;gt;IPTABLES=/sbin/siptable&amp;lt;/nowiki&amp;gt;s)und muss nicht alle Regeln korrigieren. Das -A bedeutet appand, also hänge diese Regel an den bestehenden Regelkatalog an und zwar in der Chain FORWARD. Die weiteren bestandteile der Regel lassen sich wie folgt beschreiben: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;), ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen oder in Contrackkingmodulen zugeordneten Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die rückwärtigen Verbindungen alleine erlauben jedoch noch keine Verbindung, weil dazu muss ein Verbindunsgaufbau ermögliocht werden. Mit der ffolgenden Regel wird der Verbindungsaufbau und die Verbindungen von einem Client zu einem Webserver zugelassen:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören, oder einer zugeordnet sind (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;),  einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Erst beide Regeln erlauben einen Rechner im lokalen Netz eine Website im Internet aufzurufen. In dieser einfachen Strategie wird allen rückläufigen Paketen, das Forwarding mit der ersten Regel erlaubt. Der Zugang wird über über die Erlaubnis geregelt eine neue Verbindung einzugehen.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16479</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16479"/>
		<updated>2007-05-21T00:56:17Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält alle Tabellen. &lt;br /&gt;
&lt;br /&gt;
INPUT ist die Chain, von Paketen die als Ziel lokalen Prozessen auf dem Firewallrechner besitzen, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain deren Urprung lokale Prozesse sind. Die FORWARD Chain ist die Chain die für die Weiterleitung der Pakete zuständig ist. Die verbleibenden Chains PREROUTING und POSTROUTING sind die verbleibenden Ketten die die beide eine Tabelle Nat enthalten. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;) und ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;) und einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Netzwerk|zurück zum Netzwerk]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16139</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16139"/>
		<updated>2007-05-19T18:00:16Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;) und ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;) und einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält alle Tabellen. &lt;br /&gt;
&lt;br /&gt;
INPUT ist die Chain, von Paketen die als Ziel lokalen Prozessen auf dem Firewallrechner besitzen, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain deren Urprung lokale Prozesse sind. Die FORWARD Chain ist die Chain die für die Weiterleitung der Pakete zuständig ist. Die verbleibenden Chains PREROUTING und POSTROUTING sind die verbleibenden Ketten die die beide eine Tabelle Nat enthalten. &lt;br /&gt;
&lt;br /&gt;
Wenn ich wieder etwas Zeit habe gehts weiter....&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[TCP/IP-Netzwerke und Internetzugang]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16138</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16138"/>
		<updated>2007-05-19T17:59:15Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;) und ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;) und einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält alle Tabellen. &lt;br /&gt;
&lt;br /&gt;
INPUT ist die Chain, von Paketen die als Ziel lokalen Prozessen auf dem Firewallrechner besitzen, das können zum Beispiel Pakete sein, die zu ssh Verbindungen oder zu DNS-Anfragen gehören. OUTPUT ist die Chain deren Urprung lokale Prozesse sind. Die FORWARD Chain ist die Chain die für die Weiterleitung der Pakete zuständig ist. Die verbleibenden Chains PREROUTING und POSTROUTING sind die verbleibenden Ketten die die beide eine Tabelle Nat enthalten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[TCP/IP-Netzwerke und Internetzugang]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16131</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16131"/>
		<updated>2007-05-19T17:39:09Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;) und ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;) und einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Außennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Außennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Man erkennt dass der Paketfilter iptables in sogenannten Chains (Ketten) aufgeteilt ist, PREROUTUNG, INPUT, OUTPUT, FORWARD und POSTROUTING. Diese Chains enthalten verschiedene Tables (Tabellen) die iptables ihren Namen geben. Nicht jede Kette enthält alle Tabellen. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[TCP/IP-Netzwerke und Internetzugang]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16126</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16126"/>
		<updated>2007-05-19T17:19:08Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;) und ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;) und einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten. In der Abbildung ist der Weg durch den Paketfilter im Linuxkernel vorgezeichnet, im linken Bild Pakete die ins LAN gelangen, entweder aus dem Aussennetz (oft das Internet) oder von dem Firewallrechner selbst, im rechten Bild ist der Weg vom LAN ins Aussennetz dargestellt&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[TCP/IP-Netzwerke und Internetzugang]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16125</id>
		<title>IP-Tables Skripte fuer Single Host, SMB-Server und Router</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=IP-Tables_Skripte_fuer_Single_Host,_SMB-Server_und_Router&amp;diff=16125"/>
		<updated>2007-05-19T17:16:01Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;) und ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;) und einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bevor wir nun in media res gehen (Für Nichtlateiner zum Pudels Kern vorstoßen) müssen wir uns die grundsätzlichen Verlauf der Pakete in iptables betrachten.&lt;br /&gt;
&lt;br /&gt;
[[Bild:iptables.jpg]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[TCP/IP-Netzwerke und Internetzugang]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TCP/IP]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=Datei:Iptables.jpg&amp;diff=16124</id>
		<title>Datei:Iptables.jpg</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=Datei:Iptables.jpg&amp;diff=16124"/>
		<updated>2007-05-19T17:13:18Z</updated>

		<summary type="html">&lt;p&gt;Gaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
	<entry>
		<id>https://linupedia.org/wiki/mediawiki/index.php?title=Netzwerk&amp;diff=16035</id>
		<title>Netzwerk</title>
		<link rel="alternate" type="text/html" href="https://linupedia.org/wiki/mediawiki/index.php?title=Netzwerk&amp;diff=16035"/>
		<updated>2007-05-19T03:07:00Z</updated>

		<summary type="html">&lt;p&gt;Gaw: /* IP-Tables Skripte für Single Host, SMB-Server und Router */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Grundlagen ==&lt;br /&gt;
&lt;br /&gt;
* [[TCP/IP und Routing Grundwissen]]&lt;br /&gt;
Beschreibt Aufzucht und Hege von TCP/IP-Subnetzen. Wer einen Router konfigurieren will, sollte wissen, was ein Subnetz ist.&lt;br /&gt;
&lt;br /&gt;
* [[Wie wählt man sich ins Internet ein]]&lt;br /&gt;
Anleitung für Newbies&lt;br /&gt;
&lt;br /&gt;
== Netzwerkgeräte ==&lt;br /&gt;
&lt;br /&gt;
* [[Netzwerkkarte]]&lt;br /&gt;
* [[DSL]]&lt;br /&gt;
&lt;br /&gt;
== Router ==&lt;br /&gt;
&lt;br /&gt;
* [[Internetzugang mit Linux-Rechner als Router]] Beschreibt wie man Linux konfiguriert sodass mehrere Rechner die Internetverbindung eines Linux-Rechners nutzen können.&lt;br /&gt;
* [[Internet-Zugang über Router]] Beschreibt wie man Linux konfiguriert, um über einen Router ins Internet zu gehen.&lt;br /&gt;
* [[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.&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
=== [[Tests bei Problemen mit der Internetverbindung]] ===&lt;br /&gt;
Beschreibt wie man bei Problemen mit der Internetverbindung jene einkreisen kann.&lt;br /&gt;
&lt;br /&gt;
=== [[Internetverbindungsprobleme - IPv6 MTU DNS]] ===&lt;br /&gt;
Auch wenn man eigentlich alles richtig gemacht hat, klappt's manchmal einfach nicht mit dem Internet. Hier werden die üblichen Verdächtigen beschrieben:&lt;br /&gt;
* ipv6 ist aktiviert, wird aber sonst nicht verwendet&lt;br /&gt;
* die MTU ist zu groß&lt;br /&gt;
* DNS-Weiterleitung im Router funktioniert nicht richtig&lt;br /&gt;
&lt;br /&gt;
=== [[Probleme bei WLAN mit zweiter Netzwerkkarte]] ===&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
=== [[DNS Problem SuSE 9.1 und mit .local Domänen / MDNS]] ===&lt;br /&gt;
[http://www.linux-club.de/ftopic6067.html DNS Problem SuSE 9.1+ mit .local Domänen / MDNS]&lt;br /&gt;
&lt;br /&gt;
Seit SuSE Linux 9.1 ist standardmäßig Multicast DNS aktiviert was zu Problemen mit der &amp;lt;code&amp;gt;*.local&amp;lt;/code&amp;gt; DNS-Zone führt. Leider schlägt Microsoft diese bei der Einrichtung von Active Directory gerne vor.&lt;br /&gt;
&lt;br /&gt;
=== [[Zugangsdaten für verschiedene Internet-Provider]] ===&lt;br /&gt;
&lt;br /&gt;
== Allgemeine Tips ==&lt;br /&gt;
&lt;br /&gt;
=== [[Nützliche Links zum Thema]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[Windows-Tools zur Kommunikation mit Linux]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[Wie etwas posten wenn's Netz nicht geht|Wie etwas posten wenn's Netz nicht geht?]] ===&lt;br /&gt;
&lt;br /&gt;
== Spezielle Hardware und Treiber ==&lt;br /&gt;
&lt;br /&gt;
=== [[T-Sinusdata unter Linux]] ===&lt;br /&gt;
http://www.linux-club.de/ftopic40729.html&lt;br /&gt;
&lt;br /&gt;
=== [[USB-Modem, CDC-Ethernet und SuSE . Problem]] ===&lt;br /&gt;
http://www.linux-club.de/ftopic45256.html&lt;br /&gt;
&lt;br /&gt;
=== [[Infos zu Win Modems]] ===&lt;br /&gt;
&lt;br /&gt;
=== [[Installation des dsl-Zugangsprogram rp-pppoe]] ===&lt;br /&gt;
http://www.linux-club.de/ftopic19565.html&lt;br /&gt;
&lt;br /&gt;
=== [[Verbindungsabbrüche bei diversen Webseiten]] ===&lt;br /&gt;
http://www.linux-club.de/ftopic28540.html&lt;br /&gt;
beschreibt ein Problem mit 'TCP window scaling and broken routers'&lt;br /&gt;
&lt;br /&gt;
Alternativ empfiehlt es sich, bei Problemen mal zu versuchen, TCP S-ACK (nicht das gleiche wie Window Scaling) auszuschalten&lt;br /&gt;
&lt;br /&gt;
 echo 0 &amp;gt;/proc/sys/net/ipv4/tcp_sack&lt;br /&gt;
&lt;br /&gt;
== Firewall im Eigenbau ==&lt;br /&gt;
&lt;br /&gt;
=== [[Firewall-Eigenbau-Mini-Howto]] ===&lt;br /&gt;
&lt;br /&gt;
[[IP-Tables Skripte für Single Host, SMB-Server und Router]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der Paketfilter iptables ist ein sehr komplexer Paketfilter der viele Möglichkeiten bietet.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wir betrachten zunächst das einfache Konzept am Bespiel von http. Irgendwo müssen wir die zu bestehenden Verbindungen gehörende Pakete erlauben&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j accept&amp;lt;/nowiki&amp;gt;) alle Paketen den Transport, die über diese Firewall laufen (&amp;lt;nowiki&amp;gt;FORWARD&amp;lt;/nowiki&amp;gt;) und ins lokale Netz wollen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) und zu bestehenden Verbindungen gehören (&amp;lt;nowiki&amp;gt;--state STABLISHED,RELATED&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier steht also: Erlaube (&amp;lt;nowiki&amp;gt;-j Accept&amp;lt;/nowiki&amp;gt;)  alle Pakete den Transport, die aus dem lokalen Netz stammen (&amp;lt;nowiki&amp;gt;-s $LOCAL_NET&amp;lt;/nowiki&amp;gt;) die einem neuen Verbundungsaufbau einleiten oder zu einer Verbindung gehören (&amp;lt;nowiki&amp;gt; --state NEW,ESTABLISHED,RELATED&amp;lt;/nowiki&amp;gt;) und einen Webserver kontaktieren (&amp;lt;nowiki&amp;gt;--dport http&amp;lt;/nowiki&amp;gt; ) und deren Quellportnummern über 1024 liegen (&amp;lt;nowiki&amp;gt; --sport $PORTS_HIGH&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Dagegen sieht die doppelte Strategie so aus, wobei natürlich klar ist das zu jedem erlaubten Port zwei Regeln notwendig sind:&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Client zum Server:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -s $LOCAL_NET -p tcp --sport $PORTS_HIGH --dport http -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verbindungen vom Server zum Client:&lt;br /&gt;
&amp;lt;nowiki&amp;gt;$IPTABLES -A FORWARD -d $LOCAL_NET -p tcp --dport $PORTS_HIGH --sport http -m state --state ESTABLISHED,RELATED -j ACCEPT&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Für heute mache ich Schluss, den Rest erläutere ich später.&lt;br /&gt;
&lt;br /&gt;
== Diverses ==&lt;br /&gt;
&lt;br /&gt;
=== [[Internet routen zu Windowsrechner]] ===&lt;br /&gt;
http://www.linux-club.de/viewtopic.php?t=9460 zusammenfassen&lt;br /&gt;
&lt;br /&gt;
=== [[Kanalbündelung ISDN - permanent!]] ===&lt;br /&gt;
http://www.linux-club.de/viewtopic.php?t=39732 zusammenfassen&lt;br /&gt;
&lt;br /&gt;
=== [[eth0 und eth1 Tauschen]] ===&lt;br /&gt;
Siehe &amp;lt;code&amp;gt;/etc/udev/rules.d/30-net_persistent_names.rules&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Router und 9.1]] ===&lt;br /&gt;
http://www.linux-club.de/viewtopic.php?t=9440 zusammenfassen&lt;br /&gt;
&lt;br /&gt;
=== Active FTP vs. Passive FTP, a Definitive Explanation ===&lt;br /&gt;
http://slacksite.com/other/ftp.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[UDP]] ===&lt;br /&gt;
Das User Datagram Protocol (Abk. UDP) ist ein minimales, verbindungsloses Netzprotokoll, das zur Transportschicht der Internetprotokollfamilie gehört. &lt;br /&gt;
----&lt;br /&gt;
[[Netzwerkprotokoll|Zurück zu Netzwerkprotokol]]&lt;br /&gt;
[[Kategorie:Netzwerkgrundlagen]]&lt;br /&gt;
[[Category:TCP/IP]]&lt;br /&gt;
[[Kategorie:Übersicht]]&lt;/div&gt;</summary>
		<author><name>Gaw</name></author>
		
	</entry>
</feed>