## 🔥 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