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
- Netfilter/Iptables: http://www.netfilter.org/
- Übertragungssteuerprotokoll: http://www.rhyshaden.com/tcp.htm
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.