Netzwerksicherheit · 9 min read · Feb 13, 2026

Grundlagen von Iptables - Debian/RedHat

Zusammenfassung

Eine leichter lesbare Version finden Sie hier: 5dollarwhitebox.org

Viele Leute sind von IPTables verunsichert und finden es schwer zu verstehen. Sobald man jedoch den Dreh raus hat, sind die Grundlagen einfach. Dieses Dokument dient als grundlegende Anleitung zur Verwendung von iptables. Ich bin keineswegs ein iptables-Guru, habe es aber schon eine Weile so verwendet. Wenn ich Fehler gemacht habe, zögern Sie bitte nicht, mir eine E-Mail zu senden.

Das System

Debian Sarge 3.1
Vanilla 2.6.12.4 Kernel von mirrors.kernel.org
iptables-Verwaltungsprogramm Version 1.2.11-10

Vorbereitung

Diese Anleitung wird auf einer Debian Sarge 3.1-Box durchgeführt, obwohl die Befehle und die Syntax für jede Linux-Distribution funktionieren sollten. Bevor Sie iptables konfigurieren können, müssen Sie zunächst sicherstellen, dass es in den Kernel kompiliert wurde und dass Sie die richtigen Benutzerland-Utilities installiert haben.

Sie sollten eine Konfigurationsdatei haben, die beim Kompilieren des Kernels erstellt wurde. Ein Grep-Befehl nach “CONFIG_IP_NF” sollte für die meisten Zeilen/Optionen ‘=y’ oder ‘=m’ ergeben. Hier sehen Sie, dass “CONFIG_IP_NF_IPTABLES” als Kernel-Modul kompiliert wurde.

# cat /boot/config-2.4.30 | grep -i “CONFIG_IP_NF”

  • CONFIG_IP_NF_CONNTRACK=m
    CONFIG_IP_NF_FTP=m
    CONFIG_IP_NF_AMANDA=m
    CONFIG_IP_NF_TFTP=m
    CONFIG_IP_NF_IRC=m
    CONFIG_IP_NF_QUEUE=m
    CONFIG_IP_NF_IPTABLES=m
    CONFIG_IP_NF_MATCH_LIMIT=m
    CONFIG_IP_NF_MATCH_MAC=m
    CONFIG_IP_NF_MATCH_PKTTYPE=m
    CONFIG_IP_NF_MATCH_MARK=m
    CONFIG_IP_NF_MATCH_MULTIPORT=m
    CONFIG_IP_NF_MATCH_TOS=m
    CONFIG_IP_NF_MATCH_RECENT=m
    CONFIG_IP_NF_MATCH_ECN=m
    CONFIG_IP_NF_MATCH_DSCP=m
    CONFIG_IP_NF_MATCH_AH_ESP=m
    CONFIG_IP_NF_MATCH_LENGTH=m
    CONFIG_IP_NF_MATCH_TTL=m
    CONFIG_IP_NF_MATCH_TCPMSS=m
    CONFIG_IP_NF_MATCH_HELPER=m
    CONFIG_IP_NF_MATCH_STATE=m
    CONFIG_IP_NF_MATCH_CONNTRACK=m
    CONFIG_IP_NF_MATCH_UNCLEAN=m
    CONFIG_IP_NF_MATCH_OWNER=m
    CONFIG_IP_NF_FILTER=m
    CONFIG_IP_NF_TARGET_REJECT=m
    CONFIG_IP_NF_TARGET_MIRROR=m
    CONFIG_IP_NF_NAT=m
    CONFIG_IP_NF_NAT_NEEDED=y
    CONFIG_IP_NF_TARGET_MASQUERADE=m
    CONFIG_IP_NF_TARGET_REDIRECT=m
    CONFIG_IP_NF_NAT_AMANDA=m
    CONFIG_IP_NF_NAT_SNMP_BASIC=m
    CONFIG_IP_NF_NAT_IRC=m
    CONFIG_IP_NF_NAT_FTP=m
    CONFIG_IP_NF_NAT_TFTP=m
    CONFIG_IP_NF_MANGLE=m
    CONFIG_IP_NF_TARGET_TOS=m
    CONFIG_IP_NF_TARGET_ECN=m
    CONFIG_IP_NF_TARGET_DSCP=m
    CONFIG_IP_NF_TARGET_MARK=m
    CONFIG_IP_NF_TARGET_LOG=m
    CONFIG_IP_NF_TARGET_ULOG=m
    CONFIG_IP_NF_TARGET_TCPMSS=m
    CONFIG_IP_NF_ARPTABLES=m
    CONFIG_IP_NF_ARPFILTER=m
    CONFIG_IP_NF_ARP_MANGLE=m
    CONFIG_IP_NF_COMPAT_IPCHAINS=m
    CONFIG_IP_NF_NAT_NEEDED=y
    CONFIG_IP_NF_COMPAT_IPFWADM=m
    CONFIG_IP_NF_NAT_NEEDED=y*

Das ist nicht unbedingt notwendig, da Sie sehr schnell herausfinden werden, ob iptables funktioniert oder nicht, sobald wir versuchen, einige Regeln hinzuzufügen.

Sie können überprüfen, ob Sie das iptables-Verwaltungsprogramm installiert haben, indem Sie Folgendes ausführen:

# dpkg -l iptables

  • iptables 1.2.11-10 Linux-Kernel 2.4+ iptables-Verwaltung zu*

…oder für rpm-basierte Distributionen:

# rpm -qa | grep iptables

iptables-xxxxx


…oder Sie können einfach sehen, ob die Binärdatei vorhanden ist!

# which iptables

/sbin/iptables

Wenn das Dienstprogramm fehlt, können Sie es wie folgt installieren:

APT

# apt-get update && apt-get install iptables


RPM

# rpm -Uvh iptables-xxxx.rpm

Vorbereitung ################################# [100%]

Die Hauptdateien

Debian

  • /etc/init.d/iptables – INIT-Skript zum Starten|Stoppen|Neustarten des Dienstes (und Speichern der Regelsets). Diese Datei ist seit Sarge nicht mehr standardmäßig enthalten, aber Sie können sie trotzdem erhalten (ich werde es Ihnen zeigen).

  • /var/lib/iptables – Debians Heimat für die ‘aktiven’ und ‘inaktiven’ iptables-save-Zählerdateien (d.h. die gespeicherten Regelsets). Bei RedHat würden Sie die gespeicherten Regeln in ‘/etc/sysconfig/iptables’ finden.

  • /var/lib/iptables/active – Aktive Zähler (mehr dazu später)

  • /var/lib/iptables/inactive – Inaktive Zähler

  • /sbin/iptables – Das Verwaltungsprogramm/Binärdatei.

RedHat

  • /etc/init.d/iptables – INIT-Skript zum Starten|Stoppen|Neustarten des Dienstes (und Speichern der Regelsets).

  • /etc/sysconfig/iptables – RedHats Datei für die iptables-save-Zählerdateien (d.h. die gespeicherten Regelsets).

  • /sbin/iptables – Das Verwaltungsprogramm/Binärdatei.

Ein wenig über IPTables

Um zu sehen, welche Regelsets wir derzeit haben, führen Sie Folgendes aus:

# iptables –list

*Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination*

Das ist, was Sie sehen werden, wenn keine Regelsets vorhanden sind. Wenn wir uns das ansehen, sehen wir 3 ‘Chains’.

  • INPUT - Enthält Regeln für den Verkehr, der an diesen Server gerichtet ist.

  • FORWARD – Enthält Regeln für den Verkehr, der an eine IP hinter diesem Server weitergeleitet wird (d.h. wenn diese Box als Firewall für andere Server dient).

  • OUTPUT – Enthält Regeln für den Verkehr, der von diesem Server ins Internet geht.

Hauptsächlich werden wir uns mit dem Verkehr befassen, der an diesen Server gerichtet ist, und Regeln für die INPUT-Chain ausgeben. Wenn der Verkehr durch den Kernel fließt, bestimmt er ein „TARGET“, basierend darauf, ob das Paket einer Regel entspricht oder nicht. Allgemeine Ziele sind:

  • ACCEPT – Verkehr wird zur Lieferung akzeptiert.

  • REJECT – Verkehr wird abgelehnt, wobei ein Paket an den sendenden Host zurückgesendet wird.

  • DROP - Der Verkehr wird verworfen. Nichts wird an den sendenden Host zurückgesendet.

Konfigurieren von Regelsets

Also, lassen Sie uns zur Sache kommen. Es ist wichtig zu beachten, dass die Reihenfolge, in der Regeln hinzugefügt werden, sehr wichtig ist. Wenn Ihre erste Regel darin besteht, alles abzulehnen… dann wird, egal was Sie speziell erlauben, alles abgelehnt.

Es ist auch zu beachten, dass nichts, was Sie tun, auf der Festplatte gespeichert wird, bis Sie ‘iptables-save’ ausführen (oder das Init-Skript verwenden, um zu speichern). Alle Zähler/Regelsets befinden sich im Speicher. Sobald der Server neu gestartet wird oder Sie ‘iptables –flush’ ausführen, ist alles, woran Sie gearbeitet haben, weg. Persönlich arbeite ich mit einer Bash-Skriptdatei namens ‘iptables-rules.sh’, die es mir ermöglicht, alles organisiert und kommentiert zu halten. Wenn ich einen Fehler mache, mache ich mir keine Sorgen, wenn ich einfach alle Regeln löschen möchte, ich gehe einfach zurück zu meinem Bash-Skript und beginne erneut mit dem Bearbeiten, speichere es und führe das Skript aus (dies wird jedoch nicht beim Start ausgeführt… das wird im nächsten Abschnitt behandelt).

Es ist sehr wichtig, dass Sie, wenn Sie auf diesem Server remote über ssh arbeiten, alles daran setzen, sich nicht auszusperren. Daher wird unsere erste Regel sicherstellen, dass ich, egal was passiert, weiterhin über meine IP-Adresse auf ssh zugreifen kann.

# iptables -A INPUT -s 192.168.1.10 -d 10.1.15.1 -p tcp –dport 22 -j ACCEPT

Lassen Sie uns das aufschlüsseln:

  • -A => Sagt iptables, dass diese Regel an die INPUT-Chain “angehängt” werden soll.

  • -s => Quelladresse. Diese Regel betrifft nur den Verkehr, der VON dieser IP kommt. Ersetzen Sie sie durch die IP-Adresse, von der Sie SSH verwenden.

  • -d => Zieladresse. Diese Regel betrifft nur den Verkehr, der AN diese IP geht. Ersetzen Sie sie durch die IP-Adresse dieses Servers.

  • -p => Protokoll. Gibt an, dass der Verkehr TCP ist.

  • –dport => Zielport. Gibt an, dass der Verkehr für TCP-Port 22 (SSH) bestimmt ist.

  • -j => Jump. Wenn alles in dieser Regel übereinstimmt, dann “jump” zu ACCEPT

Als nächstes möchten wir einige Standardregeln für allgemeinen Netzwerkverkehr verwenden. Das geht ein wenig über die grundlegenden Dinge hinaus, jedoch kann iptables den “Zustand” bestimmen, in dem sich ein Paket befindet. Dies hat mit der standardmäßigen TCP-Kommunikation zu tun. Zum Beispiel das 3-Wege-Handshake zwischen zwei Hosts beim Übertragen von Daten.

  • NEW => Server1 verbindet sich mit Server2 und sendet ein SYN (Synchronize)-Paket.

  • RELATED => Server 2 empfängt das SYN-Paket und antwortet mit einem SYN-ACK (Synchronize Acknowledgment)-Paket.

  • ESTABLISHED => Server 1 empfängt das SYN-ACK-Paket und antwortet dann mit dem letzten ACK (Acknowledgment)-Paket.

Nachdem dieses 3-Wege-Handshake abgeschlossen ist, ist der Verkehr jetzt ESTABLISHED. Für diese Art der TCP-Kommunikation sind etwas ähnliche drei Regeln notwendig:

# iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

Die letzte Regel erlaubt offensichtlich jeden Verkehr, der den Server verlässt.

Jetzt, da wir unsere Grundlagen festgelegt haben, lassen Sie uns sehen, was iptables für unsere Regelsets auflistet:

# iptables –list

*Chain INPUT (policy ACCEPT)
target prot opt source destination

ACCEPT tcp – 192.168.1.10 10.1.15.1 tcp dpt:ssh
ACCEPT all – anywhere anywhere state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all – anywhere anywhere state NEW,RELATED,ESTABLISHED*

Von hier aus können Sie beliebige Regeln hinzufügen, die Sie möchten. Wenn Sie einen einfachen Webserver betreiben, benötigen Sie wahrscheinlich etwas Ähnliches:

INDIVIDUELLE ABLEHNUNGEN ZUERST:


SCHLECHTE JUNGES (Blockieren der Quell-IP-Adresse):

# iptables -A INPUT -s 172.34.5.8 -j DROP

KEINE SPAMMER (beachten Sie die Verwendung von FQDN):

# iptables -A INPUT -s mail.spammer.org -d 10.1.15.1 -p tcp –dport 25 -j REJECT


DANN ÖFFNEN SIE ES: ———————————————————————–
MYSQL (Erlaube Remote-Zugriff auf bestimmte IP):

SSH:

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 22 -j ACCEPT

Sendmail/Postfix:

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 25 -j ACCEPT

FTP: (Beachten Sie, wie Sie einen Bereich von Ports 20-21 angeben können)

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 20:21 -j ACCEPT

Passive FTP-Ports vielleicht: (Wiederum, Angabe der Ports 50000 bis 50050 in einer Regel)

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 50000:50050 -j ACCEPT

HTTP/Apache

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 80 -j ACCEPT

SSL/Apache

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 443 -j ACCEPT

IMAP

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 143 -j ACCEPT

IMAPS

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 993 -j ACCEPT

POP3

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 110 -j ACCEPT

POP3S

# iptables -A INPUT -d 10.1.15.1 -p tcp –dport 995 -j ACCEPT

Jeder Verkehr von localhost:

# iptables -A INPUT -d 10.1.15.1 -s 127.0.0.1 -j ACCEPT

ICMP/Ping:

# iptables -A INPUT -d 10.1.15.1 -p icmp -j ACCEPT


GLOBALE ABLEHNUNGEN ZU LETZT:

Alles andere zu dieser IP ablehnen:

# iptables -A INPUT -d 10.1.15.1 -j REJECT

Oder, alles andere, das zu einer beliebigen IP kommt, ablehnen:

# iptables -A INPUT -j REJECT


Beachten Sie, dass wir die globalen ABLEHNUNGSzeilen zuletzt durchführen! Diese müssen zuletzt kommen.

Speichern von Regelsets

Mit den Init-Skripten ist das Speichern von Regelsets ganz einfach. Sobald Sie mit Ihrer Konfiguration zufrieden sind, führen Sie einfach eine der folgenden Optionen aus:

Die Debian-Methode

Das alte Init-Skript ist standardmäßig nicht mehr in Sarge enthalten, aber es ist immer noch für den Legacy-Gebrauch verfügbar. Ich glaube, die neue Methode besteht darin, ‘/etc/network/if-up.d’ und ‘/etc/network/if-down.d’ für iptables-Skripte zu verwenden (aber ich mag das nicht).

Sie können das Legacy-INIT-Skript auf folgende Weise abrufen:

# gunzip /usr/share/doc/iptables/examples/oldinitdscript.gz -c > /etc/init.d/iptables

Jetzt, da Sie das Skript haben, können Sie das Nötige tun.

Aktive Regeln

Die aktiven Regeln sind die, die beim Starten von iptables geladen werden:

# /etc/init.d/iptables save active

Speichern des iptables-Regelsatzes: speichere “active” mit Zählern.

Dies speichert Ihre Regeln in /var/lib/iptables/active

Inaktive Regeln

Sie können auch ein zweites Regelset konfigurieren, das geladen wird, wenn Sie iptables stoppen, das ‘inactive’ genannt wird. Iptables stoppt tatsächlich nicht, es löscht einfach die Regelsets, die vorhanden sind, und lädt dann die ‘inaktiven’ Regeln.

# /etc/init.d/iptables stop

Laden des iptables-Regelsatzes: lade “inactive”

Daher können Sie Ihre ‘inaktiven’ Regeln festlegen und sie dann mit:

# /etc/init.d/iptables save inactive

Speichern des iptables-Regelsatzes: speichere “inactive” mit Zählern.

Die RedHat-Methode

Das RedHat-INIT-Skript ist sehr ähnlich. Sie können es verwenden, um iptables zu starten und zu stoppen sowie Regelsets zu speichern.

Um Ihre aktiven Regeln zu speichern, führen Sie Folgendes aus:

# /etc/init.d/iptables save

Dies speichert Ihre Regeln in ‘/etc/sysconfig/iptables’.

Wenn Sie iptables starten, werden die Regeln aus ‘/etc/sysconfig/iptables’ gelesen:

# /etc/init.d/iptables start

Starte iptables [OK]

Und wenn Sie iptables stoppen, werden alle Regeln gelöscht:

# /etc/init.d/iptables stop

Stoppe iptables [OK]

Manuelles Speichern und Wiederherstellen

Sie können auch manuell die iptables-save und iptables-restore-Dienstprogramme wie folgt verwenden:

Regeln in eine Datei speichern

# iptables-save > /root/iptables-save.out

Regeln wiederherstellen

# iptables-restore -c /root/iptables-save.out

Das -c sagt iptables-restore, dass diese Datei mit iptables-save erstellt wurde, das die Regeln als „Zähler“ ausgibt.

Fazit

Und da haben Sie es, iptables in seiner grundlegendsten Form. Die Verwendung von iptables ist zu zahlreich, um wirklich eine Anleitung dafür zu erstellen. Ich hoffe jedoch, dass dies Ihnen bei der grundlegenden Sicherheit und dem Verständnis von IPTables geholfen hat. Wenn es etwas gibt, das ich hinzufügen könnte, zögern Sie bitte nicht, mir eine E-Mail zu senden.


BJ Dierkes, RHCE4-LPIC1
wdierkes [at] 5dollarwhitebox [dot] org
Texas, USA

Ressourcen

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.