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

25 am häufigsten verwendete Beispiele für Linux-IPTables-Regeln

Auf den ersten Blick könnten IPTables-Regeln kryptisch aussehen.

In diesem Artikel habe ich 25 praktische IPTables-Regeln angegeben, die Sie kopieren/einfügen und für Ihre Bedürfnisse verwenden können.

Diese Beispiele dienen als grundlegende Vorlagen, mit denen Sie diese Regeln an Ihre spezifischen Anforderungen anpassen können.

Zur einfachen Bezugnahme sind alle diese 25 iptables-Regeln im Shell-Script-Format:iptables-rules

1. Vorhandene Regeln löschen

Bevor Sie mit der Erstellung eines neuen Regelsatzes beginnen, sollten Sie alle Standardregeln und vorhandenen Regeln bereinigen. Verwenden Sie dazu den iptables-Flush-Befehl wie unten gezeigt.

iptables -F
(or)
iptables --flush

2. Standardkettenrichtlinien festlegen

Die standardmäßige Kettenrichtlinie ist ACCEPT. Ändern Sie dies für alle INPUT-, FORWARD- und OUTPUT-Ketten in DROP, wie unten gezeigt.

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Wenn Sie die Standardrichtlinie sowohl der INPUT- als auch der OUTPUT-Kette als DROP festlegen, sollten Sie für jede Firewall-Regelanforderung, die Sie haben, zwei Regeln definieren. d.h. eine für eingehende und eine für ausgehende.

In all unseren Beispielen unten haben wir zwei Regeln für jedes Szenario, da wir DROP als Standardrichtlinie sowohl für die INPUT- als auch für die OUTPUT-Kette festgelegt haben.

Wenn Sie Ihren internen Benutzern vertrauen, können Sie die letzte Zeile oben weglassen. d.h. Verwerfen Sie standardmäßig nicht alle ausgehenden Pakete. In diesem Fall müssen Sie für jede Firewall-Regelanforderung nur eine Regel definieren. d.h. Regel nur für eingehende definieren, da ausgehende Pakete für alle Pakete ACCEPT sind.

Hinweis: Wenn Sie nicht wissen, was eine Kette bedeutet, sollten Sie sich zuerst mit den Grundlagen von IPTables vertraut machen.

3. Blockieren Sie eine bestimmte IP-Adresse

Bevor wir mit anderen Beispielen fortfahren, sollten Sie, wenn Sie eine bestimmte IP-Adresse blockieren möchten, dies zuerst wie unten gezeigt tun. Ändern Sie das „x.x.x.x“ im folgenden Beispiel in die spezifische IP-Adresse, die Sie blockieren möchten.

BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP

Dies ist hilfreich, wenn Sie einige seltsame Aktivitäten von einer bestimmten IP-Adresse in Ihren Protokolldateien finden und diese IP-Adresse vorübergehend blockieren möchten, während Sie weitere Nachforschungen anstellen.

Sie können auch eine der folgenden Varianten verwenden, die nur den TCP-Verkehr auf der eth0-Verbindung für diese IP-Adresse blockiert.

iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

4. ALLES eingehende SSH zulassen

Die folgenden Regeln erlauben ALLE eingehenden SSH-Verbindungen auf der eth0-Schnittstelle.

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Hinweis :Wenn Sie genau verstehen möchten, was jedes einzelne Argument bedeutet, sollten Sie How to Add IPTables Firewall Rules lesen

5. Eingehendes SSH nur von einem bestimmten Netzwerk zulassen

Die folgenden Regeln erlauben eingehende SSH-Verbindungen nur aus dem 192.168.100.X-Netzwerk.

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Im obigen Beispiel können Sie statt /24 auch die vollständige Subnetzmaske verwenden. also „192.168.100.0/255.255.255.0“.

6. Eingehendes HTTP und HTTPS zulassen

Die folgenden Regeln lassen den gesamten eingehenden Webverkehr zu. d. h. HTTP-Datenverkehr an Port 80.

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Die folgenden Regeln lassen den gesamten eingehenden sicheren Webdatenverkehr zu. d. h. HTTPS-Datenverkehr an Port 443.

iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

7. Kombinieren Sie mehrere Regeln mithilfe von MultiPorts

Wenn Sie eingehende Verbindungen von der Außenwelt zu mehreren Ports zulassen, können Sie diese mithilfe der Multiport-Erweiterung wie unten gezeigt kombinieren, anstatt einzelne Regeln für jeden einzelnen Port zu schreiben.

Das folgende Beispiel lässt den gesamten eingehenden SSH-, HTTP- und HTTPS-Datenverkehr zu.

iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8. Ausgehendes SSH zulassen

Die folgenden Regeln erlauben eine ausgehende SSH-Verbindung. d.h. wenn Sie von innen zu einem externen Server ssh.

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Bitte beachten Sie, dass dies etwas anders ist als die eingehende Regel. d.h. Wir erlauben sowohl den Zustand NEW als auch ESTABLISHED in der OUTPUT-Kette und nur den ESTABLISHED-Zustand in der INPUT-Kette. Für die eingehende Regel ist es umgekehrt.

9. Ausgehendes SSH nur zu einem bestimmten Netzwerk zulassen

Die folgenden Regeln erlauben ausgehende SSH-Verbindungen nur zu einem bestimmten Netzwerk. D.h. Sie können ssh nur zum 192.168.100.0/24-Netzwerk von innen verwenden.

iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10. Ausgehendes HTTPS zulassen

Die folgenden Regeln lassen ausgehenden sicheren Webdatenverkehr zu. Dies ist hilfreich, wenn Sie Internetverkehr für Ihre Benutzer zulassen möchten. Auf Servern sind diese Regeln auch hilfreich, wenn Sie wget verwenden möchten, um einige Dateien von außerhalb herunterzuladen.

iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

Hinweis:Fügen Sie für ausgehenden HTTP-Webdatenverkehr zwei zusätzliche Regeln wie oben hinzu und ändern Sie 443 in 80.

11. Lastenausgleich für eingehenden Webverkehr

Sie können Ihren eingehenden Webverkehr auch mithilfe von iptables-Firewallregeln ausgleichen.

Dies verwendet die iptables n-te Erweiterung. Das folgende Beispiel gleicht den HTTPS-Datenverkehr auf drei verschiedene IP-Adressen aus. Für jedes 3. Paket wird die Last auf den entsprechenden Server verteilt (unter Verwendung des Zählers 0).

iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

12. Ping von außen nach innen zulassen

Die folgenden Regeln ermöglichen es externen Benutzern, Ihre Server anzupingen.

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13. Ping von innen nach außen zulassen

Die folgenden Regeln erlauben es Ihnen, von innen an jeden der externen Server zu pingen.

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

14. Loopback-Zugriff zulassen

Sie sollten vollen Loopback-Zugriff auf Ihren Servern erlauben. D.h. Zugriff über 127.0.0.1

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

15. Internes Netzwerk für externes Netzwerk zulassen.

Verwenden Sie auf dem Firewall-Server, auf dem eine Ethernet-Karte mit dem externen und eine andere Ethernet-Karte mit den internen Servern verbunden ist, die folgenden Regeln, um dem internen Netzwerk die Kommunikation mit dem externen Netzwerk zu ermöglichen.

In diesem Beispiel ist eth1 mit einem externen Netzwerk (Internet) verbunden und eth0 ist mit einem internen Netzwerk verbunden (Beispiel:192.168.1.x).

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16. Ausgehendes DNS zulassen

Die folgenden Regeln erlauben ausgehende DNS-Verbindungen.

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

17. NIS-Verbindungen zulassen

Wenn Sie NIS ausführen, um Ihre Benutzerkonten zu verwalten, sollten Sie die NIS-Verbindungen zulassen. Selbst wenn die SSH-Verbindung erlaubt ist, können sich Benutzer nicht anmelden, wenn Sie die NIS-bezogenen ypbind-Verbindungen nicht zulassen.

Die NIS-Ports sind dynamisch. d.h. wenn ypbind startet, weist es die Ports zu.

Führen Sie zuerst ein rpcinfo -p wie unten gezeigt aus und erhalten Sie die Portnummern. In diesem Beispiel wurden die Ports 853 und 850 verwendet.

rpcinfo -p | grep ypbind

Erlauben Sie nun eingehende Verbindungen zum Port 111 und den Ports, die von ypbind verwendet wurden.

iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

Das Obige funktioniert nicht, wenn Sie ypbind neu starten, da es zu diesem Zeitpunkt andere Portnummern haben wird.

Dafür gibt es zwei Lösungen:1) Verwenden Sie eine statische IP-Adresse für Ihr NIS, oder 2) Verwenden Sie einige clevere Shell-Scripting-Techniken, um automatisch die dynamische Portnummer aus der Ausgabe des Befehls „rpcinfo -p“ zu ermitteln, und verwenden Sie die obigen iptables-Regeln.

18. Rsync von einem bestimmten Netzwerk zulassen

Die folgenden Regeln erlauben rsync nur von einem bestimmten Netzwerk.

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

19. MySQL-Verbindung nur von einem bestimmten Netzwerk zulassen

Wenn Sie MySQL ausführen, möchten Sie normalerweise keine direkte Verbindung von außen zulassen. In den meisten Fällen wird der Webserver möglicherweise auf demselben Server ausgeführt, auf dem die MySQL-Datenbank ausgeführt wird.

DBAs und Entwickler müssen sich jedoch möglicherweise von ihrem Laptop und Desktop mithilfe des MySQL-Clients direkt bei MySQL anmelden. In diesem Fall möchten Sie möglicherweise Ihrem internen Netzwerk erlauben, direkt mit MySQL zu kommunizieren, wie unten gezeigt.

iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

20. Sendmail- oder Postfix-Verkehr zulassen

Die folgenden Regeln erlauben Mailverkehr. Es kann sendmail oder postfix sein.

iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

21. IMAP und IMAPS zulassen

Die folgenden Regeln lassen IMAP/IMAP2-Datenverkehr zu.

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

Die folgenden Regeln lassen IMAPS-Datenverkehr zu.

iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

22. POP3 und POP3S zulassen

Die folgenden Regeln erlauben den POP3-Zugriff.

iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

Die folgenden Regeln erlauben den POP3S-Zugriff.

iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

23. Verhindern Sie DoS-Angriffe

Die folgende iptables-Regel hilft Ihnen dabei, den Denial-of-Service-Angriff (DoS) auf Ihren Webserver zu verhindern.

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

Im obigen Beispiel:

  • -m limit:Dies verwendet die iptables-Erweiterung limit
  • –Limit 25/Minute:Dies begrenzt nur maximal 25 Verbindungen pro Minute. Ändern Sie diesen Wert basierend auf Ihren spezifischen Anforderungen
  • –limit-burst 100:Dieser Wert gibt an, dass das Limit/Minute erst durchgesetzt wird, nachdem die Gesamtzahl der Verbindungen das Limit-Burst-Level erreicht hat.

24. Portweiterleitung

Das folgende Beispiel leitet den gesamten Datenverkehr, der an Port 442 ankommt, an 22 weiter. Das bedeutet, dass die eingehende SSH-Verbindung sowohl von Port 22 als auch von Port 422 kommen kann.

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

Wenn Sie das oben Gesagte tun, müssen Sie auch eingehende Verbindungen auf Port 422 explizit zulassen.

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

25. Verworfene Pakete protokollieren

Möglicherweise möchten Sie auch alle verworfenen Pakete protokollieren. Diese Regeln sollten ganz unten stehen.

Erstellen Sie zuerst eine neue Kette namens LOGGING.

iptables -N LOGGING

Stellen Sie als Nächstes sicher, dass alle verbleibenden eingehenden Verbindungen wie unten gezeigt zur LOGGING-Kette springen.

iptables -A INPUT -j LOGGING

Als Nächstes protokollieren Sie diese Pakete, indem Sie ein benutzerdefiniertes „Protokollpräfix“ angeben.

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

Verwerfen Sie schließlich diese Pakete.

iptables -A LOGGING -j DROP

Alle oben genannten 25 iptables-Regeln sind im Shell-Script-Format:iptables-rules

Frühere Artikel in der iptables-Reihe:

  • Linux-Firewall-Tutorial:Grundlagen zu IPTables-Tabellen, -Ketten, -Regeln
  • IPTables Flush:Alle Regeln auf RedHat und CentOS Linux löschen/entfernen
  • Linux IPTables:So fügen Sie Firewall-Regeln hinzu (Beispiel mit SSH-Zulassung)
  • Linux IPTables:Beispiele für eingehende und ausgehende Regeln (SSH und HTTP)

Linux
  1. 40 häufig verwendete grundlegende Linux-Befehle

  2. Die 7 am häufigsten verwendeten Linux-Namespaces

  3. [Linux]:15 am häufigsten verwendete YUM-Befehle mit Beispielen

  4. 80 meistgenutzte essentielle Linux-Anwendungen von 2021

  5. lsof :Am häufigsten verwendete Beispiele

Von Linux-Systemadministratoren häufig verwendete Linux-Befehle – Teil 4

Von Linux-Systemadministratoren häufig verwendete Linux-Befehle – Teil 3

Von Linux-Systemadministratoren häufig verwendete Linux-Befehle – Teil 2

Von Linux-Systemadministratoren häufig verwendete Linux-Befehle – Teil 1

Linux du Command Nützlichste Beispiele

So sichern Sie eine Linux-Firewall mit IPTables-Regeln