Was ist die kanonische Art, iptables-Regeln zu speichern?


8

iptables, die Standard-Linux-Firewall, speichert keine Regeln zwischen Neustarts. Sie müssen sich selbst darum kümmern. Es gibt viele Möglichkeiten, dies zu tun. Was ist der kanonische Weg, dies zu tun? Was sind Best Practices?

Ich werde mit meiner eigenen Lösung antworten, aber ich bin an anderen / besseren Lösungen interessiert.


Antworten:


6

Hier sind einige Beispielregeln. Speichern Sie sie in /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

Fügen Sie diese Zeile am Ende von / etc / network / interfaces hinzu

pre-up iptables-restore < /etc/iptables.rules

1
Ich werde darauf hinweisen, dass dies Ubuntu-spezifisch ist. Für Red Hat- und Fedora-Varianten sehen Sie stattdessen / etc / sysconfig / iptables.
Esm

Du meinst statt /etc/iptables.rules? Das wird von Ubuntu nicht bestimmt, das habe ich selbst gewählt.
Amarillion

4
Ich bezog mich auf die Hinzufügung zu / etc / network / interfaces; Ich entschuldige mich, ich hätte klarer sein sollen. Fedora und RHEL haben ein Initscript (geschickt "iptables" genannt;), das, wenn es aktiviert ist, im Wesentlichen eine iptables-Wiederherstellung von / etc / sysconfig / iptables durchführt.
Esm

3

Wir verwenden viele iptables-Regeln . Um die Verwaltung zu vereinfachen, gehen wir wie folgt vor:

  • Regeln werden alle von Skripten aufgerufen - Skripte werden von /etc/init.d/firewall aufgerufen (benutzerdefiniertes Skript)
  • Eine Datei mit Servernamen / Netzwerknamen (IP-Adressvariablen) wird aufbewahrt und aus Konsistenzgründen in jedes iptables-Skript aufgenommen.
  • Für jedes Subnetz (z. B. privat / DMZ / VPN usw.) werden separate Skripte gespeichert, um das Auffinden zu erleichtern. Regeln, die in zwei Skripten enthalten sind (z. B. solche, die die Kommunikation zwischen privatem und DMZ einschränken), werden in das Skript des "sichereren" Netzwerks eingefügt
  • Wo immer möglich, werden Schleifen und verschachtelte Schleifen verwendet, um die Skripte so kurz wie möglich zu halten.
  • Jede neue Regel oder Änderung wird mit Kommentaren vor dem entsprechenden Abschnitt des Skripts dokumentiert.

Ich weiß nicht, ob dies der beste Weg ist, aber es hat bei uns gut funktioniert.


3

Obwohl dies von der Umgebung und der Plattform abhängt, habe ich je nach Plattform zwei gute Ansätze gesehen:

  • RHEL / CentOS: Speichern Sie alle Regeln in einer einzigen Datei / etc / sysconfig / iptables, die vom Startskript von iptables eingelesen wird.

  • Debian / Ubuntu: Speichern Sie alle Regeln in separaten dienstspezifischen Dateien im Verzeichnis /etc/iptables.d/. Beispiel: /etc/iptables.d/port_http, /etc/iptables.d/port_dns, wobei port_service einem Dienstnamen in / etc / services zugeordnet ist.

In beiden Fällen werden die Datei oder Dateien von einem Konfigurationstool wie Chef oder Puppet verwaltet und vom Startskript 'master' für iptables eingelesen, das beim Booten ausgeführt wird.


2
Ich wäre sehr vorsichtig mit Ihrer Benennung in Ihrem Debian / Ubuntu-Beispiel. Dies ist die Art von Ort, an dem Sie Ihren Regelnamen 00, 04, 22 usw. voranstellen möchten. Es gibt viele iptables-Regeln, die auftragsabhängig sind. Wenn Sie sie in der falschen Reihenfolge laden, müssen Sie sie haben kaputtes Zeug. Ich würde vorschlagen, sie in einer einzigen Datei zu speichern, es sei denn, Sie wissen wirklich, was Sie tun.
Christopher Cashell

1

Zusätzlich zu iptables-save(und iptables-restore) werden komplizierte Firewall-Schemata mit dedizierten Programmen besser behandelt. Zum Beispiel haben wir shorewall("iptables leicht gemacht") verwendet, um iptables zu konfigurieren.

Einfachere Tools sind ebenfalls verfügbar, wie Firestarter und kmyfirewall .


6
Ich stimme dir nicht zu. Die einfachen Fälle können leicht mit den dedizierten Programmen behandelt werden, aber für eine komplexe Regel kann ich mir nichts klareres als iptables
vorstellen

2
Kommt darauf an, warum du die Regeln vereinfachen willst. Ich denke, die Datei iptables.rules kann perfekt gelesen werden. Es ist wichtig, die Kommentarargumente zu nutzen, um alles zu verstehen.
Spoulson

Ich bin mit Ihrer Meinungsverschiedenheit nicht einverstanden. Wenn Sie sich darauf konzentrieren, Ihre iptables-Befehle lesbar zu machen, werden Sie sie nicht bestellen oder Ketten verwenden, damit die Regeln so effizient wie möglich sind.
Zoredache

1
Zoredache - Ich denke, Mikeage ist hier mehr richtig als falsch. iptables-Regeln können ziemlich eindeutig sein, obwohl sie (für weniger erfahrene Personen wie mich) schwer zu lesen sind. Ich glaube nicht, dass Mikeage leicht zu lesen war.
Michael Kohne

1

Dies hängt von der von Ihnen verwendeten Distribution ab. Einige Distributionen, insbesondere solche, die auf einer Red Hat-Distribution basieren, behalten die iptables-Regeln automatisch bei, befinden sich jedoch in einem eigenen speziellen Verzeichnis. Ich bin mit RHEL am besten vertraut und die iptables-Regeln finden Sie unter / etc / sysconfig / iptables. Sich mit der Syntax von iptables-Regeln vertraut zu machen, kann zunächst schwierig sein, ist aber recht einfach, sobald Sie den Dreh raus haben.

Auf der Netfilter-Website finden Sie zahlreiche Dokumentationen zu iptables, einschließlich einiger Einführungen. Wenn Sie etwas lesen möchten, finden Sie hier viele gute Informationen: http://www.netfilter.org/documentation/


Auf redhat möchten Sie möglicherweise auch / etc / sysconfig / system-config-securitylevel auf dem neuesten Stand halten. Hier bezieht system-config-securitylevel-tui seine Regeln beim Start. Wenn Sie / etc / sysconfig / system-config-securitylevel nicht auf dem neuesten Stand halten, können Sie verlieren, wenn jemand system-config-securitylevel-tui ausführt die in / etc / sysconfig / iptables gespeicherten Regeln.
Jason Tan

1

Diese Frage ist sehr nahe daran, ein Dup von 4934 zu sein, und sie hängt mit 397 zusammen .

Ich verwende firehol in Kombination mit einer Webschnittstelle, die ich zur Verwaltung der Konfigurationsdatei entwickelt habe.

Ich mag firehol sehr, es bietet eine einfachere Syntax als die direkte Verwendung von iptables.

  • Mit dem Befehl firehol debug können Sie genau festlegen, welche iptables-Befehle generiert werden
  • Wenn Sie einen Fehler in Ihrer Konfiguration haben und die Firewall starten, erkennt firehol den Fehler und kehrt zum vorherigen Status zurück.
  • Firehol verfügt über einen Befehl 'try', mit dem Sie die Firewall remote starten können. Wenn Ihre Änderungen Ihre Verbindung beenden, kehrt firehol zum vorherigen Status zurück. Wenn Sie Ihre Verbindung nicht beendet haben, werden Sie aufgefordert, die Änderung zu bestätigen.
  • Firehol verfügt über eine große Anzahl vordefinierter Dienste, sodass Sie sich nicht genau merken müssen, welche Ports Sie benötigen, um welche Ports für ein unklares Protokoll zu öffnen.

1

Wir verwenden natürlich ein benutzerdefiniertes Init-Skript. Ich kann for-Schleifen verwenden, um eine Liste von Ports zu durchlaufen, andere Konfigurationsdateien wie die VPN-Benutzer zu analysieren usw. Ausgezeichnet!

Und iptables-restore ist sicherlich die "kanonischste" Art, es zu speichern.

Was ich hinzufügen möchte:

Bitte beachten Sie, dass die aktuelle Version von iptables den Kernel für jeden einzelnen Aufruf auffordert, ihm die vollständige Liste der Ketten zurückzugeben. Dann wird die eine Änderung vorgenommen, die Sie von ihm verlangen. Dann wird die Liste erneut hochgeladen.

Das ist langsam (O (n ^ 2)), für uns braucht es 5 Sekunden, was zu lang ist ;-)

Wenn Sie iptables-restore verwenden, wird alles in einem schnellen Vorgang ausgeführt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.