GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Spickzettel für IPtables-Befehle

Übersicht

IPtables ist eine der bekanntesten Firewalls (und auch ziemlich effektiv), die auch auf vielen Linux-Distributionen standardmäßig vorinstalliert ist. Der Zweck dieses Beitrags ist es, als Spickzettel für Iptables-Befehle zu fungieren, wenn man bedenkt, wie leistungsfähig Iptables ist, hat es auch zahlreiche Befehle für viele Netzwerkszenarien. Iptables verwendet verschiedene Tabellenregeln mit mehreren Ketten, um Datenverkehr zu blockieren und zuzulassen:

  • FILTER: Dies ist die Standardtabelle, die die Verkehrsregeln filtern soll
    • EINGABE :Unter Eingabekette definieren wir die Regeln und Verhaltensweisen, um eingehende Verbindungen zu kontrollieren.
    • AUSGABE :Unter der Ausgabekette kontrollieren wir die ausgehenden Verbindungen
    • WEITER :Wie der Name schon sagt, verwenden wir eine Weiterleitungskette, um eingehende Verbindungen anzugeben, die wir sofort auf eine andere Route, Adresse oder einen anderen Port umleiten (weiterleiten). Weiterleitung wird häufig zusammen mit NAT verwendet.
  • NAT – Netzwerkadressübersetzungstabelle, die verwendet wird, um mehrere lokale Verkehrsressourcen den ausgehenden Verbindungen zuzuordnen, um eine neue Route einzurichten. Die NAT-Tabelle enthält die folgenden Kettenregeln:
    • PRÄROUTING – wird verwendet, um ein Paket zu kontrollieren/modifizieren, sobald es angekommen ist (eingehende Verbindungen)
    • AUSGABE – wird verwendet, um lokal generierte Pakete zu modifizieren
    • POSTROUTING – wird verwendet, um ein Paket zu kontrollieren/modifizieren, sobald es im Begriff ist zu gehen (ausgehende Verbindungen)
  • MANGEL – Mangeltabelle wird zur Paketmodifikation oder Paketänderung verwendet. Die Mangle-Tabelle hat 5 Kettenregeln:
    • PRÄROUTING – zum Ändern eingehender Verbindungen
    • AUSGABE – zum Ändern lokal generierter Pakete
    • EINGABE – für eingehende Pakete
    • POSTROUTING – zum Verändern von Paketen kurz vor dem Versenden
    • WEITER – für Pakete, die durch die Box geleitet werden (oder an eine neue Verbindung/Route weitergeleitet werden müssen)

Für diesen Spickzettel gibt es ein Github-Repo mit einer herunterladbaren Version im .pdf-Format:LINK

IPtables-Befehle

So zeigen Sie Firewall-Regeln an

– Alle Regeln anzeigen

# iptables -L

– Alle Regeln mit Zeilennummern anzeigen

# iptables -L --line-numbers

– Anzeige aller Regeln mit ausführlicher Ausgabe der aktiven Pakete

# iptables -n -L -v

-Anzeigeregeln für eine NAT-Kette

# iptables -t nat -L

Diese Ausgabe-/Anzeigeoptionen können auch mit anderen Anzeigebefehlen kombiniert werden, wie:

# iptables -t nat -L --line-numbers

– Regeln für eine bestimmte Kettenregel anzeigen

# iptables -L INPUT

– Regeln anzeigen, aber mit Kettenspezifikationen

# iptables -S INPUT

-Anzeigeregeln für eine Kette und mit aktiven Paketen

# iptables -S INPUT -v

Regeln löschen und hinzufügen

– Löschen einer Regel anhand einer Zeilennummer

# iptables -D INPUT 10

– Löschen einer Regel durch eine Spezifikation

# iptables -D INPUT -m conntrack --ctstate

– Alle Ketten leeren (alle Kettenregeln löschen)

# iptables -F

– Flush eine einzelne Kette

# iptables -F INPUT
# Iptables -t nat -F
# Iptables -t mangle -F

– Eine neue Kette hinzufügen

# iptables -N custom-filter

– Fügen Sie eine neue Regel hinzu

# iptables -I INPUT -s 123.123.123.133 -j DROP
# iptables -A INPUT -p tcp --dport 22 -j REJECT

Hinweis zum Hinzufügen der Regeln – wie Sie hier sehen können, haben wir zwei verschiedene Regeln mit unterschiedlichen Optionen. Beachten Sie die ersten definierten Optionen direkt nach den iptables:-I und -A.
Diese Optionen sagen Ihnen, wo Regeln in der Tabelle platziert werden, am Anfang (Option -I) der Kettenregel oder am unten (-A).
Iptables liest die Regeln, indem es von der ersten Regel ganz oben in der Kette ausgeht, dann nach unten geht und sie in dieser Reihenfolge anwendet.

Beispiele und am häufigsten verwendete IPtables-Befehle

Datenverkehr blockieren

– Blockieren Sie eine IP-Adresse, um Zugriff auf eingehende Nachrichten zu erhalten

# iptables -A INPUT -s 192.168.100.1 -j DROP

– Ein bestimmtes IP-Subnetz für eingehende Nachrichten blockieren

# iptables -A INPUT -s 192.168.1.100/24 -j DROP

– Blockieren Sie eine IP-Adresse, um alle Pakete abzulehnen

# iptables -A INPUT -s 192.168.1.100 -j REJECT

– Blockieren Sie eine IP-Adresse für eine bestimmte Netzwerkschnittstelle bei eingehenden Nachrichten

# iptables -A INPUT -i eth0 -s 192.168.1.102 -j DROP

– Blockieren Sie nur den TCP-Datenverkehr für eine bestimmte IP-Adresse oder einen bestimmten IP-Bereich

# iptables -A INPUT -p tcp -s 192.168.1.100 -j DROP
# iptables -A INPUT -p tcp -s 192.168.1.100/24 -j DROP

– Datenverkehr für einen bestimmten Port verwerfen (Port schließen)

# iptables -A INPUT -p tcp --dport xxx -j DROP
# iptables -A INPUT -p tcp --dport 22 -j DROP

– Verwerfen Sie alle ungültigen Netzwerkpakete bei eingehenden

# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

Verkehr zulassen oder Ports mit IPtables öffnen

– Datenverkehr (eingehend und ausgehend) über SSH zulassen

# iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Hinweis :Um den Datenverkehr auf diesen Ports zu blockieren, ändern Sie die ACCEPT-Option in DROP

– Zulassen einer bestimmten IP oder eines bestimmten Netzwerkbereichs bei SSH-Eingang (entfernen Sie CIDR, um nur eine IP festzulegen)

# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Hinweis :Dieselbe Konfiguration für den Netzwerkbereich kann auf andere eingehende Regeln angewendet werden, die unten aufgelistet sind

Hinweis :Um den Datenverkehr auf diesen Ports zu blockieren, ändern Sie die ACCEPT-Option in DROP

– Datenverkehr über HTTP und HTTPS (eingehend und ausgehend) zulassen

# iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Multiport-Konfiguration

# iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Hinweis:Um den Datenverkehr auf diesen Ports zu blockieren, ändern Sie die ACCEPT-Option in DROP

– Datenverkehr auf MySQL zulassen 

# iptables -A INPUT -p tcp -s 192.168.1.100/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– MySQL-Datenverkehr zu einer bestimmten Netzwerkschnittstelle zulassen

# iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– PostgreSQL-Datenverkehr zulassen

# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– PostgreSQL-Datenverkehr zu einer bestimmten Netzwerkschnittstelle zulassen

# iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– Eingang über SMTP/IMAP/IMAPS/POP3/POP3S zulassen/

SMPT
# iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

IMAP
# iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

IMAPS
# iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

POP3
# iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

POP3S
# iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

– So konfigurieren Sie die Portweiterleitung in IPtables

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Dieser Befehl leitet beispielsweise den gesamten eingehenden Datenverkehr auf eth0 um Port von Port 25 auf Port 2525

Diese Parameter dienen hier auch als Beispiel. Was hier erreicht wird, ist – auf Port 80 werden alle eingehenden Verbindungen auf 100 hergestellte Verbindungen pro Minute begrenzt/reduziert und ein Limitr-Burst von 200 übereinstimmenden Paketen festgelegt.

– Blockieren Sie eingehende Ping-Anfragen

# iptables -A INPUT -p icmp -i eth0 -j DROP

– Blockieren oder erlauben Sie den Zugriff für eine bestimmte Mac-Adresse

# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:00:00:00:00:00 -j ACCEPT

– Loopback-Zugriff zulassen

# iptables -A INPUT -i lo -j ACCEPT 
# iptables -A OUTPUT -o lo -j ACCEPT

– Beschränken Sie die Anzahl gleichzeitiger Verbindungen pro IP-Adresse

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

Der obige Befehl begrenzt die Anzahl der Verbindungen zu Port 22 (ssh) und erlaubt nicht mehr als Verbindungen pro Client. Die Portnummer kann natürlich geändert werden.

Verworfene Pakete protokollieren

# iptables -A INPUT -i eth0 -j LOG --log-prefix "Dropped packets:"

Sie können das –log-Präfix nach Belieben ändern. Die Protokolle können mit dem folgenden Befehl durchsucht werden:

# grep "IPtables dropped packets:" /var/log/messages

– Verworfene Pakete protokollieren, die aus einem bestimmten Netzwerkbereich stammen

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

– So suchen Sie mit grep nach Einträgen/Regeln in den IPtables

# iptables -L INPUT -v -n | grep 192.168.0.100

Iptables-Befehle, um fortgeschrittenere Cyberangriffe zu verhindern

– So blockieren Sie Netzwerkfluten am http-Port

# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

– Port-Scanning-Schutz konfigurieren

# iptables -N port-scanning
# iptables -A port-scanning -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s --limit-burst 2 -j RETURN
# iptables -A port-scanning -j DROP

– Brute-Force-Schutz für SSH

# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --set
# iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

– Schutz vor SYN-Flood-Angriffen

# iptables -N syn_flood
# iptables -A INPUT -p tcp --syn -j syn_flood
# iptables -A syn_flood -m limit --limit 1/s --limit-burst 3 -j RETURN
# iptables -A syn_flood -j DROPiptables -A INPUT -p icmp -m limit --limit  1/s --limit-burst 1 -j ACCEPT
# iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix PING-DROP:
# iptables -A INPUT -p icmp -j DROPiptables -A OUTPUT -p icmp -j ACCEPT

– Abwehr von SYN-Flood-Angriffen mit SYNPROXY

# iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j CT --notrack
# iptables -A INPUT -p tcp -m tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

– Blockieren Sie eingehende Pakete, die nicht SYN sind

# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

– Erzwingen Sie eine Fragmentprüfung bei allen eingehenden Paketen

# iptables -A INPUT -f -j DROP

– Alle eingehenden Pakete blockieren, um XMAS-Paketangriffe zu verhindern

# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

– Alle eingehenden NULL-Pakete blockieren

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

– Alle Pakete mit falschen TCP-Flags abfangen und verwerfen

# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
# iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

– IPtables-Regeln in einer Datei speichern und wiederherstellen

# iptables-save > ~/iptables.rules
# iptables-restore < ~/iptables.rules

– IPtables-Regeln dauerhaft speichern mit netfilter

Hinweis:erfordert das iptables-Plugin „iptables-persistent“ installiert werden. Kann mit „apt install iptables-persistent“ installiert werden auf Debian/Ubuntu-Distributionen.

# netfilter-persistent save

Zusammenfassung

Um den Beitrag zusammenzufassen – wir haben eine Liste mit Spickzetteln für IPtables-Befehle mit einigen der häufigsten Regeln zusammengestellt, wie IPtables für verschiedene Anwendungsfälle konfiguriert werden (mit einigen Allow- und Drop-Regeln, die täglich für viele Webdienste und Dienste verwendet werden, die über das Netzwerk funktionieren ) und listete auch einige erweiterte IPtables-Befehle auf, die verschiedene Cyberangriffe verhindern können.

Auch wenn iptables eine großartige Firewall ist, seien Sie vorsichtig, welche Regeln Sie anwenden.


Linux
  1. Spickzettel für verschiedene Dienste neu starten

  2. Yum-Befehls-Spickzettel

  3. Cheat Sheet für Linux-Befehle

  4. Grundlegende vi-Befehle (Spickzettel)

  5. Cheat Sheet für grundlegende Linux-Befehle

Git-Befehls-Spickzettel

Spickzettel für MySQL-Befehle

Spickzettel für MySQL-Datenbankbefehle für Linux

Pacman Commands Spickzettel für Arch Linux

Grundlegende Nano-Befehle (Spickzettel)

Grundlegende vim-Befehle (Spickzettel)