SelfLinux Sicherheit IP-Tables Abschnitt 4 | SelfLinux-0.13.0

| IP-Tables | Autor Formatierung GFDL

#### 6 Praktischer Einstieg in iptables

#### 6.1 Grundlegendes zu iptables

Wie bereits erwähnt sind nach dem Booten keine Regeln in einer der eingebauten Ketten (INPUT, OUTPUT, FORWARD) vorhanden, und die Policy (Sicherheitspolitik) steht standardmäßig auf ACCEPT.

(Achtung: manche Distributionen haben iptables-Befehle in den Init-Skripten)

Die Standard-Policy kann geändert werden, wenn das iptables_filter Kernelmodul mit einer entsprechende Option gestartet wurde (z.B. für FORWARD-Kette: forward=0).

Das Programm iptables bietet folgende Optionen zur Verwaltung von Filterregelketten:

- Eine neue Kette erstellen (-N).
- Eine leere Kette löschen (-X). (geht nicht mit INPUT, OUTPUT und FORWARD)
- Die Policy für eine eingebaute Kette ändern (-P).
- Die Regeln einer Kette auflisten (-L).
- Die Regeln aus einer Kette entfernen (flush) (-F).
- Paket und Bytezähler aller Regeln einer Kette auf Null stellen (-Z).

Verwaltung der Regeln in einer Kette:

- Eine neue Regel an eine Kette anhängen (-A).
- Eine neue Regel an eine bestimmte Position in der Kette einfügen (-I).
- Eine Regel an bestimmter Position in der Kette ersetzen (-R).
- Eine Regel an einer bestimmten Position in der Kette löschen (-D).
- Die erste passende Regel in einer Kette löschen (-D).

#### 6.2 Operationen auf einer einzelnen Regel (Regeln manipulieren)

Mit den Befehlen zum Anhängen (-A) oder Löschen (-D) einer Regel stehen die grundlegenden Kommandos zur Verfügung. Weitere Befehle zum Einfügen (-I) und zum Ersetzen (-R) sind einfache Erweiterungen, die das Leben manchmal erleichtern und die dennoch kaum gebraucht werden.

Jede Regel definiert eine Menge von Bedingungen, die ein eintreffendes Paket erfüllen muss, und ein Ziel (target), welches das weitere Schicksal des Paketes bestimmt.

Zum Beispiel:

Es sollen alle ICMP-Pakete (z.B. von ping generiert) verworfen werden, die vom lokalen Rechner 127.0.0.1 stammen:

Bedingungen: Protokoll ICMP und Quelladresse 127.0.0.1
Ziel: ist Verwerfen (DROP).

Ping sendet einen echo request (ICMP Typ 8) und alle kooperierenden Hosts antworten darauf verbindlich mit einem echo reply (ICMP Typ 0).

ohne Filter

root@linux # ping -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.2/0.2/0.2 ms

Jetzt wird die INPUT-Kette um eine Regel erweitert (-A), so dass Pakete, die von 127.0.0.1 (-s 127.0.0.1) kommen und das Protokoll ICMP (-p icmp) verwenden, zu verwerfen sind (-j DROP):

root@linux # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

Test

root@linux # ping -c 1 127.0.0.1 PING 127.0.0.1 (127.0.0.1): 56 data bytes --- 127.0.0.1 ping statistics --- 1 packets transmitted, 0 packets received, 100% packet loss

Die Regel scheint zu funktionieren. Doch wie löscht man nun diese Regel wieder? Wenn die Position der Regel in der Kette bekannt ist (in diesem Fall gibt es nur die eine Regel, deshalb Position 1), kann man diese Position als Parameter verwenden:

root@linux # iptables -D INPUT 1

Sollte die Position jedoch nicht bekannt sein, so muss man die Regel nochmals vollständig angeben, also genau wie beim Anhängen der Regel, nur das anstelle des Befehls -A der Befehl -D steht:

root@linux # iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

Wenn die Regel mehrfach in Regelkette aufgenommen wurde, so wird nur die erste gelöscht. Man sollte also IMMER nach dem Entfernen nochmals alles kontrollieren! (In diesem Falle also mit ping)

#### 6.3 Schnelle Lösung ohne viele Worte

Viele Leser nutzen nur Modem/ISDN oder DSL-Verbindung zum Internet und die einzige Sorge ist, dass niemand vom Internet in ihren Computer oder privates Netzwerk kommen kann. Die folgende Anleitung funktioniert mit einem 2.4er/2.6er Kernel.

1) Kernelmodule einfügen, wenn diese noch nicht einkompiliert wurden (notwendig wegen Verbindungsverfolgung)

root@linux # modprobe ip_conntrack root@linux # modprobe ip_conntrack_ftp

2) Befehle ausführen (am besten ein SysV-Initskript erstellen, welches beim Hochfahren des Rechners automatisch gestartet wird)

SysV-Initskript

    # alle Verbindung blocken, es sei denn, sie kommen von innen

    iptables -N block
    iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A block -m state --state NEW -i ! ppp0 -j ACCEPT
    iptables -A block -j DROP

    # Von INPUT und FORWARD Ketten zu dieser Kette springen

    iptables -A INPUT -j block
    iptables -A FORWARD -j block