Übersicht über iptables

Ein praktisches Nachschlagewerk zur Verwaltung der Linux-Firewall mit iptables.

iptables ist die standardmäßige Befehlszeilenschnittstelle zur Verwaltung der netfilter-Firewall im Linux-Kernel. Alle iptables-Befehle erfordern root-Rechte.

Verschaffen Sie sich root-Zugriff, bevor Sie diese Befehle ausführen: sudo -i auf Debian-basierten Systemen oder su auf anderen.

Regeln und Status anzeigen

Alle Regeln mit ausführlicher Ausgabe anzeigen:

iptables -L -n -v

Regeln mit Zeilennummern anzeigen:

iptables -n -L -v --line-numbers

Nur die INPUT- oder OUTPUT-Kette anzeigen:

iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers

Flags:

  • -L — Regeln auflisten
  • -v — ausführliche Ausgabe (Interface, Optionen, K/M/G-Suffixe)
  • -n — IPs und Ports als Zahlen anzeigen, DNS-Abfragen überspringen

Firewall starten und stoppen

Über den Systemdienst:

service ufw stop
service ufw start

Alle Regeln manuell leeren:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Flags:

  • -F — alle Regeln leeren (flush)
  • -X — eine Kette löschen
  • -t — Tabelle auswählen (nat, mangle)
  • -P — Standardrichtlinie festlegen

Regeln hinzufügen und entfernen

Regel anhand der Zeilennummer löschen:

iptables -L INPUT -n --line-numbers    # Zeilennummer ermitteln
iptables -D INPUT 3                    # Zeile 3 löschen

Regel anhand der Quell-IP löschen:

iptables -D INPUT -s 202.54.1.1 -j DROP

Regel zwischen Zeile 1 und 2 einfügen:

iptables -I INPUT 2 -s 202.54.1.2 -j DROP

Regeln speichern und wiederherstellen

iptables-save > /etc/iptables.rules      # speichern
iptables-restore < /etc/iptables.rules  # wiederherstellen

Standardrichtlinien

Gesamten Datenverkehr verwerfen (alles ablehnen):

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Unerwünschten eingehenden Datenverkehr verwerfen, ausgehenden erlauben:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

IP-Adressen und Netzwerke blockieren

Eine bestimmte IP-Adresse blockieren:

iptables -A INPUT -s 1.2.3.4 -j DROP

Private Netzwerkbereiche an einem öffentlichen Interface verwerfen:

iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Private Adressbereiche:

  • 10.0.0.0/8 (Klasse A)
  • 172.16.0.0/12 (Klasse B)
  • 192.168.0.0/16 (Klasse C)
  • 224.0.0.0/4 (Multicast D)
  • 240.0.0.0/5 (Klasse E)
  • 127.0.0.0/8 (Loopback)

Ports blockieren

Alle eingehenden Verbindungen auf Port 80 blockieren:

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

Port 80 für eine bestimmte IP-Adresse blockieren:

iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP

Einen Portbereich öffnen:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Ausgehende Verbindungen nach Domain blockieren

IP-Adresse und CIDR ermitteln:

host -t a facebook.com
whois 69.171.228.40 | grep CIDR

Den Bereich blockieren:

iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

Protokollierung

Paket protokollieren und verwerfen:

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Protokollierung mit Ratenbegrenzung (max. 7 Einträge alle 5 Minuten):

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: "
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Protokoll prüfen:

tail -f /var/log/messages
grep -i --color 'IP SPOOF' /var/log/messages

MAC-Adress-Filterung

iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP

::: front-promo-main-services
:::

# Nur TCP-Port 22 von einer bestimmten MAC-Adresse erlauben
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

ICMP (Ping) verwalten

Referenz der ICMP-Nachrichtentypen:

Typ Beschreibung
0 Echo reply (Ping-Antwort)
3 Destination unreachable
4 Source quench
5 Redirect
8 Echo request (Ping)
11 Time-to-live exceeded
12 IP header bad

Empfohlen — nur sichere ICMP-Typen erlauben:

iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT

Alle Ping-Anfragen blockieren:

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Ping nur aus dem lokalen Subnetz erlauben:

iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

Gängige Ports — öffnen oder schließen

Ersetzen Sie ACCEPT durch DROP, um einen Port zu blockieren:

# SSH (Port 22)
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# HTTP / HTTPS
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# SMTP (Port 25)
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT

# DNS (Port 53)
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

# POP3 (Port 110)
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

# IMAP (Port 143)
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

# MySQL (Port 3306) — nur lokales Netzwerk
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

# Samba — nur lokales Netzwerk
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

# NTP (Port 123)
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Verbindungslimits

Maximal 3 SSH-Sitzungen pro IP-Adresse erlauben:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

HTTP auf 20 gleichzeitige Verbindungen pro /24-Subnetz begrenzen:

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

Flags:

  • --connlimit-above N — Regel anwenden, wenn die Verbindungsanzahl N überschreitet
  • --connlimit-mask 24 — Limit pro /24-Subnetz anwenden

IP-Adressbereiche

Zugriff auf Port 80 für einen bestimmten IP-Adressbereich erlauben:

iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

Hilfe

Bei Fragen oder wenn Sie Unterstützung brauchen, erreichen Sie uns jederzeit über das Ticketsystem — wir helfen Ihnen gern weiter!

Hilfe benötigt?Unsere Ingenieure helfen Ihnen kostenlos bei jeder Frage in wenigen MinutenKontaktieren Sie uns