Parallele Regeln für IPv4- und IPv6-IPTables verwalten?

10

Wir haben kürzlich begonnen, mit IPv6 zu experimentieren, und eines der ersten Probleme, mit denen wir zu kämpfen haben, ist die Behandlung eines völlig separaten Satzes von Firewall-Regeln (Linux iptables / ip6ables) für die beiden Protokollstapel. Unsere Firewall-Logik basiert größtenteils auf einer Reihe von zweckspezifischen Netzwerken (z. B. 10.0.0.0/24 ist das Workstation-Netzwerk des Personals, 10.1.0.0/24 ist das Datenbanknetzwerk, 10.2.0.0/24 ist das Webservernetzwerk usw. ), und die Logik für IPv6 und IPv4 ist weitgehend dieselbe, modulo unterschiedliche Netzwerkpräfixe.

Was machen die Leute, um mit solchen Situationen umzugehen? Idealerweise möchte ich in der Lage sein, sowohl iptables- als auch ip6table-Regelsätze aus denselben Quelldateien zu generieren. Ich habe bereits etwas mit Bash zusammengeschmissen, aber es ist nicht unbedingt hübsch und ich vermute, dass es irgendwo da draußen eine bessere Lösung geben muss.

Ich würde mich besonders für eine Puppet-basierte Lösung interessieren, die die eigenen Abhängigkeitsmechanismen von Puppet gut nutzt, um die relative Reihenfolge von Regeln (oder Gruppen von Regeln) zu implementieren.

Larsks
quelle

Antworten:

5

Firewall Builder hat genau das, was Sie brauchen. Sie können einen Regelsatz erstellen, ihn als "kombiniertes IPv4 + IPv6" markieren und Ihre IPv4- und IPv6-Netzwerke, die demselben Segment zugeordnet sind (z. B. "Datenbanknetzwerk" usw.), in derselben Regel platzieren. Das Programm generiert dann zwei separate iptables-Konfigurationen, eine für ipv4 und eine für ipv6. Dieses Kapitel des Benutzerhandbuchs veranschaulicht dies, obwohl es als Beispiel die Zugriffslisten von Cisco-Routern verwendet. Bei iptables funktioniert es genauso.

http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html

vadimk
quelle
4

Vor kurzem wurde ich auch mit der Erstellung von iptables-Regeln für IPv4 und IPv6 konfrontiert. Nach einigem Suchen habe ich den IPv6 FireHOL-Zweig von Phil Whineray verwendet .

FireHOL ist ein Iptables-Firewall-Generator, der Stateful Iptables-Paketfilter-Firewalls auf Linux-Hosts und -Routern mit einer beliebigen Anzahl von Netzwerkschnittstellen, einer beliebigen Anzahl von Routen, einer beliebigen Anzahl von Diensten und einer beliebigen Anzahl von Komplexitäten zwischen Variationen der Dienste (einschließlich positiver und negativer) erzeugt Ausdrücke). (Quelle: FireHOL-Website)

Leider unterstützt die offizielle Version IPv6 nicht. Aber Phil Whineray hat Unterstützung in einer inoffiziellen Branche hinzugefügt.

Einige Beispiele, wie die Konfiguration aussieht:

# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept

# allow incoming ssh only on ipv4
ipv4 server ssh accept

# allow incoming IMAP requests only for ipv6
ipv6 server imap accept

Sie können diese Firehol-Filiale unter folgender Adresse auschecken:

git clone git://repo.or.cz/fireholvi.git

Weitere Dokumentationen finden Sie in der offiziellen FireHOL-Dokumentation oder in der zusätzlichen Readme- Datei zu IPv6 .

Persönlich wäre ich wahrscheinlich vorsichtig, wenn ich es auf einer Produktionsmaschine verwende, auf der eine 100% zuverlässige Firewall wichtig ist. Aber es ist trotzdem einen Blick wert.

BB-Generation
quelle
3

Im Interesse einer fortgesetzten Evangelisation der Sache schlage ich vor, Puppet für Ihr Heben einzusetzen. Derzeit gibt es kein gutes Skript für den Umgang mit den Regeln der Iptables 4 und 6, aber es wäre auch keine große Herausforderung, eines zu schreiben, sobald Sie sich an die Sprache angepasst haben.

Das öffentliche Git-Repository von Mediawiki ist eine fantastische Mine von Konfigurationsmustern und enthält eine iptables-Klasse , die zunächst eine gute Basis bietet. Sie können es bearbeiten, um standardmäßig Regeln auf beide Stapel gleichzeitig anzuwenden und Flags für verschiedene Regeln zu verwenden, wenn Sie auf IPv4- oder IPv6-Regeln basieren.

Der ultimative Bonus am Ende ist, dass die Firewall-Regeln für einen Dienst in die Dienstdefinition geschrieben und automatisch bereitgestellt und entfernt werden können, wenn ein Dienst bereitgestellt oder entfernt wird.

Jeff Ferland
quelle
Ich werde einen Blick darauf werfen. Ich war bisher im Allgemeinen unbeeindruckt von den typischen Puppet-basierten Lösungen für die Verwaltung von Iptables. Insbesondere scheinen sie alle die Reihenfolge explizit zu implementieren, entweder durch Dateinamen von Fragmentdateien oder durch explizite Indizes, die in Puppet-Regeln bereitgestellt werden, anstatt die Abhängigkeitsauflösungsmechanismen von Puppet zu verwenden, was ich wirklich möchte. Wenn die hier verlinkte Lösung diese Probleme vermeidet, bin ich alles dafür.
Larsks
@larsks Ich stimme zu und war ähnlich frustriert, dass eine gute generische Lösung nicht veröffentlicht wurde ... aber vielleicht ist es Zeit, dass ich es einfach selbst mache. Puppet erlaubt die Verwendung der before => Resource['declared_name']on-Definition, sodass Sie sie mit einer Implementierung bestellen können, die nicht versucht, Dinge mit Fragmenten zu ordnen. Eine gute Verwendung von Augueas für die Struktur würde dieses Problem ebenfalls verhindern - machen Sie Ihre Top-Tree-Kommentare und Ihre Bestellung darunter, wie Sie möchten.
Jeff Ferland
Meine eigenen Versuche, dies zu lösen, sind nicht weit gekommen. Was ich jetzt getan habe, ist (a) Fragmente in ein Unterverzeichnis zu installieren und dann (b) rcorder zu verwenden, um sie in die Abhängigkeitsreihenfolge zu bringen. Es funktioniert, aber da es ausschließlich auf der Verwaltung von Fragmentdateien basiert, eignet es sich nicht für eine gemischte IPv4 / IPv6-Umgebung. Ich habe mir Augeas nicht genau angesehen, um das Problem zu lösen. Ich wäre gespannt, ob Sie einen Prototyp-Code haben.
Larsks
2

Beantwortung meiner eigenen Frage hier, aber ich dachte, diese Informationen könnten von allgemeinem Interesse sein:

Während ich mich mit dieser Frage befasste, stieß ich bei den Ubuntu-Leuten auf ufw (Uncomplicated FireWall). Wenn IPV6 in der ufw-Konfiguration aktiviert ist, verwaltet ufw die Regeln für iptables und ip6tables parallel. Dies bedeutet, dass Sie so etwas tun können:

# ufw allow ssh/tcp

Und am Ende mit:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)

Was zu iptables / ip6tables-Regeln führt, die so aussehen:

# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT

Ufw unterstützt auch Anwendungsprofile, mit denen Sie benannte Gruppen von Ports erstellen können. Du kannst das:

# ufw allow 'WWW Full'

Öffnen Sie am Ende beide Ports 80 und 443 (sowohl für IPv4 als auch für IPv6).

Ich habe gerade erst angefangen, es mir anzusehen, aber es scheint ziemlich gut zusammengestellt zu sein.

Larsks
quelle
0

Da es immer noch in der Liste fehlt: Shorewall ist ein weit verbreitetes und regelmäßig aktualisiertes Tool zur Konfiguration von Paketen mit zahlreichen Funktionen. Es hatte jetzt eine Weile IPv6-Unterstützung .

the-wabbit
quelle
1
Ich verstehe, dass "shorewall" nur ipv4 und "shorewall6" nur ipv6 ist. Man muss beide verwenden, um beide Protokolle abzudecken. Können sie eine gemeinsame Konfiguration verwenden?
Larsks