Files
TI-Studium-Mitschriften/Semester 6/ITSARCH/Skript_Notizen/IPTables.md
2025-07-02 13:08:03 +02:00

106 lines
3.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 🔥 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!