## 🔥 GRUNDLAGEN: IPTABLES & NETFILTER ### Was ist iptables? - Linux-Tool zur Konfiguration von **netfilter** (seit Kernel 2.4) - Nachfolger von `ipchains`, `ipfadm` - **Zentrale Aufgabe**: Regeln zur Filterung und Manipulation von IP-Paketen definieren - Besteht aus: - **Tabellen** (z. B. `filter`, `nat`, `mangle`) - **Ketten** (z. B. `INPUT`, `OUTPUT`, `FORWARD`) - **Regeln** --- ## 📊 TABELLEN & KETTEN |Tabelle|Zweck|Enthält Ketten| |---|---|---| |`filter`|Paketfilterung (Standard)|`INPUT`, `OUTPUT`, `FORWARD`| |`nat`|IP/Port-Umschreibung (SNAT/DNAT)|`PREROUTING`, `POSTROUTING`, `OUTPUT`| |`mangle`|Modifikation von Header-Daten (QoS, TTL, etc.)|alle Ketten| --- ## 🔄 KETTEN (CHAINS) |Chain|Beschreibung| |---|---| |`INPUT`|Eingehende Pakete für lokalen Rechner| |`OUTPUT`|Vom lokalen Rechner ausgehende Pakete| |`FORWARD`|Weitergeleitete Pakete (Routerbetrieb)| |`PREROUTING`|Vor Routingentscheidung (z. B. DNAT)| |`POSTROUTING`|Nach Routingentscheidung (z. B. SNAT)| - Ketten enthalten **Regeln**, die in Reihenfolge geprüft werden - Jede Kette besitzt eine **Standardregel (Policy)** (z. B. `DROP`, `ACCEPT`) --- ## 🧾 BEFEHLE (AUSZUG) |Befehl|Beschreibung| |---|---| |`-F`|Alle Regeln in Kette löschen| |`-X`|Benutzerdefinierte Kette löschen| |`-P`|Policy (Standardverhalten) setzen| |`-A`|Regel anhängen| |`-I`|Regel an Position einfügen| |`-D`|Regel löschen| |`-L`|Regeln anzeigen| |`-N`|Neue benutzerdefinierte Kette erstellen| |`-Z`|Zähler zurücksetzen| --- ## 🧠 WICHTIGE PARAMETER |Parameter|Beschreibung|Beispiel| |---|---|---| |`-p`|Protokoll (`tcp`, `udp`, `icmp`)|`-p tcp`| |`-s`|Quelladresse|`-s 192.168.0.0/24`| |`-d`|Zieladresse|`-d 10.0.0.1`| |`-i`|Eingangsinterface|`-i eth0`| |`-o`|Ausgangsinterface|`-o ppp0`| |`--dport`|Zielport|`--dport 22`| |`-j`|Zielaktion (`ACCEPT`, `DROP`, `LOG`, `REJECT`, etc.)|`-j DROP`| --- ## 🧪 BEISPIELE ```sh iptables -A INPUT -p icmp -j DROP # Blockiert alle Ping-Anfragen ``` ```sh iptables -I INPUT 1 -p icmp -s 192.168.0.0/24 -j ACCEPT # Erlaubt ICMP (Ping) aus lokalem Netz vor DROP-Regel ``` ```sh iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE # SNAT bei Verlassen des Rechners über ppp0 ``` ```sh iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 # Portweiterleitung für transparenten Proxy ``` --- ## ⚙️ BENUTZERDEFINIERTE KETTEN Beispiel: Logging + Blocken ```sh iptables -N log-drop iptables -A log-drop -j LOG -m limit --limit 6/minute iptables -A log-drop -j DROP iptables -A INPUT -p tcp --dport 22 -i ppp0 -j log-drop ``` --- ## 🧰 KOMPLETTES FIREWALL-SKRIPT (MINIMALE VARIANTE) ```sh #!/bin/sh FW="/sbin/iptables" # 1. Regeln & Ketten löschen $FW -F $FW -X $FW -t nat -F # 2. Standardregeln: alles erlauben $FW -P INPUT ACCEPT $FW -P FORWARD ACCEPT $FW -P OUTPUT ACCEPT # 3. Ping blockieren $FW -A INPUT -p icmp -j DROP ``` --- ## ✅ BEST PRACTICE - **Besser**: „Blockiere alles, erlaube nur was nötig ist“ (Default: DROP) - Verwende `--state ESTABLISHED, RELATED`, um gültige Verbindungen zu erlauben - Speichere Regeln in Skripten (z. B. `/etc/network/firewall`) und rufe sie über `/etc/rc.local` auf