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:
-
FILTER– dies ist die Standardtabelle, die die integrierten Ketten für Folgendes enthält:- INPUT – Pakete, die für lokale Sockets bestimmt sind
- FORWARD – Pakete, die durch das System geleitet werden
- OUTPUT – lokal generierte Pakete
NAT– eine Tabelle, die konsultiert wird, wenn ein Paket versucht, eine neue Verbindung herzustellen. Es verfügt über Folgendes:- PREROUTING – wird verwendet, um ein Paket zu ändern, sobald es empfangen wird
- OUTPUT – wird zum Ändern lokal generierter Pakete verwendet
- POSTROUTING – wird verwendet, um Pakete zu ändern, wenn sie kurz vor dem Versand stehen
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:
- PREROUTING – zum Ändern eingehender Verbindungen
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:67Chain 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/0Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
pkts bytes target prot opt in out source destinationWenn 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 destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain custom-filter (0 references)
target prot opt source destination18. 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.
