Kannst du iptables ein gutes Intro empfehlen? [geschlossen]

15

Ich muss eine Firewall auf einem Linux-Server einrichten (bisher habe ich nur Erfahrungen mit Windows gesammelt). Meine Regeln sollen ziemlich einfach sein - alle verbieten, einige Ports mit allen zulassen, einige Ports für bestimmte IP-Subnetze zulassen, während das Netzwerk klein, aber komplex ist (jeder Host hat IPs in mindestens 2 192.168 ... Netzen, jeder kann verschalten auf viele verschiedene Arten). Ich denke, die Verwendung von iptables-Wrappern kann das System logisch überkomplizieren und viele unnötige Entitäten einführen. Es wäre besser, es einfach zu halten und iptables direkt zu verwenden.

Können Sie eine gute Einführung zum Schreiben von iptables-Regeln empfehlen?

Ivan
quelle

Antworten:

26

Auf der Netfilter-Website befinden sich Links zu offiziellen und empfohlenen Dokumentationen .

Dies ist kein neues Thema, die Ressourcen sind grenzenlos .

Die meisten grundlegenden Befehle sind ziemlich intuitiv und können leicht auf die Manpage verweisen .

netfilter, die Kernel-Technologie, die die Paketfilterung ermöglicht, ist weit fortgeschritten. Es gibt zusätzliche Tabellen, mit denen Pakete entstellt, übersetzt und auf andere Weise das Routing beeinflusst werden können. Das iptablesDienstprogramm ist das Userland-Tool für die Interaktion mit Netfilter. Wenn Sie mehr über erweiterte Funktionen erfahren möchten, empfehlen wir Ihnen, auf die oben genannte Dokumentation zu verweisen. Für eine Einführung in die Grundfunktionalität lesen Sie bitte weiter.

So listen Sie alle vorhandenen Regeln auf:

iptables -L -n

-n Verhindert, dass Iptables IPS auflösen, was zu einer schnelleren Ausgabe führt.

Die Standardtabelle ist die filterTabelle, mit der grundlegende Firewallregeln auf die drei Ketten angewendet werden. Die drei Standardketten in der filterTabelle sind INPUT, OUTPUTund FORWARD.

Die Ketten sind weitgehend selbsterklärend. Die INPUT-Kette wirkt sich auf eingehende Pakete aus, die OUTPUT-Kette auf lokal generierte Pakete und schließlich auf FORWARD-Pakete, die durch das System geleitet werden.

Unter den Zielen, die Sie angeben können, können Sie DROPPakete, dh einfach ignorieren und nicht antworten. Sie können REJECTPakete senden, bei denen eine ICMP-Antwort an die Quelle der Ablehnung gesendet wird. Schließlich können Sie ACCEPTsie, wodurch die Pakete weiterleiten können.

Oft mit einer Außenverkleidung Firewall die Standardauswahl wird DROPim Gegensatz zu REJECT, da sie die sichtbaren Fußabdruck Ihres Netzwerks über das Internet reduziert. Beispielsweise würde eine IP, die Dienste ansonsten auf einen bestimmten Host beschränkt, eine geringere Sichtbarkeit aufweisen DROP.

Beachten Sie, -Abedeutet an das Ende der Kette anzuhängen. Wenn Sie nach oben einfügen möchten, können Sie verwenden -I. Alle Regeln werden von oben nach unten abgearbeitet. -Dzum Löschen.

Auf DROPein eingehendes Paket von 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Dies springt zu dem DROPZiel für alle Protokolle, die von dieser IP stammen.

Akzeptieren:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

So verhindern Sie den Zugriff auf diese IP von Ihrem lokalen Server oder Netzwerk aus:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Sie können das -pProtokoll, die -sQuelle des Pakets, das -dZiel des Pakets, den Zielport --dport, den Quellport --sportund viele andere Flags angeben , die sich auf die Behandlung der Pakete durch die Regel auswirken.

Wenn Ihre Standard - INPUTPolitik war DROPund Sie wollten alle am ermöglichen 192.168.123.0/24Subnetz Zugriff SSH auf Ihrem Server, hier ein Beispiel:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

Richtig, Sie können auch die CIDR-Notation verwenden !

Im Allgemeinen gilt die beste Standardrichtlinie DROPfür alle Ketten. Jede Kette hat eine Standardrichtlinie, die durch das -PFlag angegeben wird . Auch wenn Sie Ihre Richtlinie auf Standard festgelegt haben DROP, wird empfohlen, dass der endgültige Eintrag in einer Kette ebenfalls ein ist DROP.

So ändern Sie beispielsweise die Richtlinie DROPfür die Ketten INPUT, FORWARD und OUTPUT:

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

Seien Sie vorsichtig , wenn Sie die Standardrichtlinie von DROP for INPUT auf einem Remote-System festlegen, ohne sich zuvor den SSH-Zugriff zu erlauben, können Sie den Zugriff auf das System verhindern. Auf einem Remote-System können Sie aus Sicherheitsgründen eine temporäre crontab angeben, um alle 5 Minuten alle Regeln zu löschen.

So löschen Sie alle Regeln und lassen den gesamten Datenverkehr zu:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Beachten Sie, dass -Xalle erstellten Ketten entfernt werden. -Flöscht alle Regeln.

Es gibt native Tools zum Speichern und Wiederherstellen der Regeln. Insbesondere iptables-saveund iptables-restore. Die meisten modernen Linux-Distributionen haben saveund restorefunktionieren in einer mit dem System gelieferten iptables init-Datei.

Es gibt andere Best Practices für die Firewall, z. B. das Verwerfen von fehlerhaften Paketen und andere Arten von unerwünschtem Datenverkehr. Dies ist ein Vorteil der Verwendung eines Front-End-Dienstprogramms wie Shorewall , da viele dieser Richtlinien standardmäßig implementiert werden. Trotzdem stimme ich Ihrem Ansatz zu und bevorzuge es, meine eigenen Regeln auch direkt beizubehalten. Dieselben Best Practices können ohne Front-End implementiert werden.

Warner
quelle
2
Ich bin gerade auf diese Antwort gestoßen, als ich hier nach zufälligen iptables-Inhalten gesucht habe (ich suche SF / SO vor Google!), Und diese sehr ausführliche Antwort scheint mehr Zustimmung zu verdienen, also habe ich sie gegeben!
Andrew Barber
+1 nette Antwort. Ich würde auch Debian WIKI erwähnen .
michal.kreuzman
1

Ich fand in letzter Zeit https://help.ubuntu.com/community/IptablesHowTo hilfreich. Ich glaube nicht, dass irgendetwas dort besonders Ubuntu-spezifisch ist.

gbroiles
quelle
Ich verwende Arch auf meinem Laptop, aber ein Ubuntu Lucid-Server ist genau die Aufgabe, die eingerichtet werden muss. Dies kann also in der Hand liegen, wenn es nicht veraltet ist (es spricht Ubuntu 8.04 an, soweit ich das sehe).
Ivan