Difference between revisions of "Iptables-Regeln"
(→Bsp. für ssh und http(s)) |
|||
| (3 intermediate revisions by the same user not shown) | |||
| Line 13: | Line 13: | ||
=== Tabellen === | === Tabellen === | ||
<pre> | <pre> | ||
| − | conntrac - beinhaltet alle Verbindungen | + | conntrac - Verbindungsüberwachung / beinhaltet alle Verbindungen und kann diese filtern. |
| + | Klassifiziert die Verbindungen in NEW, ESTABLISHED, RELATED oder INVALID. | ||
nat – ermöglicht die Änderung von IP-Adressen und/oder Ports | nat – ermöglicht die Änderung von IP-Adressen und/oder Ports | ||
| Line 109: | Line 110: | ||
-m state --state NEW gilt nur für IP-Pakete, die neue Verbindungen initiieren | -m state --state NEW gilt nur für IP-Pakete, die neue Verbindungen initiieren | ||
| − | --state mögliche Schlüsselworte: | + | --state mögliche Schlüsselworte (siehe auch im Zusammenhang mit der Conntrac-Table): |
NEW: Das Paket initiiert eine neue Verbindung. | NEW: Das Paket initiiert eine neue Verbindung. | ||
ESTABLISHED: Das Paket gehört zu einer schon existierenden Verbindung. | ESTABLISHED: Das Paket gehört zu einer schon existierenden Verbindung. | ||
| Line 246: | Line 247: | ||
Bei einem Neustart werden somit die Regeln automatisch geladen. | Bei einem Neustart werden somit die Regeln automatisch geladen. | ||
| + | </pre> | ||
| + | |||
| + | |||
| + | == Conntrack Table == | ||
| + | |||
| + | === Grundlagen === | ||
| + | <pre> | ||
| + | Conntrack | ||
| + | bezieht sich auf das connection tracking-System im Linux-Kernel, | ||
| + | ein Subsystem des Netfilter-Frameworks, das Netzwerkverbindungen verfolgt und verwaltet. | ||
| + | |||
| + | Die zugehörigen conntrack-tools sind eine Sammlung von Benutzermodus-Werkzeugen, | ||
| + | die es Systemadministratoren ermöglichen, diese Verbindungen zu inspizieren, zu ändern oder zu löschen. | ||
| + | Dieses System ist entscheidend für Funktionen wie NAT (Network Address Translation) und Paketfilterung. | ||
| + | |||
| + | Was ist Conntrack? | ||
| + | |||
| + | Ein Kernel-Modul, das Netzwerkpakete analysiert, um festzustellen, ob sie zu einer bereits bestehenden oder einer neuen Verbindung gehören. | ||
| + | Speichert Informationen über aktive Verbindungen in einer Tabelle, um den Datenverkehr effizient zu verwalten. | ||
| + | Ermöglicht es, den Zustand von Verbindungen wie TCP-Verbindungen oder UDP-Streams zu verfolgen. | ||
| + | |||
| + | Was sind die Conntrack-Tools? | ||
| + | |||
| + | Eine Sammlung von Benutzerwerkzeugen, die eine Schnittstelle zum Kernel-System bieten, um die alte /proc/net/ip_conntrack-Schnittstelle zu ersetzen. | ||
| + | conntrack: Eine Kommandozeilenschnittstelle, um die Verbindungstabelle zu durchsuchen, zu inspizieren und zu verwalten. | ||
| + | conntrackd: Ein zugehöriger Daemon, der Ereignisse wie die Herstellung neuer Verbindungen überwachen kann. | ||
| + | |||
| + | Wichtige Anwendungen | ||
| + | |||
| + | Netzwerküberwachung: Überwachung verdächtiger Aktivitäten, wie z.B. DDoS-Angriffe oder eine hohe Last von bestimmten IPs. | ||
| + | Paketfilterung: Ermöglicht es Firewalls, Pakete basierend auf ihrem Verbindungszustand zu entscheiden, anstatt für jede Verbindung einzelne Regeln zu erstellen. | ||
| + | NAT: Hilft bei der Verwaltung und Durchführung von Network Address Translation. | ||
| + | |||
</pre> | </pre> | ||
Latest revision as of 07:42, 26 November 2025
Iptables-Grundlagen[edit]
Chains[edit]
PREROUTING – Pakete, die in Empfang genommen wurden
INPUT – eingehende Pakete, bevor sie an die Empfängeranwendung ausgeliefert werden
OUTPUT – ausgehende Pakete, die soeben von einer Netzwerkanwendung erzeugt wurden
POSTROUTING – Pakete, die gerade über die Netzwerkschnittstelle gesendet werden sollen
FORWARD – Pakete, die nicht für den lokalen Rechner bestimmt sind, sondern die dieser per
IP-Forwarding (Routing) weiterleitet
Tabellen[edit]
conntrac - Verbindungsüberwachung / beinhaltet alle Verbindungen und kann diese filtern.
Klassifiziert die Verbindungen in NEW, ESTABLISHED, RELATED oder INVALID.
nat – ermöglicht die Änderung von IP-Adressen und/oder Ports
Die zulässigen Chains sind OUTPUT, POSTROUTING und PREROUTING.
filter – Diese Tabelle bestimmt die Regeln für erlaubte und verbotene Datenpakete.
Die zulässigen Chains sind INPUT, OUTPUT und FORWARD
mangle – Über diese Tabelle können Sie Datenpaket-Header beliebig modifizieren.
Sie kann mit allen fünf Chains zusammenarbeiten.
Regeln besitzen ein Target (Ziel)[edit]
ACCEPT – Das Datenpaket wird akzeptiert, also an den nächsten Verarbeitungsschritt weitergereicht
DROP – Das Paket wird ersatzlos verworfen.
REJECT – Dieses Target verwirft auch das Paket, versendet aber zusätzlich eine Ablehnungsmitteilung an den Absender.
QUEUE – Das Paket wird aus dem Kernel in den Userspace weitergereicht,
wo es von einer spezialisierten Anwendung weiterverarbeitet werden kann.
RETURN – Das Paket wird in der ursprünglichen, aufrufenden Chain weiterverarbeitet;
dieses Target entspricht einem Rücksprung aus einem Unterprogramm und eignet sich
somit für benutzerdefinierte Regeln, die an bestimmten Stellen eingeschoben werden.
MASQUERADE - führt IP-Masquerading aus. Es handelt sich hierbei um eine Form von NAT,
die auf dynamische IP-Adressierung an der externen Netzwerkschnittstelle hin optimiert wurde.
SNAT (Source NAT) - führt ebenfalls IP-Masquerading durch. SNAT ist aber ausschließlich für feste IP-Konfigurationen vorgesehen.
DNAT (Destination NAT) - maskiert nicht die Quelle, sondern das Ziel eines Paketes.
DNAT wird für Port-Forwarding verwendet, wenn Sie z. B. einen Serverdienst,
der sich hinter einer Firewall befindet, im Internet veröffentlichen müssen.
REDIRECT - leitet ein Paket um. Dieses Target wird z. B. für die Weiterleitung von Paketen an transparente Proxy-Server benötigt.
Kommandozeilenparameter von iptables[edit]
-t table oder --table table – Auswahl der Tabelle. -t filter verwendet zum Beispiel die Tabelle filter.
-A chain oder --append chain – Die Regel wird an die angegebene Chain angehängt. -A PREROUTING.
-I chain [Regelnummer] oder --insert chain [Regelnummer] – fügt eine neue Regel vor der angegebenen ein oder
an den Anfang der Chain, wenn keine Nummer angegeben wird.
-R chain Regelnummer oder --replace chain Regelnummer – ersetzt die angegebene Regel
durch die mitgelieferte neue Regel.
-D chain Regelnummer oder --delete chain Regelnummer – löscht die Regel mit der betreffenden Nummer aus der Chain.
-F chain [-t table] - löscht alle Regeln aus der angegebenen Regelkette.
-N mychain - erzeugt eine neue Regelkette mit dem Namen mychai
-j Target – Hier wird das Target angegeben, entweder eines der zuvor genannten Standard-
ziele oder ein benutzerdefiniertes. -j DROP beispielsweise verwirft die betreffenden Pakete
-s [!]Quelladresse[/Maske], alternativ --src oder --source – Quelladresse oder Quelladressbereich eines Pakets.
Ein Ausrufezeichen steht für alle Pakete, die nicht aus der angegebenen Quelle stammen.
-s 192.168.1.0/24 legt zum Beispiel eine Regel für Pakete fest, die aus dem angegebenen Netz stammen;
-s !192.168.1.0/24 gilt dagegen für alle Pakete außer denjenigen aus dem benannten Netz.
-d [!]Zieladresse[/Maske], alternativ --dst oder --destination – Regeln für Datenpakete
mit einer bestimmten Zieladresse oder einem Zieladressbereich.
Ein Ausrufezeichen negiert die Angabe auch bei dieser Option.
-d 192.168.1.18 gilt beispielsweise für alle Pakete,die an diese IP-Adresse gesendet werden sollen.
-p [!]Protokoll oder --protocol [!]Protokoll – Regeln für Pakete, die das angegebene Transportprotokoll verwenden
beziehungsweise (mit Ausrufezeichen) nicht verwenden.
Zulässig sind alle Werte aus der Datei /etc/protocols, entweder numerisch oder anhand ihres Namens.
Wichtige Protokolle sind zum Beispiel tcp, udp und icmp (ping).
--source-port Portnummer oder --sport Portnummer – Quellport (TCP) oder Quell-Dienstnummer (UDP) von Paketen,
Beispiel --sport 25 oder --sport smtp für Pakete, die von einem SMTP-Server stammen.
--destination-port Portnummer oder --dport Portnummer – Zielport des Pakets;
dport 22 oder --dport ssh gilt zum Beispiel für Pakete, die an einen SSH-Server gesendet werden.
-i Schnittstelle – Regel für eingehende Pakete, die über die angegebene Netzwerkschnittstelle ankommen.
Beispiel: -i eth0 gilt für die erste Ethernet-Karte.
-o Schnittstelle – Regel für Pakete, die über eine bestimmte ausgehende Schnittstelle gesendet werden.
Beispiel: -o ippp0 betrifft nur Pakete für die erste (und meist einzige) ISDN-Schnittstelle.
-L [chain] oder --list [chain] – gibt eine Liste aller Regeln für die angegebene Chain aus.
Wird keine Chain genannt, erhalten Sie eine vollständige Liste aller netfilter-Regeln.
-h oder --help – Ausgabe der Hilfe mit den hier genannten und allen anderen Optionen.
-m gibt ein Zusatzmodul an, z.Bsp.: state ;
-m state --state NEW gilt nur für IP-Pakete, die neue Verbindungen initiieren
--state mögliche Schlüsselworte (siehe auch im Zusammenhang mit der Conntrac-Table):
NEW: Das Paket initiiert eine neue Verbindung.
ESTABLISHED: Das Paket gehört zu einer schon existierenden Verbindung.
RELATED: Das Paket initiiert eine neue Verbindung, gehört aber zu einer schon existierenden Verbindung.
INVALID: Das Paket gehört zu keiner vorhandenen Verbindung und initiiert auch keine neue Verbindung
--syn gibt an, dass die Regel nur für solche TCP-Pakete gelten soll, bei denen das SYN-Bit
gesetzt ist. Derartige Pakete werden verwendet, um eine Verbindung zu initiieren
(etwa für alle TCP-Wrapper-Funktionen, für HTTP etc.).
Bsp. für ssh und http(s)[edit]
iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP
Etablierte Verbindungen zulassen[edit]
iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
$WAN muss durch die Bezeichnung der NIC ersetzt werden.
Dabei kann mit der Option --state folgende, meist genutzte Möglichkeiten eingestellt werden:
NEW - Das Datenpaket ist dem Server neu, in der Regel durch eine neue Verbindung.
ESTABLISHED - Das Datenpaket ist beim Server bereits ein- und ausgegangen.
RELATED - Das Datenpaket hat eine neue Verbindung gestartet, ist aber in einer bestehenden Verbindung involviert,
z. B. eine FTP-Datenübertragung oder ein ICMP-Fehler.
Pakete anhand der Source-Adresse filtern[edit]
iptables -A INPUT -s 10.10.10.1 -j DROP hier kann auch mit Ranges gearbeitet werden: iptables -A INPUT -m iprange --src-range 10.10.10.1-10.10.10.255 -j DROP
Beispiele für konkrete Filterregeln[edit]
# iptables -t filter -I INPUT -p tcp -s 196.12.21.0/24 -j DROP Eingehende Pakete aus dem Netzwerk 196.12.21.0/24 sollen verworfen werden. Auf diese Weise lassen sich beispielsweise die Adressen bekannter Verbreiter von Malware kom- plett sperren. Es ist wichtig, diese Regel mithilfe von -I an den Anfang der INPUT-Chain zu stellen, um Regeln zuvorzukommen, die einfach sämtliche eingehenden TCP-Pakete durchlassen. # iptables -t filter -I INPUT -p ICMP -j DROP Verhindert alle ICMP-Zugriffe, das heißt die Überprüfung Ihres Rechners mit ping. Es gibt ein DoS-Angriffsszenario mit fehlerhaft formatierten ICMP-Paketen, den sogenannten Ping of Death, deshalb wird diese Regel manchmal verwendet. Der Nachteil ist natürlich, dass Sie Ihre eigenen Rechner dann auch nicht mehr mit ping testen können. Verwenden Sie in der Praxis also so etwas wie # iptables -t filter -I INPUT -s!192.168.1.0/24 -p ICMP DROP um ping-Pakete zu verwerfen, die nicht aus Ihrem Netz stammen. # iptables -t filter -O OUTPUT -d 192.168.0.22 -j DROP Diese Regel lehnt alle Pakete ab, die an eine bestimmte Zieladresse gesendet werden. Auf diese Weise könnten Sie ein Programm daran hindern, Verbindung zum Server oder zum Netzwerk seines Herstellers aufzunehmen. # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 196.23.17.41 Source-NAT: Die IP-Adresse aller Pakete, die über die Schnittstelle eth0 gesendet werden, erhält einen anderen (externen) Wert # iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE IP-Masquerading, eine besondere Form des Source-NAT, überschreibt die lokale IP-Adresse mit der dynamisch zugewiesenen. Dies ermöglicht zum Beispiel die gemeinsame Nutzung eines DSL-Anschlusses durch mehrere Rechner im lokalen Netzwerk. # iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 192.168.1.22 Destination-NAT, das Gegenteil von Source-NAT, ändert die IP-Adresse eingehender Pakete in einen lokalen Wert.
Iptables-Regeln[edit]
Iptables installieren[edit]
apt-get update apt-get install iptables
Iptables anzeigen[edit]
iptables -L -v
Iptables erstellen[edit]
iptables -A <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no> -j <target>
Regeln löschen[edit]
Alle Regeln löschen iptables -F Einzelne spezifische Regeln werden mit der Option -D gelöscht. Dabei muss zunächst die Nummer der Regel herausgefunden werden: iptables -L --line-numbers Anschließend kann eine spezielle Regel gelöscht werden: iptables -D INPUT 3
Regeln persistent Speichern[edit]
Um Regeln persistent zu halten, muss das Tool: Iptables-persistent installiert werden. Dieses sorgt dafür, dass gespeicherte Regeln bei einem Neustart geladen werden. apt-get install iptables-persistent Die Regeln werden in folgenden Dateien gespeichert. Es wird zwischen IPv4 und IPv6 differenziert: /etc/iptables/rules.v4 /etc/iptables/rules.v6 Um die aktuell geltenden Regeln zu speichern, muss folgender Befehl genutzt werden: iptables-save > /etc/iptables/rules.v4 ### oder ip6tables-save > /etc/iptables/rules.v6 Bei einem Neustart werden somit die Regeln automatisch geladen.
Conntrack Table[edit]
Grundlagen[edit]
Conntrack
bezieht sich auf das connection tracking-System im Linux-Kernel,
ein Subsystem des Netfilter-Frameworks, das Netzwerkverbindungen verfolgt und verwaltet.
Die zugehörigen conntrack-tools sind eine Sammlung von Benutzermodus-Werkzeugen,
die es Systemadministratoren ermöglichen, diese Verbindungen zu inspizieren, zu ändern oder zu löschen.
Dieses System ist entscheidend für Funktionen wie NAT (Network Address Translation) und Paketfilterung.
Was ist Conntrack?
Ein Kernel-Modul, das Netzwerkpakete analysiert, um festzustellen, ob sie zu einer bereits bestehenden oder einer neuen Verbindung gehören.
Speichert Informationen über aktive Verbindungen in einer Tabelle, um den Datenverkehr effizient zu verwalten.
Ermöglicht es, den Zustand von Verbindungen wie TCP-Verbindungen oder UDP-Streams zu verfolgen.
Was sind die Conntrack-Tools?
Eine Sammlung von Benutzerwerkzeugen, die eine Schnittstelle zum Kernel-System bieten, um die alte /proc/net/ip_conntrack-Schnittstelle zu ersetzen.
conntrack: Eine Kommandozeilenschnittstelle, um die Verbindungstabelle zu durchsuchen, zu inspizieren und zu verwalten.
conntrackd: Ein zugehöriger Daemon, der Ereignisse wie die Herstellung neuer Verbindungen überwachen kann.
Wichtige Anwendungen
Netzwerküberwachung: Überwachung verdächtiger Aktivitäten, wie z.B. DDoS-Angriffe oder eine hohe Last von bestimmten IPs.
Paketfilterung: Ermöglicht es Firewalls, Pakete basierend auf ihrem Verbindungszustand zu entscheiden, anstatt für jede Verbindung einzelne Regeln zu erstellen.
NAT: Hilft bei der Verwaltung und Durchführung von Network Address Translation.