106 lines
3.3 KiB
Markdown
106 lines
3.3 KiB
Markdown
## 🔥 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
|
||
---
|
||
Wenn du möchtest, kann ich dir daraus auch:
|
||
- eine **Befehlstabelle zum Auswendiglernen**
|
||
- ein **Mini-Quiz**
|
||
- oder eine **interaktive Übung** zur Regel-Erstellung erstellen.
|
||
Sag einfach Bescheid! |