IT Security/Firewall

iptables – Grundlagen & sichere Konfiguration

Unter Linux bildet iptables die klassische Grundlage für Paketfilterung, Stateful Inspection, NAT und Portfreigaben. Diese Seite erklärt die Funktionsweise einer Firewall, die Struktur von iptables und zeigt praxisnahe Beispiele für eine sichere Server‑Konfiguration.

Was ist eine Firewall?

Eine Firewall überwacht und kontrolliert Netzwerkpakete anhand definierter Regeln. Sie schützt Systeme vor ungewolltem Zugriff, Angriffen und Datenabfluss. Unter Linux erfolgt dies über Netfilter, das durch iptables gesteuert wird.

  • Paketfilter – entscheidet, ob Pakete erlaubt oder blockiert werden
  • Stateful Inspection – erkennt Verbindungen und deren Status
  • NAT – Network Address Translation (z. B. für Router)
  • Logging – protokolliert sicherheitsrelevante Ereignisse

iptables – Aufbau & Funktionsweise

iptables arbeitet mit Tables, Chains und Rules. Jede Tabelle enthält Chains, die wiederum Regeln enthalten.

Wichtige Tabellen

  • filter – Standardtabelle für Paketfilterung
  • nat – für NAT, Port‑Forwarding, Masquerading
  • mangle – Paketmanipulation

Wichtige Chains

  • INPUT – eingehende Pakete
  • OUTPUT – ausgehende Pakete
  • FORWARD – weitergeleitete Pakete (Router)
  • PREROUTING – vor Routing‑Entscheidung (NAT)
  • POSTROUTING – nach Routing‑Entscheidung (NAT)

Grundkonfiguration einer sicheren Firewall

⚠️ Wichtiger Warnhinweis zur Standard-Policy

ACHTUNG: Wenn Sie via SSH verbunden sind, müssen Sie ZWINGEND zuerst die SSH-Regel (Schritt 3) aktivieren, bevor Sie die Standard-Policy auf DROP setzen (Schritt 5). Andernfalls werden Sie sofort ausgesperrt!

Sichere Reihenfolge bei SSH-Verbindung: Loopback → Established → SSH → ICMP → dann Standard-Policy

Sichere Reihenfolge lokal am Server: Loopback → Established → SSH → ICMP → dann Standard-Policy

1. Loopback‑Traffic erlauben

Wichtig: Immer zuerst aktivieren – benötigt für lokale Dienste und Systemfunktionen.

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -i lo -j ACCEPT

2. Bereits etablierte Verbindungen erlauben

Dies sichert bestehende Verbindungen (wichtig wenn Sie via SSH arbeiten).

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

3. SSH‑Zugriff erlauben

ZUERST aktivieren, bevor Sie Standard-Policies setzen! Wenn via SSH verbunden: Diese Regel sofort vor Schritt 4 ausführen.

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

4. ICMP (Ping) kontrolliert erlauben

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

5. Standard‑Policies setzen

Erst jetzt die Standard-Policies auf DROP setzen – nachdem die erlaubenden Regeln aktiv sind:

bashKlick markiert alles · Strg + C
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

Firewall‑Logging

Logging ist essenziell, um Angriffe zu erkennen und Fehlkonfigurationen zu analysieren.

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: " --log-level 4

Logs erscheinen in:

bashKlick markiert alles · Strg + C
/var/log/syslog

NAT & Port‑Weiterleitung (Router‑Betrieb)

Masquerading (Internetfreigabe)

bashKlick markiert alles · Strg + C
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Port‑Forwarding

Beispiel: Port 80 extern → interner Webserver 192.168.1.50:80

bashKlick markiert alles · Strg + C
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
    -j DNAT --to-destination 192.168.1.50:80

Firewall‑Härtung (Hardening)

Die folgenden Maßnahmen erhöhen die Sicherheit einer iptables‑basierten Firewall erheblich.

1. SSH‑Brute‑Force‑Schutz

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
    -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
    -m recent --update --seconds 60 --hitcount 5 -j DROP

2. Port‑Scanning erkennen & blockieren

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -m recent --name portscan --set -j DROP
sudo iptables -A INPUT -m recent --name portscan --update --seconds 60 --hitcount 10 -j DROP

3. SYN‑Flood‑Schutz

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
sudo iptables -A INPUT -p tcp --syn -m limit --limit 5/s -j ACCEPT

4. Ungültige Pakete verwerfen

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -m state --state INVALID -j DROP

5. Fragmentierte Pakete blockieren

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -f -j DROP

6. Private IP‑Bereiche auf WAN‑Interface blockieren

Schützt vor Spoofing‑Angriffen:

bashKlick markiert alles · Strg + C
sudo iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
sudo iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
sudo iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

Regeln dauerhaft speichern

iptables‑Regeln sind nach einem Neustart verloren. Persistenz aktivieren:

bashKlick markiert alles · Strg + C
sudo apt install iptables-persistent
sudo netfilter-persistent save

Firewall‑Konfiguration anzeigen

bashKlick markiert alles · Strg + C
sudo iptables -L -v -n

Best Practices für eine sichere Firewall

  • Standard‑Policy: DROP
  • Nur notwendige Ports öffnen
  • SSH absichern (Key‑Login, Fail2Ban, Rate‑Limit)
  • Regelmäßige Log‑Analyse
  • Firewall‑Regeln dokumentieren
  • Regelmäßige Backups der iptables‑Konfiguration

Mit einer sauber konfigurierten iptables‑Firewall lässt sich ein Linux‑System effektiv gegen Angriffe schützen. Die Kombination aus Paketfilterung, Stateful Inspection, Logging und Hardening bildet eine robuste Sicherheitsbasis für Server und Netzwerke.