| Firewall - Iptables |
|
|
|
iptables
Netfilter ist der "linux kernelspace program code", der die firewall in
den linux kernel implementiert, entweder als dynamisch ladbare Module
oder als fixer Bestandteil des Kernels. Auf der anderen Seite gibt es die "iptables-software", das sogenannte "userland program", das Administrationstool für "netfilter firewalls. Eine "packet filtering firewall" (Paketfilter Firewall) besteht aus einer Liste von "Verbotsregeln" und "Erlaubregeln". Diese Regeln sollen also festlegen, welche Pakete ins eigene Netz hinein dürfen, und welche nicht. Man kann diese Regeln selbstverständlich auch für den eigenen Rechner aufstellen, was zu Beginn auch ein sehr willkommenes Trainingsfeld darstellt. root@linux:~# type -p iptablesHier sehen wir, wie wir schnell checken können, ob iptables installiert ist, und welche Version es ist. Natürlich kann sich die Versionsnummer auf Ihrem Rechner von der obigen unterscheiden! Eine iptables-Regel kann das dynamische Laden von Netfilter-Modulen verursachen. root@linux:~# ifconfig eth0So sieht es bei mir aus. Wir werden jetzt iptables dazu einsetzen, die ersten Regeln zu formulieren, und um unsdiese dann auflisten zu lassen. die formulierten Regeln gehören einer "Rulechain" (Regelkette) an, die in Tabellen eingetragen werden. Es gibt drei Tabellen:
Mittels iptables -t <Tabllenname> können Sie die Tabelle angeben. Die Tabelle "filter" ist voreingestellt (default), was bedeutet, dass Sie für Regeln, die für eine kette in der Filtertabelle bestimmt sind, nicht jedes mal "-t filter" tippen müssen. Jede Tabelle hat ihre built-in-chains. Filter hat INPUT, OUTPUT und FORWARD. Die chains der anderen beiden Tabellen werden wir später angehen. Jede Regel ind er Filtertabelle gehört also zu einer Regelkette. Eine Regel ist vergleichbar wie eine Perle aufgefädelt auf eine Schnur.
Da gibt es etwas, das man "Default Policy" nennt. Diese Default Policy
tritt genau dann in Kraft, wenn keine der formulierten Regeln auf ein
Paket zutrifft. root@linux:~# iptables -LWir hätten hier also genausogut als Kommando "iptables -t filter -L" schreiben können, da aber filter default ist, konnten wir uns das schenken. Sie sehen hier also den Inhalt der filter-Tabelle aufgelistet, eingeteilt in die bereits erwähnten Ketten INPUT, FORWARD und OUTPUT. Wenn Sie sich bloss den Inhalt der INPUT-chain ausgeben lassen wollten, dann brächten Sie nur INPUT am obigen Kommando anhängen. root@linux:~# ping -c 3 localhostlocalhst lässt sich also pingen. Jetzt wollen wir die Default Policy auf DROP setzen, wie nachstehend gezeigt wird root@linux:~# iptables -P INPUT DROPVorsicht! jetzt ist alles zu! Wenn die Default-Policy auf DROP gesetzt wird, dann bedeutet das schlichtweg, dass nur die "Erlaubt-Regeln" Pakete durchlassen, alle anderen werden abgewiesen (e-dropped). Diese obige Default-Policy lässt sich mit folgendem Satz wohl am besen beschreiben: Damit wir nun den localhost wieder pingen können, müssen wir Regel formulieren, die das zulassen - eine Regel für eingehende Pakete und eine Regel für ausgehende Pakete, oder anders gesagt, eine INPUT-Regel und eine OUTPUT-Regel. root@linux:~# iptables -A INPUT -i lo -j ACCEPT"iptables -A INPUT -i lo -j ACCEPT" bedeutet, dass wir (-A) eine Regel am Ende aller bereits vorhandenen Regel der INPUT-Kette anhängen (ausgenommen der Default-Regel, die IMMER am Ende stehen bleibt!). Das incoming-device (input-device - "-i") war das loopback-device (lo) und zuguterletzt sehen wir "-j ACCEPT", was bedeutet, dass das Paket, dass dieser Regel entspricht, auf ein Ziel hüpfen (jump "-j") soll - in diesem Fall hiess das Ziel ACCEPT. Weitere Ziele könnten sein: "DROP" oder "REJECT" oder eine andere selbstkreierte Kette, aber dazu später. Was hier für uns am meisten zählt ist, dass der "traffic" durch das loopback-device derzeit der enizig erlaubte ist auf der lokalen Maschine. Und da der "loopback-traffic" ein geschlossener Kreislauf ist, kann es auf der firewall gleich und voll erlaubt werden. Lassen Sie uns die momentanen Regeln auflisten ... root@linux:~# iptables -L Die FORWARD-chain brauchen wir derzeit noch nicht und wollen diese daher erst später besprechen. Wir brauchen FORWARD dann, wenn wir mehr als ein Ethernet-device in unserem Rechner eingebaut haben ... Die obige Auflistung hat das loopback-device nicht angezeigt. Zum Glück gibt es da noch eine Option, nämlich "-v", die eine detailliertere Ausgabe liefert. Und damit wir die Ausgabe in Zahlen (IP-Adressen, portnummern, etc) aufgelöste Namen angezeigt bekommen, fügen wir noch die Option "-n" hinzu. Aufgepasst! "-L" ist ein KOMMANDO, dem der Name einer Kette folgen kann, aber -v und -n sind Optionen. root@linux:~# iptables -vn -L
Über FORWARD, fragmentation REJECT und DROP werden wir uns später noch die Köpfe zerbrechen.
Eine weitere Regel könnte folgendermassen aussehen: root@linux:~# iptables -A INPUT -i eth0 -p tcp -j ACCEPT Spätestens jetzt sehen Sie, dass wir ständig in zwei Richtungen
denken müssen! Hereinkommende Pakete, ausgehende Pakete. Ja - wir haben
hereinkommenden und ausgehenden traffic zur selben Zeit! (full duplex).
Die obigen zwei Regeln meinen, dass eingehender und ausgehender
TCP/IP-traffic erlaubt ist.
root@linux:~# grep TCP /etc/protocols Hier sahen Sie eine Zeile von /etc/protocols. Schauen Sie ruhig einmal tiefer in dieses file hinein! Natürlich werden Sie nicht als einzige Regel gleich allen ein- oder ausgehenden tcp-traffic erlauben wollen, und es ging mir hier wieder nur um ein erstes Beispiel. Also, lassen Sie uns jetzt eine bestimmte IP-Adresse sperren!: root@host:~# host www.orf.at und die website vom orf wird angezeigt. (Natürlich können Sie einen Browser Ihrer Wahl einsetzen!) root@linux:~# iptables -A INPUT -i eth0 -s 194.232.104.26 -p tcp -j DOUPS! Die Seite wird immer noch angezeigt, dabei hätte doch unsere Regel diese IP-Adresse sperren sollen, nicht wahr? Das führt uns zur nächsten Regel: Schauen Sie sich die Reihenfolge der Regeln an, die auf der INPUT-Kette "aufgefädelt" sind - zuerst kommt die "jeder tcp-traffic" ist erlaubt, und danach erst kommt das Verbot für tcp-traffic von IP 194.232.104.26, doch zu dieser Regel kommt das tcp-Paket nicht mehr, da es schon vorher zugelassen (ACCEPT) wurde. Versuchen wir das folgende: root@linux:~# iptables -I INPUT 1 -i eth0 -s 194.232.104.26 -p tcp -j Also JETZT ist es tatsächlich gesperrt! root@linux:~# iptables -L -n -vvMit "--line-numbers" können Sie sich die Positionsnummer einer Regel zusätzlich ausgeben lassen. root@linux~# iptables -I INPUT -i eth0 -s 194.232.104.26 \ Hier sehen wir auch den klugen Einsatz von Backslashes, da bei längeren Regeln die Backslashes f&uum;r mehr Übersicht sorgen können. Aber VORSICHT! Nach dem Backslash darf kein Leerzeichen sein! Okay - was tut die zuletzt formulierte Regel? Mit -I ohne Positionsangabe bedeutet, wie wir ja schon wissen, dass die Regel an erster Stelle in der Kette zu stehen kommen wird. Also, das Paket, dass der DROP-Regel zum Opfer fällt, wird zuvor aufgrund dieser LOG-Regel vorher noch gelogged, bevor es gedropped wird. "-s" leitete die Angabe der Source-IP-Adresse ein, und wenn Sie die Destination-IP-Adresse (Ziel-IP) angeben wollten, dann würde diese IP-Adresse mit "-d" eingeleitet werden. Man kann auch einen TCP oder UDP destination-port und/oder source-port angeben. Hierfür schauen Sie wieder einmal in das file /etc/services hinein ... root@linux:~# less /etc/servicesEs kann der Name (ssh) oder die Zahl (22) angegeben werden. root@linux:~# iptables -I INPUT 3 -i eth0 -s 192.168.3.88 -p tcp --sp Sie sehen schon - die Regeln werden immer genauer! FlushingMan kann mit einem Kommando alle Regeln auf den
einzelnen Regelketten löschen. Man nennt es "flush", was man mit
"Hinunterlassen" (wie beim Klo) übersetzen könnte.
root@linux:~# iptables -FAlle Regeln wurden jetzt gelöscht. Alle, ausser die Default-Policy, was ja keine Regel ist, sondern ein Standardverhalten einer Regelkette. Diese Kommando ist so unscheinbar, aber immens wichtig! Wenn wir später Firewall-Skripte schreiben, brauchen wir diesesn Befehl. Warum? Weil, wenn die Regeln, die durch den ersten Aufruf des Firewall-Skripts auf die einzelnen Ketten "aufgefädelt" wurden, nicht extra gelöscht würden, dann würden beim nächsten Aufruf desselben Skriptes diesselben Regeln einfach erneut unterhalb der bestehenden Regeln (oder auch nicht, wenn -I gesetzt) aufgefädelt werden. root@linux:~# iptables -L Tatsächlich! Alle Regeln sind verschwunden, nur die Default-Policy ist geblieben, und da diese auf DROP gesetzt sind, wollen wir wieder ein paar Regeln formulieren ... root@linux:~# iptables -A INPUT -i lo -j ACCEPT |
|
| Letzte Aktualisierung ( Monday, 7. May 2007 ) |
| < Zurück | Weiter > |
|---|



