iptables: So konfigurieren Sie die Linux-Firewall zum Schutz Ihres Servers

iptables: So konfigurieren Sie die Linux-Firewall

iptables ist das Firewall benutzt auf Linux-basierte Betriebssysteme. Obwohl wir in den letzten Jahren nftables standardmäßig installiert haben, können Sie immer noch die iptables-Syntax verwenden, um die Firewall in unserem Betriebssystem wie Debian zu konfigurieren. Ubuntu und sogar die Firewall des Routers, wenn dieser auf Linux basiert. Die Kenntnis von iptables ist sehr wichtig, um unser lokales Netzwerk vor Eindringlingen zu schützen, denn iptables geben uns die Möglichkeit, den gewünschten Datenverkehr zuzulassen oder abzulehnen. Heute werden wir in diesem Artikel erklären, wie iptables funktioniert, und erweiterte Anwendungsbeispiele.

Hauptmerkmale von iptables

iptables ist eine Software, die dafür verantwortlich ist, in unserem Netzwerk als Firewall oder Firewall zu fungieren. Es ist ein sehr wichtiger Bestandteil von Betriebssystemen und wurde speziell entwickelt, um autorisierten Zugriff zu ermöglichen und unbefugten Zugriff zu blockieren. Eine Firewall richtet einen Kontrollpunkt für eingehende und ausgehende Pakete ein. Darüber hinaus ist es sehr wichtig darauf hinzuweisen, dass eine Firewall vor Datenverkehr schützt, der verschiedene Netzwerke durchquert, aber das lokale Netzwerk nicht vor Angriffen schützt, die innerhalb desselben Subnetzes stattfinden. .

iptables ist die Firewall, die seit Version 2.4 in Linux-Systemen enthalten ist, daher ist sie standardmäßig in Systemen wie Debian, Ubuntu, Linux Mint und vielen anderen integriert, obwohl derzeit nftables intern verwendet wird, weil iptables als alt gilt, obwohl es heute iptables ist immer noch weit verbreitet in der Welt der Linux-Systemadministration und auch in der Welt der Netzwerkadministration.

Diese Firewall hat standardmäßig mehrere Tabellen erstellt, mit dem Ziel, die Möglichkeit des Hinzufügens verschiedener Ketten und Regeln erheblich zu erleichtern. Ein sehr wichtiges Detail ist, dass wir standardmäßig alles auf „akzeptieren“ eingestellt haben, das heißt, der gesamte Datenverkehr wird zugelassen, es gibt keine Regel, um den Datenverkehr zu verweigern, daher ist diese Firewall zunächst zulässig, aber wir können die Standardrichtlinie sehr ändern einfach und schnell.

Sobald wir die Hauptmerkmale kennen, zeigen wir Ihnen den Betrieb und die Architektur dieser Firewall.

Betrieb und Architektur

Diese Firewall basiert auf Regeln, die wir nacheinander einführen werden, ihr Betrieb basiert auf der Anwendung von Regeln, für deren Ausführung die Firewall selbst verantwortlich ist. Obwohl die Verwendung von iptables auf den ersten Blick einfach erscheinen mag, ist es komplizierter, wenn Sie es auf fortgeschrittene Weise tun möchten. Als nächstes sehen Sie ein zusammenfassendes Schema der Funktionsweise von iptables.

Die iptables-Struktur basiert auf Tabellen, von denen viele bereits standardmäßig erstellt sind. In den Tabellen haben wir die Strings, von denen wir auch einige standardmäßig erstellt haben. Schließlich haben wir innerhalb der Ketten die verschiedenen Regeln, die wir konfigurieren können. Auf dem folgenden Foto sehen Sie ein kleines Schema, wie die Architektur der Firewall aussehen würde:

Standardmäßig haben wir insgesamt vier Tabellen:

  • Filtertabelle : Dies ist die Standardtabelle. Wenn wir keine Tabelle zum Hinzufügen einer Regel definieren, wird sie immer in die Filtertabelle verschoben. In dieser Tabelle haben wir insgesamt drei Standardketten, je nachdem, was uns interessiert, müssen wir die eine oder andere Kette verwenden: INPUT (das sind die Pakete in eingehender Richtung, zur Firewall selbst), OUTPUT (das sind die ausgehende Pakete, vom Server aus) und FORWARD (wird verwendet, um Pakete zu filtern, die von einer Netzwerkschnittstelle zu einer anderen gehen).
  • Nat Tabelle: Diese Tabelle ist für die Durchführung des NAT verantwortlich, indem sie die private IP in eine öffentliche umwandelt und umgekehrt. Innerhalb von NAT haben wir drei Ketten: PREROUTING (ändert Pakete vor dem Routing, hier wird DNAT oder Portweiterleitung durchgeführt), POSTROUTING (ändert Pakete nach dem Routing, hier wird SNAT oder MASQUERADE durchgeführt) und OUTPUT (Pakete, die von der konfigurierten Firewall generiert werden NAT wird durchlaufen).
  • Zerfleischen Tabelle: Diese Tabelle ist für die Änderung von Paketen verantwortlich, hier wird QoS für die Dienstgüte konfiguriert, TCP-Header geändert usw. In dieser Tabelle haben wir die fünf Ketten: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
  • roh table – Diese Tabelle wird nicht oft verwendet, da Pakete ohne Verbindungsstatus übertragen werden. Wir haben die Kette PREROUTING und OUTPUT.

Im folgenden Bild sehen Sie eine kleine Zusammenfassung der Ketten, die wir in den verschiedenen Tabellen haben:

Die Operation beim Hinzufügen einer Regel ist wie folgt:

  • Die Regeln, die wir den Ketten hinzufügen, haben immer ein Ziel (-j in der Regel).
  • Wenn die Firewall ein Paket empfängt, prüft sie, ob das Paket mit einer von uns eingetragenen Regel übereinstimmt. Bei Übereinstimmung wird der Zielbefehl ausgeführt, andernfalls geht es zur nächsten Regel bis zum Ende der Kette.
  • Die Regeln werden der Reihe nach geprüft, von der ersten bis zur letzten Regel. Die Reihenfolge ist sehr wichtig, wenn wir zuerst alles blockieren und dann etwas Spezifischeres zulassen, werden wir den gesamten Verkehr blockieren und die spezifischste Regel wird nicht überprüft.
  • Für den Fall, dass keine Regel das Paket erfüllt, wird die Richtlinie der Kette, die wir haben (globale Regel), verwendet.

Die Ziele der verschiedenen Regeln sind die folgenden:

  • ACCEPT: Akzeptiert das Paket und leitet es an die nächste Ebene weiter, einen Webserver, SSH, FTP usw.
  • DROP: Blockiert das Paket und leitet es nicht an die nächste Ebene weiter.
  • WARTESCHLANGE: ist ein spezielles Ziel, das das Paket in eine Warteschlange weiterleitet, die für die Verarbeitung des Benutzerbereichs bestimmt ist. Dies kann verwendet werden, um andere externe Programme auszuführen.
  • RETURN: hat den gleichen Effekt, als ob wir das Ende der Kette erreicht hätten. Wenn sich die Regel in einer der Standardketten befand, wird die Richtlinie der Kette ausgeführt. Für eine Regel, die sich in einer benutzerdefinierten Kette befindet, wird sie verlassen und durch die Kette vor dem Sprung fortgesetzt, direkt nach der Regel, mit der sie gesprungen ist.

Sobald wir wissen, wie es funktioniert und wie es aufgebaut ist, werden wir verschiedene Befehle sehen, um verschiedene Aktionen auszuführen.

 

Grundlegende Befehle zur Verwendung von iptables

Das erste, was wir bei der Konfiguration dieser Firewall berücksichtigen müssen, ist, dass wir Superuser-Berechtigungen benötigen, um die verschiedenen Befehle auszuführen. Die müssen unbedingt laufen, sonst geht es nicht. Die folgenden Befehle haben kein „sudo“, da wir davon ausgehen, dass Sie bereits Superuser sind (sudo su).

In den neuesten Versionen von Linux ist es nicht möglich, den iptables-Dienst zu stoppen, um den gesamten Netzwerkverkehr zuzulassen und die Firewall mit den Standardparametern zu belassen, müssen wir die folgenden Befehle ausführen:

  • sudo iptables-F
  • sudo iptables-X
  • sudo iptables -t nat -F
  • sudo iptables -t nat -X
  • sudo iptables -t mangle -F
  • sudo iptables -t mangle -X
  • sudo iptables -P EINGABE AKZEPTIEREN
  • sudo iptables -P FORWARD ACCEPT
  • sudo iptables -P AUSGABE AKZEPTIEREN

Sobald wir dies getan haben, werden wir die Firewall „zurücksetzen“ und alles zulassen. Jetzt, da wir wissen, wie man es zurücksetzt, sehen wir uns die verschiedenen Befehle an.

 

Aktuelle Tabellen anzeigen

Wenn Sie den Inhalt der verschiedenen Ketten und Regeln sehen möchten, die wir in einer bestimmten Tabelle haben, dann können Sie sehen, wie sie aussehen würden:

  • iptables -t filter –liste
  • iptables -t mangle –list
  • iptables -t nat –Liste
  • iptables -t raw –liste

 

Hauptargumente und wofür sie sind

  • -t, –table table Wählen Sie die gewünschte Tabelle aus
  • -A, –append chain rule-specification Wir fügen eine neue Regel in eine bestimmte Kette ein
  • -C, –Check Chain Rule-Spezifikation Wir prüfen, ob es eine bestimmte Regel in einer bestimmten Kette gibt
  • -D, –kettenregelspezifikation löschen Wir löschen die Regel, die wir in eine bestimmte Kette eingefügt haben
  • -D, –delete chain rulenum Wir löschen die Regelnummer X in einer bestimmten Kette
  • -I, –insert chain [Regelnummer] Regelspezifikation Wir fügen eine neue Kette mit einer Nummer in eine bestimmte Tabelle ein
  • -R, –Ersetze Kette Regelnummer Regelspezifikation Ersetzt eine gegebene Kette in einer Tabelle, die verwendet wird, um die Zahl zu verschieben.
  • -L, –list [Kette] Zeigt die Liste der Regeln einer Kette
  • -F, –flush [Kette] Alle Regeln aus einer gegebenen Kette leeren.
  • -Z, –zero [chain [Regelnummer]] Setzt die Zähler einer gegebenen Regel auf 0.
  • -N, –neue-Kette Kette Wir erstellen eine neue Kette in einer bestimmten Tabelle
  • -X, –delete-chain [Kette] Wir löschen eine bestimmte Kette (leer) in einer bestimmten Tabelle
  • -P, –Richtlinienkettenziel Wir wenden die Standardrichtlinie an, sie ist erfüllt, wenn keine Regel der Ketten erfüllt ist.
  • -E, –rename-chain alte-Kette neue-Kette Benennt eine zuvor hinzugefügte Kette um
  • -h, Hilfe anzeigen
  • -v, –verbose Ausgabe, die in Verbindung mit –L verwendet wird, um mehr Informationen anzuzeigen, als der Befehl –L bereitstellt.
  • -n, –numerisch IP-Adressen und Portnummern werden als Zahlen angezeigt. Wenn wir zum Beispiel Port 80 filtern, erscheint mit dem typischen –L www und nicht 80.
  • -x, –exact Zeigt den genauen Wert des Paket- und Bytezählers an, anstatt K, M oder G für die Werte zu verwenden.
  • –line-numbers Beim Anzeigen der Regelliste wird die genaue Nummer der Regel angezeigt. Ideal für die Verwendung von –D und der Zahl (Löschen) oder –I, um sie vor oder nach dieser Regel einzufügen.

 

Hauptbedingungen

  • -p , –Protokoll Protokoll. Filtern Sie das Paket nach Protokoll, das angegebene Protokoll kann sein: tcp, udp, Idplite, icmp, esp, ah, sctp.
  • -s , –source address[/mask][,…] Quell-IP-Adresse des Pakets. Wir können eine IP oder ein Subnetz haben (das die Maske im CIDR-Format angibt). Wir können auch Hostnamen (Domains, Websites usw.) angeben, aber das ist keine gute Idee, weil es nicht effizient ist. Es können mehrere Quelladressen angegeben werden (192.168.1.1,192.168.1.2, XNUMX), aber es werden unterschiedliche Regeln erstellt, um sie zu erfüllen.
  • -d , –destination address[/mask][,…] Ziel-IP-Adresse des Pakets. Es verhält sich genau wie -s.
  • -m , –match match. Gibt an, ob wir die erweiterten Module von iptables aufrufen möchten, um bestimmte Aktionen auszuführen, wie zum Beispiel:
    • Setzen Sie mehrere Quell- und Zielports (Multiport-Modul).
    • Steueranschlüsse (Conntrack-Modul).
    • Vermeiden Sie Brute Force (aktuelles Modul, ideal für SSH).
    • Begrenzen Sie die Anzahl der Verbindungen (modulo limit und connlimit).
    • IP-Adressbereich (iprange).
  • -j , –Sprungziel. Gibt das Ziel der Regel an, ob wir das Paket akzeptieren, ablehnen und sogar an eine andere Kette zur weiteren Behandlung weiterleiten möchten. In jeder Regel haben wir immer ein -j, um ihr mitzuteilen, was wir tun möchten. Wenn wir kein –j hinzufügen, wird die Regel hinzugefügt und sie zählt die Pakete, aber sie tut nichts. Wenn wir -j verwenden, um zu einer anderen Kette weiterzuleiten, kehrt sie nach Beendigung der anderen Kette zum Original zurück.
  • -g , –Goto-Kette. Es wird verwendet, um den Datenverkehr an eine andere Kette weiterzuleiten, aber im Gegensatz zu Jump geht es nicht zurück zu der ursprünglichen Kette, in der es angekommen ist.
  • -i , –in-Schnittstellenname. Name der Schnittstelle, über die ein Paket empfangen wird. Es funktioniert nur für Eingabezeichenfolgen wie INPUT, FORWARD und PREROUTING. Wenn wir sagen, bedeutet es alles außer dieser Schnittstelle. Wenn wir am Ende des Namens ein + setzen, wird jede Schnittstelle mit dem Anfang des Namens es zur Überprüfung abrufen. Stellen wir uns eth0, eth1 und eth2 vor. Wenn wir alle drei setzen wollen, reicht es aus, einfach eth+ zu setzen.
  • -o , –out-Schnittstellenname. Name der Schnittstelle, über die ein Paket geht. Sie gilt nur für Ausgabestrings wie OUTPUT, FORWARD und POSTROUTING.

 

Bedingungen nur, wenn Sie TCP oder UDP verwenden

Wenn Sie das TCP- oder UDP-Protokoll verwenden, möchten Sie vielleicht nach Quell- und/oder Zielportnummer filtern, dann haben Sie die zwei Argumente, die Sie verwenden können:

  • –sport –source-port. Wählen Sie die zuzulassenden oder abzulehnenden Quellports aus. Wenn wir verwenden! ausschließt.
  • –dport –Zielport. Wählen Sie die zuzulassenden oder abzulehnenden Zielports aus. Wenn wir verwenden! ausschließt.

Es gibt noch viele weitere Bedingungen für eine erweiterte Konfiguration der Firewall, aber die elementaren haben wir bereits aufgelistet.

 

Legen Sie die Standardrichtlinie fest

Richtlinien werden verwendet, damit die Standardrichtlinie ausgeführt wird, wenn eine Regel nicht in der Kette gefunden wird. Die Standardrichtlinie für alle Ketten ist ACCEPT, aber es gibt zwei Optionen: ACCEPT oder DROP

-P, –Richtlinienkettenziel

Beispiele:

  • iptables -P EINGABETROPFEN
  • iptables -P FORWARD DROP
  • iptables -P AUSGABE DROP

Damit wird uns das Internet ausgehen, also müssen wir als nächstes damit beginnen, zulässige Regeln zu erstellen.

Unten sehen Sie alle Richtlinien, die wir in den verschiedenen Tabellen haben:

  • iptables -t filter -P (INPUT | OUTPUT | FORWARD) (AKZEPTIEREN | VERLASSEN)
  • iptables -P (INPUT | OUTPUT | FORWARD) (AKZEPTIEREN | VERLASSEN)
  • iptables -t mangle -P (INPUT | OUTPUT | FORWARD | PREROUTING | POSTROUTING) (ACCEPT | DROP)

 

Firewall-Status anzeigen

Der Parameter -L zeigt die Regeln, die wir konfiguriert haben. V ermöglicht es Ihnen, mehr Informationen über die Verbindungen zu erhalten, und N gibt die IP-Adressen und ihre entsprechenden Ports zurück, ohne a zu durchlaufen DNS Server.

  • iptables -L -n -v

Dies ist einer der wichtigsten Befehle, um den Status der Firewall anzuzeigen.

 

Module (-m match) von iptables

 

Multiport

Es ist eine Erweiterung von iptables, die uns die Möglichkeit gibt, ähnliche Regeln mit unterschiedlichen TCP- und UDP-Ports in einer zu gruppieren. Mit Multiport können Sie mehrere Ports überspringen und auch mehrere Ports hintereinander setzen, das Maximum sind 15 Port-Argumente. Beispiel:

  • iptables –A INPUT –p tcp –m multiport –dports 80,81,1000:1200 –j ACCEPT

Dank dieses Moduls haben wir die Möglichkeit, mehrere Ports in derselben Regel zu verwenden.

 

IP-Bereich

iprange ermöglicht es uns, mehrere Quell- oder Ziel-IP-Adressen auf einmal zu setzen, ohne Dutzende von Regeln setzen zu müssen. Außerdem können Sie sowohl die Quell- als auch die Ziel-IP eingeben. Die Syntax lautet wie folgt:

  • [!]–src-range ip-ip
  • [!]–dst-range ip-ip

Die Funktionsweise dieser Regel ist recht einfach, wir setzen einfach die Start-IP und die End-IP.

 

Begrenzen

Das connlimit-Modul ist für die Begrenzung der Anzahl gleichzeitiger Verbindungen verantwortlich, die von einer IP-Adresse hergestellt werden. Es ist ideal, um die Anzahl der Verbindungen zu begrenzen, um DoS zu vermeiden.

  • –connlimit-bis zu n . Wir prüfen, ob die Anzahl der Verbindungen gleich oder kleiner als N ist (dann können wir zulassen oder ablehnen).
  • –connlimit-above n . Wir prüfen, ob die Anzahl der Verbindungen größer als N ist (dann können wir zulassen oder ablehnen).
  • –connlimit-mask Präfixlänge . Wir markieren nach Subnetzbereich (es ist dasselbe wie ein Host, der 2 Verbindungen herstellt, zwei Hosts im selben Subnetz, die jeweils 1 Verbindung herstellen).
  • –connlimit-saddr . Wenden Sie die Einschränkung auf die Quellgruppe an, dies ist die Standardeinstellung, wenn nichts angegeben ist.
  • –connlimit-daddr . Wendet die Einschränkung auf die Zielgruppe an.

Angenommen, wir möchten nur zwei SSH-Verbindungen pro Client zulassen:

  • iptables -A INPUT -p tcp –dport 22 -m connlimit –connlimit-above 2 -j DROP

Wir können jedoch die ergänzende Regel aufstellen und bis zu 2 Verbindungen akzeptieren.

 

Conntrack

Dieses Modul wird verwendet, um die Verbindungen zu verfolgen, es wird verwendet, um die Ein- und Ausgabe von Paketen vor und nach dem Verbindungsaufbau zu verwalten. Innerhalb dieses Moduls gibt es mehrere Optionen, aber die wichtigste ist -ctstate, die es uns ermöglicht, verschiedene Arten von Paketen zu akzeptieren oder abzulehnen. Innerhalb von ctstate haben wir mehrere Zustände, die folgenden stechen hervor:

  • UNGÜLTIG: Das empfangene Paket ist ungültig und gehört zu keiner Verbindung.
  • NEU: Neue Verbindungen, die hergestellt werden oder die einer Verbindung zugeordnet sind, die noch nicht bidirektional ist.
  • ESTABLISHED: Etablierte Verbindungen, sie gehen zuerst durch NEW, da sie eine Antwort erhalten haben
  • RELATED: Ein Paket, das sich auf eine bestehende Verbindung bezieht, aber nicht Teil davon ist, z. B. passives FTP.

Stellen wir uns vor, dass wir auf eine beliebige Website zugreifen möchten, aber wir möchten nicht, dass absolut niemand auf uns zugreift.

  • iptables –P INPUT DROP
  • iptables -A INPUT -m conntrack –ctstate ESTABLISHED, RELATED -j ACCEPT

 

Begrenzen

Mit dem Limit-Modul können wir sowohl den Datenverkehr als auch die Anzahl der Protokolle begrenzen, die als Verbindungsversuche in das Syslog geschrieben werden. Es hat zwei Hauptargumente:

  • –Grenze N . Dieses Argument gibt die maximal zulässige Anzahl von durchschnittlichen Übereinstimmungen pro Sekunde (N/s), Minute (N/m), Stunde (N/h) oder Tag (N/d) an. N gibt die Nummer an
  • –limit-burst N . Zeigt den längsten Burst an, der auftreten kann, bevor das Limit überprüft wird –limit.

Der Standardwert, wenn nichts angegeben ist, ist 3 Übereinstimmungen pro Stunde, in Bursts von 5. Stellen Sie sich die folgende Regel vor: „iptables -A INPUT -m limit -j LOG“, die Operation ist wie folgt:

  • Wenn diese Regel zum ersten Mal getroffen wird, werden die ersten fünf Pakete protokolliert.
  • Danach dauert es zwanzig Minuten, bis ein Paket mit dieser Regel neu registriert wird (3 Übereinstimmungen zwischen 60 Minuten entsprechen 20 Minuten, da es sich um einen MITTELWERT handelt).
  • Außerdem ruft der Burst alle zwanzig Minuten, die vergehen, ohne dass ein Paket die Regel erreicht, ein Paket ab.
  • Wenn 100 Minuten lang nichts passiert, wird der Burst vollständig aufgeladen; dann zurück zur ausgangssituation.

 

Kürzlich

Das aktuelle Modul wird verwendet, um die Anzahl der Verbindungen pro Sekunde auf IP-Ebene zu begrenzen. Dies ist ideal, um uns vor Angriffen auf den SSH-Port zu schützen, da ein Angreifer mehrere Passwörter ausprobieren wird. Wenn wir beispielsweise unser SSH schützen möchten, könnten wir die folgende Regel ausführen:

  • iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m updated –set –name ssh –rsource
  • iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m updated –rcheck –seconds 60 –hitcount 4 –name ssh –rsource -j DROP

Diese Regel erlaubt nur vier Verbindungsversuche innerhalb von 60 Sekunden, es ist ein „gleitendes“ Fenster.

 

NAT

Diese Firewall ist auch für das NATing unserer Verbindung verantwortlich. Um das NAT unserer öffentlichen IP (oder Schnittstelle mit dieser öffentlichen IP) zu erstellen, müssen wir Folgendes eingeben:

  • Statisches SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –to IP_eth1
  • Dynamisches SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Normalerweise wird MASQUERADE verwendet, um NAT durchzuführen, unabhängig von der IP-Adresse, die die physische oder logische Schnittstelle hat.

Um Ports zu öffnen, müssen wir eine Regel in der PREROUTING-Kette der NAT-Tabelle hinzufügen.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 22 -j DNAT –to-destination 192.168.1.1

Die PREROUTING-Tabelle ermöglicht es uns auch, die Ports spontan zu ändern, sodass wir, wenn wir Pakete auf Port 2121 erhalten, ihn in 21 umwandeln können.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 2121 -j DNAT –to-destination 192.168.1.1:21

Sobald wir diese Firewall im Detail kennen, werden wir die grundlegenden Anwendungsbeispiele und auch die fortgeschrittensten sehen.

 

Grundlegende Anwendungsbeispiele

Diese Firewall ist sehr vollständig und wir haben Hunderte von Befehlen, die wir ausführen können, um verschiedene Aktionen auszuführen. In diesem Artikel geben wir Ihnen einige leicht verständliche Beispiele für eine erste Herangehensweise an diese Firewall.

Blockieren Sie die IP-Adresse 192.168.1.10 für jegliche Kommunikation mit unserem Server:

  • iptables -A INPUT –s 192.168.1.10 –j DROP

Blockieren Sie die IP-Adressen 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 für jegliche Kommunikation mit unserem Server:

  • iptables -A INPUT –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP

Blockieren Sie das gesamte Subnetz 192.168.2.0/24 von der Kommunikation mit unserem Server, mit Ausnahme der IP-Adresse 192.168.2.20, die zulässig wäre:

  • iptables –A INPUT –s 192.168.2.20 –j ACCEPT
  • iptables –A INPUT –s 192.168.2.0/24 –j DROP

Blockieren Sie die IP-Adresse 192.168.4.50, damit wir keine Kommunikation durchführen können:

  • iptables –A AUSGABE –d 192.168.4.50 –j DROP

Blockieren Sie die IP-Adressen 192.168.4.51 und 192.168.4.52, damit wir keine Kommunikation durchführen können:

  • iptables –A AUSGABE –d 192.168.4.51,192.168.4.52 –j DROP

Blockieren Sie den Zugriff auf www.google.es von iptables:

  • iptables –A OUTPUT –d www.google.es –j DROP

Wir wollen den Zugriff auf unseren Server vom MAC 00:01:02:03:04:05 blockieren, und der Rest alles zulassen:

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j DROP

Wir wollen unserem Server den Zugriff auf die MAC-Adresse MAC 00:01:02:03:04:06 erlauben, und der Rest verweigert alles:

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j ACCEPT
    iptables -A EINGABE -j DROP

Blockieren Sie die IP-Adresse 192.168.1.10 für das Ping von unserem Server:

  • iptables -A INPUT -s 192.168.1.10 -p icmp -j DROP

Blockieren Sie die IP-Adressen 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 vom PING unseres Servers (in einer einzigen Regel):

  • iptables -A INPUT -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP

Blockieren Sie das gesamte Subnetz 192.168.2.0/24, damit sie unseren Server nicht anpingen, mit Ausnahme der IP-Adresse 192.168.2.20, die zulässig wäre:

  • iptables -A INPUT -s 192.168.2.20 -p icmp -j ACCEPT
    iptables -A INPUT -s 192.168.2.0/24 -p icmp -j DROP

Blockieren Sie die IP-Adresse 192.168.4.50, damit wir sie nicht anpingen können.

  • iptables -A AUSGABE -d 192.168.4.50 -p icmp -j DROP

Blockieren Sie die IP-Adressen 192.168.4.51 und 192.168.4.52, damit wir sie nicht anpingen können.

  • iptables -A AUSGABE -d 192.168.4.51,192.168.4.52 -p icmp -j DROP

Blockieren Sie den Zugriff auf www.google.es von iptables.

  • iptables -A OUTPUT -d www.google.es -p icmp -j DROP

Wie Sie sehen können, ist der Betrieb mit den IP-basierten Regeln mit Ursprung und Ziel recht einfach. Wir könnten auch das iprange-Modul verwenden, um eine Reihe von IPs zu konfigurieren:

Blockieren Sie einen Bereich von IP-Adressen von 192.168.5.1 bis 192.168.5.50, damit dieser nicht von unserem Server aus pingen kann.

  • iptables -A OUTPUT -m iprange –dst-range 192.168.5.1-192.168.5.50 -p icmp -j DROP

Wir können das ICMP-Protokoll auch auf fortgeschrittenere Weise filtern. Stellen wir uns vor, wir haben einen Benutzer, der in der Lage sein möchte, jeden Host zu pingen, aber nicht möchte, dass JEDER ihn pingen kann. Wie können wir es mit iptables machen, wenn PING selbst bidirektionale Kommunikation hat?

  • iptables -A INPUT -s IP -p icmp –icmp-type echo-request -j DROP

Blockieren Sie jeden eingehenden Zugriff (nur) über die eth0-Schnittstelle und erlauben Sie so den eth1-Zugriff.

  • iptables -A INPUT -i eth0 -j DROP
  • iptables -A INPUT -i eth1 -j AKZEPTIEREN

Blockieren Sie den ausgehenden Datenverkehr (nur) auf der eth0-Schnittstelle und erlauben Sie so den eth1-Zugriff.

  • iptables -A AUSGABE -o eth0 -j DROP
  • iptables -A AUSGABE -o eth1 -j AKZEPTIEREN

Erlauben Sie jeglichen ein- und ausgehenden Datenverkehr auf eth0 und verweigern Sie jeglichen ein- oder ausgehenden Datenverkehr auf eth1.

  • iptables -A INPUT -i eth0 -j AKZEPTIEREN
  • iptables -A AUSGABE -o eth0 -j AKZEPTIEREN
  • iptables -A INPUT -i eth1 -j DROP
  • iptables -A AUSGABE -o eth1 -j DROP

Wenn Sie sehen möchten, wie das TCP- und UDP-Protokoll funktioniert, finden Sie hier einige Beispiele:

Blockieren Sie den Webzugriff auf www.google.es und erlauben Sie alles andere (z. B. Ping).

  • iptables -A OUTPUT -d www.google.es -p tcp –dport 80 -j DROP

Blockieren Sie den FTP-Zugriff auf jede IP oder Domain und lassen Sie alles andere zu.

  • iptables -A AUSGABE -p tcp –dport 21 -j DROP

Blockieren Sie den SSH-Zugriff auf IP 192.168.1.50 und lassen Sie alles andere zu.

  • iptables -A AUSGABE -d 192.168.1.50 -p tcp –dport 22 -j DROP

Blockieren Sie den Telnet-Zugriff auf das Subnetz 192.168.2.0 und lassen Sie alles andere zu.

  • iptables -A AUSGABE -d 192.168.2.0/24 -p tcp –dport 23 -j DROP

Blockieren Sie den Zugriff von 192.168.1.50 auf unseren Webserver.

  • iptables -A INPUT -s 192.168.1.50 -p tcp –dport 80 -j DROP

Blockieren Sie 192.168.1.150 und 192.168.1.151 den Zugriff auf unseren SSH-Server.

  • iptables -A INPUT -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP

Blockieren Sie den Zugriff des gesamten Subnetzes 192.168.2.0/24 auf unseren Telnet-Dienst

  • iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 23 -j DROP

Blockieren Sie den Zugriff aller auf den OpenVPN-Server, mit Ausnahme der zulässigen IP-Adresse 77.77.77.77.

  • iptables -A INPUT -s 77.77.77.77 -p tcp –dport 1194 -j ACCEPT
  • iptables -A INPUT -p tcp –dport 1194 -j DROP

Sperren Sie den DNS-Zugriff auf 8.8.8.8 und erlauben Sie alles andere (z. B. Ping).

  • iptables -A AUSGABE -d 8.8.8.8 -p tcp –dport 53 -j DROP
  • iptables -A AUSGABE -d 8.8.8.8 -p udp –dport 53 -j DROP

Blockieren Sie den Zugriff auf Port 1194 für jede IP oder Domäne und lassen Sie alles andere zu.

  • iptables -A INPUT -p udp –dport 1194 -j DROP

Wir haben einen DNS-Server auf unserem Server. Wir möchten, dass nur Computer im Subnetz 192.168.1.0/24 damit kommunizieren können, und blockieren alle anderen Zugriffe.

  • iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 53 -j ACCEPT
  • iptables -A INPUT -s 192.168.1.0/24 -p udp –dport 53 -j ACCEPT
  • iptables -A INPUT -p tcp –dport 53 -j DROP
  • iptables -A INPUT -p udp –dport 53 -j DROP

Blockieren Sie den Zugriff auf unseren Webserver aus dem IP-Bereich 192.168.100.0/24, der von der eth0-Schnittstelle kommt.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p tcp –dport 80 -j DROP

Blockieren Sie den Zugriff auf unseren SSH-Server aus dem IP-Bereich 192.168.100.0/24, der von der eth1-Schnittstelle kommt.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth1 -p tcp –dport 22 -j DROP

 

Anwendungsbeispiele für Fortgeschrittene

Wenn Sie mehr über iptables erfahren möchten, finden Sie hier einige Beispiele, in denen wir das connlimit-Modul verwenden.

Erlauben Sie nur 10 Telnet-Verbindungen pro Client.

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-above 10 –connlimit-mask 32 -j DROP

Verweigern Sie bis zur Verbindung Nummer 5 im Web, die von einem Client hergestellt wurde (es ergibt nicht viel Sinn, ist aber ein Beispiel).

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-upto 5 –connlimit-mask 32 -j DROP

Erlauben Sie nur 10 Telnet-Verbindungen pro Client (machen Sie es anders als oben).

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-upto 10 –connlimit-mask 32 -j ACCEPT
  • iptables -A INPUT -p tcp –dport 23 -j DROP

Lassen Sie nur 10 Webverbindungen im IP-Bereich 10.0.0.0/8 zu und lehnen Sie ab, wenn diese Zahl überschritten wird.

  • iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 80 -m connlimit –connlimit-above 10 –connlimit-mask 8 -j DROP

Erlauben Sie nur 20 HTTP-Verbindungen für jeden Client, sobald diese überschritten wird, senden wir einen TCP-Reset.

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset

Oder so:

  • iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset

Wie Sie sehen können, ist diese Firewall wirklich vollständig und wir können viele sehr erweiterte Konfigurationen vornehmen, um alle eingehenden und ausgehenden Verbindungen im Detail zu kontrollieren.