Website-Suche

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


Die Verwaltung des Netzwerkverkehrs ist eine der schwierigsten Aufgaben, mit denen sich Systemadministratoren auseinandersetzen müssen. Er muss die Firewall so konfigurieren, dass sie die System- und Benutzeranforderungen sowohl für eingehende als auch für ausgehende Verbindungen erfüllt, ohne dass das System anfällig für Angriffe ist.

Hier kommt iptables ins Spiel. 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 Gruppe von Tabellen mit Ketten, die einen Satz integrierter oder benutzerdefinierter Regeln enthalten. Dank ihnen kann ein Systemadministrator den Netzwerkverkehr seines Systems richtig filtern.

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

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

      1. INPUT – Pakete, die für lokale Sockets bestimmt sind
      2. FORWARD – Pakete, die durch das System geleitet 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 verwendet, um ein Paket zu ändern, sobald es empfangen wird
      2. OUTPUT – wird zum Ändern lokal generierter Pakete verwendet
      3. POSTROUTING – wird verwendet, um Pakete zu ändern, wenn sie kurz vor dem Versand stehen
    3. MANGLE – diese Tabelle wird zum Ändern von Paketen verwendet. Bis zur Kernel-Version 2.4 hatte diese Tabelle nur zwei Ketten, aber jetzt sind es 5:

      1. PREROUTING – zum Ändern eingehender Verbindungen
      2. OUTPUT – zum Ändern lokal erzeugter Pakete
      3. INPUT – für eingehende Pakete
      4. POSTROUTING – zum Ändern von Paketen, wenn sie kurz vor dem Versand stehen
      5. FORWARD – für Pakete, die durch die Box geleitet werden

In diesem Artikel sehen Sie einige nützliche Befehle, die Ihnen helfen, Ihre Linux-Box-Firewall über iptables zu verwalten. Für die Zwecke dieses Artikels werde ich mit einfacheren Befehlen beginnen und bis zum Ende zu komplexeren übergehen.

1. Iptables Firewall starten/stoppen/neu starten

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

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-Firewall-Regeln

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

# iptables -L -n -v

Dies sollte eine Ausgabe zurückgeben, die der folgenden ähnelt:

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 es vorziehen, die Regeln für eine bestimmte Tabelle zu überprüfen, können Sie die Option -t verwenden, gefolgt von der Tabelle, die Sie überprüfen möchten. Um beispielsweise die Regeln in der NAT-Tabelle zu überprüfen, können Sie Folgendes verwenden:

# iptables -t nat -L -v -n

3. Blockieren Sie eine bestimmte IP-Adresse in der IPtables-Firewall

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

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

Wo Sie "xxx.xxx.xxx.xxx" mit der tatsächlichen IP-Adresse ändern müssen. Seien Sie sehr vorsichtig, wenn Sie diesen Befehl ausführen, 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 wie folgt 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 sich entschieden haben, dass Sie Anfragen von einer bestimmten IP-Adresse 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 die längere Option bevorzugen, 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. Es ist eine gute Sicherheitsmaßnahme, und Sie sollten bei der Einrichtung Ihrer Firewall wirklich darüber nachdenken.

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

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

Um eingehende Verbindungen zuzulassen, verwenden Sie Folgendes:

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

In beiden Beispielen ändern Sie "xxx" mit dem tatsächlichen Port, den Sie zulassen möchten. Wenn Sie UDP-Verkehr anstelle von TCP blockieren möchten, ersetzen Sie einfach "tcp" durch "udp" in der obigen iptables-Regel.

6. Erlauben Sie mehrere Ports auf IPtables mit Multiport

Sie können mehrere Ports gleichzeitig zulassen, indem Sie Multiport verwenden, unten finden Sie eine solche Regel sowohl für eingehende als auch für 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 an einem bestimmten Port in IPtables

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

Sie können dies 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

Einige Arbeitgeber blockieren ihren Mitarbeitern gerne den Zugang zu Facebook. Im Folgenden finden Sie ein Beispiel, wie Sie den Datenverkehr zu Facebook blockieren können.

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

Suchen 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

Beachte, dass der von Facebook verwendete IP-Adressbereich in deinem Land variieren kann.

9. Portweiterleitung in IPtables einrichten

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

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

Der obige Befehl leitet den gesamten eingehenden Datenverkehr über die Netzwerkschnittstelle eth0 von Port 25 an Port 2525 weiter. Sie können die Ports durch die Ports ersetzen, die Sie benötigen.

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

Manchmal können IP-Adressen zu viele Verbindungen zu Web-Ports auf Ihrer Website anfordern. Dies kann zu einer Reihe von Problemen führen, und 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 Anzahl der eingehenden Verbindungen von pro Minute auf 100 und legt einen Burst-Grenzwert auf 200 fest. Sie können das Limit und den Limit-Burst nach Ihren eigenen spezifischen Anforderungen bearbeiten.

11. Blockieren Sie eingehende Ping-Anfragen auf IPtables

Einige Systemadministratoren blockieren eingehende Ping-Anfragen aus Sicherheitsgründen gerne. 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. Loopback-Zugriff zulassen

Der Loopback-Zugriff (Zugriff ab 127.0.0.1) ist wichtig und sollte immer aktiv bleiben:

# 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 Meldungen werden in /var/log/messages protokolliert und Sie können nach ihnen suchen mit:

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

14. Blockieren des Zugriffs auf eine bestimmte MAC-Adresse 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 der gleichzeitigen Verbindungen pro IP-Adresse

Wenn Sie nicht möchten, dass zu viele gleichzeitige Verbindungen von einer einzigen IP-Adresse auf 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 erlaubt nicht mehr als 3 Verbindungen pro Client. Natürlich können Sie die Portnummer ändern, um sie an verschiedene Dienste anzupassen. Auch das --connlimit-above sollte geändert werden, um Ihren Anforderungen zu entsprechen.

16. Suche innerhalb der IPtables-Regel

Sobald Sie Ihre iptables-Regeln definiert haben, möchten Sie von Zeit zu Zeit suchen und müssen sie möglicherweise ändern. Eine einfache Möglichkeit, innerhalb Ihrer Regeln zu suchen, besteht darin, Folgendes zu verwenden:

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

Im obigen Beispiel müssen Sie $table mit der tatsächlichen Tabelle ändern, in der Sie suchen möchten, und $string mit der tatsächlichen 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 überprüfen, ob Ihr neuer Filter vorhanden ist:

# iptables -L
Beispiel-Ausgabe
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. Leeren Sie IPtables Firewall-Ketten oder -Regeln

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

# iptables -F

Sie können Ketten aus einer bestimmten Tabelle wie folgt leeren:

# iptables -t nat -F

Sie können "nat" mit der aktuellen Tabelle ändern, welche Ketten Sie spülen möchten.

19. Speichern Sie die 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. Wiederherstellen von IPtables-Regeln aus einer Datei

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

# iptables-restore < ~/iptables.rules

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

21. Einrichten von IPtables-Regeln für die PCI-Konformität

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

In vielen Fällen müssen Sie mehr als eine IP-Adresse haben. Sie müssen die folgenden Regeln für die IP-Adresse der Website anwenden. Seien Sie besonders vorsichtig, wenn Sie die folgenden Regeln anwenden, und verwenden Sie sie nur, wenn Sie sich 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 die 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, überprüfen Sie dessen Bericht sorgfältig und wenden Sie die erforderlichen Regeln an. In einigen Fällen müssen Sie möglicherweise auch UDP-Datenverkehr auf bestimmten Ports blockieren.

22. Bestehende und verwandte Verbindungen zulassen

Da der Netzwerkverkehr in eingehenden und ausgehenden Datenverkehr getrennt ist, sollten Sie den etablierten und verwandten eingehenden Datenverkehr zulassen. Für eingehende Verbindungen tun Sie dies mit:

# 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. Ungültige Pakete in IPtables ablegen

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

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

24. Blockieren Sie die Verbindung über die Netzwerkschnittstelle

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

Zum Beispiel:

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

Ändern Sie "xxx.xxx.xxx.xxx" mit der tatsächlichen IP-Adresse (oder dem Netzwerk), die Sie blockieren möchten.

25. Deaktivieren Sie ausgehende E-Mails über IPTables

Wenn Ihr System keine E-Mails senden sollte, 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

Schlussfolgerung

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 weitere Befehle zu dieser Liste hinzufügen sollten, teilen Sie sie uns bitte mit, indem Sie sie im Kommentarbereich unten einreichen.

Verwandte Artikel: