Website-Suche

25 nützliche IPtable-Firewall-Regeln, die jeder Linux-Administrator kennen sollte


Die Verwaltung des Netzwerkverkehrs ist eine der schwierigsten Aufgaben eines Systemadministrators. Er muss die Firewall so konfigurieren, dass sie den System- und Benutzeranforderungen sowohl für eingehende als auch für ausgehende Verbindungen entspricht, ohne das System anfällig für Angriffe zu machen.

Hier kommen iptables zum Einsatz. Iptables ist eine Linux-Befehlszeilen-Firewall, die es Systemadministratoren ermöglicht, ein- und ausgehenden Datenverkehr über eine Reihe konfigurierbarer Tabellenregeln zu verwalten.

Iptables verwendet eine Reihe von Tabellen mit Ketten, die eine Reihe integrierter oder benutzerdefinierter Regeln enthalten. Dank ihnen kann ein Systemadministrator den Netzwerkverkehr seines Systems ordnungsgemäß filtern.

Laut iptables-Handbuch gibt es derzeit drei Arten von Tabellen:

    1. FILTER – Dies ist die Standardtabelle, die die integrierten Ketten enthält für:

      1. INPUT – Pakete, die für lokale Sockets bestimmt sind
      2. WEITER – Pakete, die durch das System weitergeleitet werden
      3. OUTPUT – lokal generierte Pakete
    2. NAT – eine Tabelle, die konsultiert wird, wenn ein Paket versucht, eine neue Verbindung herzustellen. Es verfügt über Folgendes:

      1. PREROUTING – wird zum Ändern eines Pakets verwendet, sobald es empfangen wird
      2. OUTPUT – wird zum Ändern lokal generierter Pakete verwendet
      3. POSTROUTING – wird zum Ändern von Paketen verwendet, wenn diese gerade ausgehen
    3. MANGLE – diese Tabelle wird zur Paketänderung verwendet. Bis zur Kernel-Version 2.4 hatte diese Tabelle nur zwei Ketten, jetzt sind es 5:

      1. PREROUTING – zum Ändern eingehender Verbindungen
      2. OUTPUT – zum Ändern lokal generierter Pakete
      3. INPUT – für eingehende Pakete
      4. POSTROUTING – zum Ändern von Paketen, wenn diese gerade ausgehen
      5. WEITER – für Pakete, die durch die Box geleitet werden

In diesem Artikel sehen Sie einige nützliche Befehle, die Ihnen bei der Verwaltung Ihrer Linux-Box-Firewall über iptables helfen. In diesem Artikel beginne ich mit einfacheren Befehlen und gehe zum Schluss zu komplexeren über.

1. Starten/Stoppen/Neustarten der Iptables-Firewall

Zunächst sollten Sie wissen, wie Sie den iptables-Dienst in verschiedenen Linux-Distributionen verwalten. Das ist ziemlich einfach:

Auf SystemD-basierten Linux-Distributionen

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

Auf SysVinit-basierten Linux-Distributionen

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Überprüfen Sie alle IPtables-Firewallregeln

Wenn Sie Ihre bestehenden Regeln überprüfen möchten, verwenden Sie den folgenden Befehl:

iptables -L -n -v

Dies sollte eine Ausgabe ähnlich der folgenden zurückgeben:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Wenn Sie lieber die Regeln für eine bestimmte Tabelle überprüfen möchten, können Sie die Option -t verwenden, gefolgt von der Tabelle, die Sie überprüfen möchten. Um beispielsweise die Regeln in der Tabelle NAT zu überprüfen, können Sie Folgendes verwenden:

iptables -t nat -L -v -n

3. Blockieren Sie bestimmte IP-Adressen in der IPtables-Firewall

Wenn Sie eine ungewöhnliche oder missbräuchliche Aktivität von einer IP-Adresse aus feststellen, können Sie diese IP-Adresse mit der folgenden Regel blockieren:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Hier müssen Sie "xxx.xxx.xxx.xxx" durch die tatsächliche IP-Adresse ersetzen. Seien Sie beim Ausführen dieses Befehls sehr vorsichtig, da Sie versehentlich Ihre eigene IP-Adresse blockieren können. Die Option -A hängt die Regel am Ende der ausgewählten Kette an.

Falls Sie nur den TCP-Verkehr von dieser IP-Adresse blockieren möchten, können Sie die Option -p verwenden, die das Protokoll angibt. Auf diese Weise sieht der Befehl folgendermaßen aus:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Entsperren Sie die IP-Adresse in der IPtables-Firewall

Wenn Sie entschieden haben, dass Sie Anfragen von bestimmten IP-Adressen nicht mehr blockieren möchten, können Sie die Blockierungsregel mit dem folgenden Befehl löschen:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

Die Option -D löscht eine oder mehrere Regeln aus der ausgewählten Kette. Wenn Sie lieber die längere Option verwenden möchten, können Sie --delete verwenden.

5. Blockieren Sie einen bestimmten Port in der IPtables-Firewall

Manchmal möchten Sie möglicherweise eingehende oder ausgehende Verbindungen an einem bestimmten Port blockieren. Dies ist eine gute Sicherheitsmaßnahme und Sie sollten beim Einrichten Ihrer Firewall wirklich darüber nachdenken.

Um ausgehende Verbindungen an einem bestimmten Port zu blockieren, verwenden Sie:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Um eingehende Verbindungen zuzulassen, verwenden Sie:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

Ersetzen Sie in beiden Beispielen "xxx" durch den tatsächlichen Port, den Sie zulassen möchten. Wenn Sie UDP-Verkehr anstelle von TCP blockieren möchten, ändern Sie einfach "tcp" durch "udp" im oben iptables-Regel.

6. Erlauben Sie mehrere Ports auf IPtables mithilfe von Multiport

Sie können mehrere Ports gleichzeitig zulassen, indem Sie Multiport verwenden. Nachfolgend finden Sie eine solche Regel für eingehende und ausgehende Verbindungen:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Erlauben Sie einen bestimmten Netzwerkbereich für einen bestimmten Port auf IPtables

Möglicherweise möchten Sie bestimmte Verbindungen an einem bestimmten Port auf ein bestimmtes Netzwerk beschränken. Nehmen wir an, Sie möchten ausgehende Verbindungen auf Port 22 zum Netzwerk 192.168.100.0/24 zulassen.

Sie können es mit diesem Befehl tun:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Blockieren Sie Facebook auf der IPtables-Firewall

Manche Arbeitgeber sperren ihren Mitarbeitern gerne den Zugriff auf Facebook. Nachfolgend finden Sie ein Beispiel, wie Sie den Datenverkehr zu Facebook blockieren können.

Hinweis: Wenn Sie Systemadministrator sind und diese Regeln anwenden müssen, denken Sie daran, dass Ihre Kollegen möglicherweise nicht mehr mit Ihnen sprechen :)

Finden Sie zunächst die von Facebook verwendeten IP-Adressen:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Sie können dieses Facebook-Netzwerk dann blockieren mit:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Beachten Sie, dass der von Facebook verwendete IP-Adressbereich in Ihrem Land variieren kann.

9. Richten Sie die Portweiterleitung in IPtables ein

Manchmal möchten Sie möglicherweise den Datenverkehr eines Dienstes an einen anderen Port weiterleiten. Dies können Sie mit dem folgenden Befehl erreichen:

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

Der obige Befehl leitet den gesamten eingehenden Datenverkehr auf der Netzwerkschnittstelle eth0 von Port 25 an Port 2525 weiter. Sie können die Ports durch die von Ihnen benötigten ersetzen.

10. Blockieren Sie Netzwerkflut auf dem Apache-Port mit IPtables

Manchmal fordern IP-Adressen möglicherweise zu viele Verbindungen zu Webports auf Ihrer Website an. Dies kann zu einer Reihe von Problemen führen. Um solche Probleme zu vermeiden, können Sie die folgende Regel verwenden:

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

Der obige Befehl begrenzt die eingehenden Verbindungen pro Minute auf 100 und legt einen Grenzwert-Burst auf 200 fest. Sie können das Limit und den Limit-Burst entsprechend Ihren spezifischen Anforderungen bearbeiten.

11. Blockieren Sie eingehende Ping-Anfragen auf IPtables

Einige Systemadministratoren blockieren aus Sicherheitsgründen gerne eingehende Ping-Anfragen. Obwohl die Bedrohung nicht so groß ist, ist es gut zu wissen, wie man eine solche Anfrage blockiert:

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

12. Erlauben Sie den Loopback-Zugriff

Der Loopback-Zugriff (Zugriff von 127.0.0.1) ist wichtig und Sie sollten ihn immer aktiv lassen:

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

13. Führen Sie ein Protokoll über verworfene Netzwerkpakete auf IPtables

Wenn Sie die verworfenen Pakete auf der Netzwerkschnittstelle eth0 protokollieren möchten, können Sie den folgenden Befehl verwenden:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Sie können den Wert nach "--log-prefix" mit etwas Ihrer Wahl ändern. Die Nachrichten werden in /var/log/messages protokolliert und Sie können nach ihnen suchen mit:

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

14. Blockieren Sie den Zugriff auf bestimmte MAC-Adressen auf IPtables

Sie können den Zugriff auf Ihr System von einer bestimmten MAC-Adresse aus blockieren, indem Sie Folgendes verwenden:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Natürlich müssen Sie "00:00:00:00:00:00" durch die tatsächliche MAC-Adresse ersetzen, die Sie blockieren möchten.

15. Begrenzen Sie die Anzahl gleichzeitiger Verbindungen pro IP-Adresse

Wenn Sie nicht möchten, dass zu viele gleichzeitige Verbindungen von einer einzelnen IP-Adresse an einem bestimmten Port hergestellt werden, können Sie den folgenden Befehl verwenden:

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

Der obige Befehl lässt nicht mehr als 3 Verbindungen pro Client zu. Natürlich können Sie die Portnummer ändern, um sie an einen anderen Dienst anzupassen. Auch --connlimit-above sollte entsprechend Ihren Anforderungen geändert werden.

16. Suche innerhalb der IPtables-Regel

Sobald Sie Ihre iptables-Regeln definiert haben, möchten Sie von Zeit zu Zeit suchen und müssen diese möglicherweise ändern. Eine einfache Möglichkeit, innerhalb Ihrer Regeln zu suchen, ist die Verwendung von:

iptables -L $table -v -n | grep $string

Im obigen Beispiel müssen Sie $table durch die tatsächliche Tabelle ersetzen, in der Sie suchen möchten, und $string durch die tatsächliche Zeichenfolge, nach der Sie suchen.

Hier ist ein Beispiel:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Definieren Sie eine neue IPTables-Kette

Mit iptables können Sie Ihre eigene Kette definieren und benutzerdefinierte Regeln darin speichern. Um eine Kette zu definieren, verwenden Sie:

iptables -N custom-filter

Jetzt können Sie prüfen, ob Ihr neuer Filter dabei ist:

iptables -L
Beispielausgabe
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
Chain custom-filter (0 references)
target prot opt source destination

18. IPtables-Firewall-Ketten oder -Regeln leeren

Wenn Sie Ihre Firewall-Ketten leeren möchten, können Sie Folgendes verwenden:

iptables -F

Sie können Ketten aus einer bestimmten Tabelle löschen mit:

iptables -t nat -F

Sie können "nat" mit der tatsächlichen Tabelle ändern, welche Ketten Sie leeren möchten.

19. Speichern Sie IPtables-Regeln in einer Datei

Wenn Sie Ihre Firewall-Regeln speichern möchten, können Sie den Befehl iptables-save verwenden. Sie können Folgendes verwenden, um Ihre Regeln in einer Datei zu speichern und zu speichern:

iptables-save > ~/iptables.rules

Es liegt an Ihnen, wo Sie die Datei speichern und wie Sie sie benennen.

20. IPtables-Regeln aus einer Datei wiederherstellen

Wenn Sie eine Liste von iptables-Regeln wiederherstellen möchten, können Sie iptables-restore verwenden. Der Befehl sieht so aus:

iptables-restore < ~/iptables.rules

Natürlich kann der Pfad zu Ihrer Regeldatei unterschiedlich sein.

21. Richten Sie IPtables-Regeln für PCI-Konformität ein

Einige Systemadministratoren müssen möglicherweise ihre Server so konfigurieren, dass sie PCI-kompatibel sind. Es gibt viele Anforderungen verschiedener PCI-Compliance-Anbieter, aber es gibt nur wenige gemeinsame.

In vielen Fällen benötigen Sie mehr als eine IP-Adresse. Sie müssen die folgenden Regeln für die IP-Adresse der Website anwenden. Seien Sie bei der Anwendung der folgenden Regeln besonders vorsichtig und wenden Sie sie nur an, wenn Sie sicher sind, was Sie tun:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Wenn Sie cPanel oder ein ähnliches Control Panel verwenden, müssen Sie möglicherweise auch dessen Ports blockieren. Hier ist ein Beispiel:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Hinweis: Um sicherzustellen, dass Sie die Anforderungen Ihres PCI-Anbieters erfüllen, prüfen Sie dessen Bericht sorgfältig und wenden Sie die erforderlichen Regeln an. In manchen Fällen müssen Sie möglicherweise auch den UDP-Verkehr auf bestimmten Ports blockieren.

22. Erlauben Sie etablierte und verwandte Verbindungen

Da der Netzwerkverkehr in eingehenden und ausgehenden Verkehr getrennt ist, sollten Sie etablierten und zugehörigen eingehenden Verkehr zulassen. Für eingehende Verbindungen gehen Sie wie folgt vor:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Für den ausgehenden Gebrauch:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Löschen Sie ungültige Pakete in IPtables

Es ist möglich, dass einige Netzwerkpakete als ungültig markiert werden. Manche Leute ziehen es vielleicht vor, diese Pakete zu protokollieren, andere ziehen es vor, sie zu verwerfen. Um ungültige Pakete zu löschen, können Sie Folgendes verwenden:

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

24. Verbindung auf Netzwerkschnittstelle blockieren

Einige Systeme verfügen möglicherweise über mehr als eine Netzwerkschnittstelle. Sie können den Zugriff auf diese Netzwerkschnittstelle einschränken oder Verbindungen von bestimmten IP-Adressen blockieren.

Zum Beispiel:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Ersetzen Sie „xxx.xxx.xxx.xxx“ durch die tatsächliche IP-Adresse (oder das Netzwerk), die Sie blockieren möchten.

25. Deaktivieren Sie ausgehende E-Mails über IPTables

Sollte Ihr System keine E-Mails versenden, können Sie ausgehende Ports auf SMTP-Ports blockieren. Sie können zum Beispiel Folgendes verwenden:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Abschluss

Iptables ist eine leistungsstarke Firewall, von der Sie problemlos profitieren können. Für jeden Systemadministrator ist es wichtig, zumindest die Grundlagen von iptables zu erlernen. Wenn Sie detailliertere Informationen über iptables und seine Optionen erhalten möchten, empfehlen wir Ihnen dringend, das Handbuch zu lesen:

man iptables

Wenn Sie der Meinung sind, dass wir dieser Liste weitere Befehle hinzufügen sollten, teilen Sie uns diese bitte mit, indem Sie sie im Kommentarbereich unten einreichen.