iptables - Die Firewall des Kernels 2.4
| [!] -s <adresse> [/<maske>] | Prüfen des Paketes auf seine Quell-Adresse bzw. den Adress-Bereich. Die Maske kann als Zahl 0..32 (=Anzahl der zu testenden Bits) oder als Subnetzmaske, z.B. 255.255.255.248 angegeben werden. | |
| [!] -d <adresse> [/<maske>] | Prüfen des Paketes auf seine Ziel-Adresse bzw. den Adress-Bereich. Die Maske kann als Zahl 0..32 (=Anzahl der zu testenden Bits) oder als Subnetzmaske, z.B. 255.255.255.248 angegeben werden. | |
| [!] -i <interface> [+] | Prüfung auf das Interface, auf dem das Paket ankam. Diese Bedingung ist nur sinnvoll bei den Chains INPUT, FORWARD oder PREROUTING. Ein "+" am Ende des Namens trifft alle Interfaces mit dem vorangehenden Wort am Anfang, z.B. "ippp+" für "ippp0, ippp1, ..." | |
| [!] -o <interface> [+] | Prüfung auf das Interface, auf dem das Paket den Rechner verlassen wird.. Diese Bedingung ist nur sinnvoll bei den Chains OUTPUT, FORWARD oder POSTROUTING. Ein "+" am Ende des Namens trifft alle Interfaces mit dem vorangehenden Wort am Anfang, z.B. "eth+" für "eth0, eth1, ..." | |
| [!] -f | Testen auf Fragmente oder unfragmentierte Pakete ("!" vorangestellt.) | |
| [!] -p tcp -m tcp | Testen, ob das Paket TCP-Protokoll überträgt, bzw. nur Laden der Erweiterung "tcp" (-m). Nachfolgende Optionen sind nur in einem der beiden Fälle möglich: | |
| --source-port [!] [<port[:<port>]>] --sport [!] [<port[:<port>]>] | Prüfen des Quell-Ports des Paketes oder eines Port-Bereiches. | |
| --destination-port [!] [<port[:<port>]>] --dport [!] [<port[:<port>]>] | Prüfen des Ziel-Ports des Paketes oder eines Port-Bereiches. | |
| --tcp-flags [!] <maske> <komponente> | Maskiert die angegebenen TCP-Flags und prüft, ob die angegebenen Komponenten gesetzt sind. Masken und Komponenten können die Flags "SYN", "ACK", "FIN", "RST", "URG", "PSH" oder "ALL" und "NONE" sein. z.B. --tcp-flags SYN,ACK,FIN SYN läßt nur die Pakete durch, bei denen SYN gesetzt, ACK und FIN ungesetzt sind. | |
| [!] --syn | läßt nur die Pakete durch, bei denen SYN gesetzt, ACK und FIN ungesetzt sind. | |
| [!] -p udp -m udp | Testen, ob das Paket UDP-Protokoll überträgt, bzw. nur Laden der Erweiterung "udp" (-m). Nachfolgende Optionen sind nur in einem der beiden Fälle möglich: | |
| --source-port [!] [<port[:<port>]>] --sport [!] [<port[:<port>]>] | Prüfen des Quell-Ports des Paketes oder eines Port-Bereiches. | |
| --destination-port [!] [<port[:<port>]>] --dport [!] [<port[:<port>]>] | Prüfen des Ziel-Ports des Paketes oder eines Port-Bereiches. | |
| [!] -p icmp -m icmp | Testen, ob das Paket ICMP-Protokoll überträgt, bzw. nur Laden der Erweiterung "icmp" (-m). Nachfolgende Option ist nur in einem der beiden Fälle möglich: | |
| --icmp-type [!] <name> | Prüfen der ICMP-Nachricht. Eine Liste der Nachrichten kann mit "iptables -p icmp -h" erhalten werden. | |
| -m mac | Einbinden des Moduls zur MAC-Adressen-Überprüfung (=Ethernet Interface Adresse). Nachfolgende Option ist nur bei geladenem "mac" Modul möglich: | |
| --mac-source [!] <xx:xx:xx:xx:xx:xx> | Prüfen der Ethernet-Quell-Adresse. Ist nur sinnvoll in den Chains PREROUTING, FORWARD oder INPUT. | |
| -m multiport | Dieses Modul erlaubt das Testen mehrerer einzelner Ports. Es lassen sich in den nachfolgenden Optionen bis zu 15 Ports angeben. | |
| --source-port [<port[,<port>]>] | Prüfen des Quell-Ports des Paketes. | |
| --destination-port [<port[,<port>]>] | Prüfen des Ziel-Ports des Paketes. | |
| --port [<port[,<port>]>] | Prüfen des Quell- oder Ziel-Ports des Paketes. | |
Beispiele:
# Alle Regeln aller Chains in der "filter" Tabelle löschen # iptables -F # # Pakete an lokale Prozesse # ------------------------- # # Policy (Standardverhalten am Regelende): Paket verwerfen iptables -P INPUT DROP # TCP-Pakete aus dem lokalen Netz durchlassen iptables -A INPUT -p tcp -s 192.168.1.0/24 -j ACCEPT # TCP-Pakete ohne SYN-Flag wegwerfen (an dieser Stelle Unsinn!) # (Info: SYN-Flag ist nur beim Ersten Paket einer TCP-Verbindung gesetzt) iptables -A INPUT -p tcp ! --syn -j DROP # TCP-Pakete an Ziel-Port 113 (auth) erlauben iptables -A INPUT -p tcp --dport 113 -j ACCEPT # UDP-Pakete aus lokalem Netz passieren lassen iptables -A INPUT -p udp -s 192.168.1.0/24 -j ACCEPT # UDP-Pakete von Name-Servern durchlassen iptables -A INPUT -p udp --sport 53 -j ACCEPT # ICMP-Pakete (z.B. Ping) aus lokalem Netz erlauben iptables -A INPUT -p icmp -s 192.168.1.0 -j ACCEPT # ICMP-Pakete (z.B. Ping) generell verbieten iptables -A INPUT -p icmp -j DROP # # Pakete, die geroutet werden # --------------------------- # # Policy (Standardverhalten am Regelende): Paket verwerfen iptables -P FORWARD DROP # Pakete aus lokalem Netz erlauben und routen iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT # # Pakete von lokalen Prozessen # ---------------------------- # # Policy (Standardverhalten am Regelende): Paket durchlassen iptables -P OUTPUT ACCEPT # # sonst keine Einschränkungen -- wir stellen nichts an :-)
Wie man sich leicht überlegen kann, lassen sich mit diesen Regeln bereits einfache Schutzmechanismen aufbauen - allerdings nur wirklich einfache Mechanismen. Denn eine Prüfung kann nur für jedes Paket einzeln durchgeführt werden und kennt keine Zustände. So sind z.B. Befehle wie "ping" generell verboten und Ergebnisse von Name-Server-Abfragen generell erlaubt, was Angreifern leicht die Möglichkeit eines Eindringens bieten kann und gleichzeitig starke Einschränkungen darstellt.

