Gérer des règles parallèles pour iptables ipv4 et ipv6?

10

Nous avons récemment commencé à expérimenter IPv6, et l'un des premiers problèmes auxquels nous devons faire face concerne un ensemble complètement différent de règles de pare-feu (Linux iptables / ip6ables) pour les deux piles de protocoles. Notre logique de pare-feu est basée en grande partie sur un certain nombre de réseaux spécifiques (par exemple, 10.0.0.0/24 est le réseau du poste de travail du personnel, 10.1.0.0/24 est le réseau de la base de données, 10.2.0.0/24 est le réseau du serveur Web, etc. ), et la logique pour IPv6 et IPv4 sera essentiellement la même, avec des préfixes de réseau modulo différents.

Que font les gens pour gérer ce genre de situation? Idéalement, j'aimerais pouvoir générer à la fois des jeux de règles iptables et ip6table à partir des mêmes fichiers source. J'ai déjà rassemblé quelque chose en utilisant bash, mais ce n'est pas nécessairement joli et je soupçonne qu'une meilleure solution doit exister quelque part là-bas.

Je serais particulièrement intéressé par une solution basée sur Puppet qui fait bon usage des propres mécanismes de dépendance de Puppet pour implémenter l'ordre relatif des règles (ou groupes de règles).

larsks
la source

Réponses:

5

Firewall Builder a exactement ce dont vous avez besoin. Vous pouvez créer un jeu de règles, le marquer comme "ipv4 + ipv6 combiné" et placer vos réseaux ipv4 et ipv6 affectés au même segment (tel que "réseau de base de données" etC) dans la même règle. Le programme génère ensuite deux configurations iptables distinctes l'une pour ipv4 et l'autre pour ipv6. Ce chapitre du Guide de l'utilisateur illustre cela, bien qu'il utilise des listes d'accès de routeurs Cisco comme exemple. Cela fonctionne exactement de la même manière pour iptables.

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

vadimk
la source
4

J'ai récemment été confronté à la création de règles iptables pour IPv4 et IPv6. Après quelques recherches, j'ai fini par utiliser la branche IPv6 FireHOL de Phil Whineray .

FireHOL est un générateur de pare-feu iptables produisant des pare-feu de filtrage de paquets iptables avec état, sur des hôtes et des routeurs Linux avec n'importe quel nombre d'interfaces réseau, n'importe quel nombre de routes, n'importe quel nombre de services servis, n'importe quel nombre de complexité entre les variations des services (y compris positifs et négatifs expressions). (Source: site Web FireHOL)

Malheureusement, la version officielle ne prend pas en charge IPv6. Mais Phil Whineray a ajouté un soutien dans une branche non officielle.

Quelques exemples sur l'apparence de la configuration:

# 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

Vous pouvez vérifier cette branche firehol à:

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

Vous trouverez de la documentation supplémentaire dans la documentation officielle FireHOL ou dans le fichier Lisezmoi supplémentaire sur IPv6 .

Personnellement, je serais probablement prudent lorsque je l'utilise sur une machine de production où il est important d'avoir un pare-feu fiable à 100%. Mais ça vaut quand même le coup d'oeil.

génération bb
la source
3

Dans l'intérêt d'une évangélisation continue de la cause, je suggère d'utiliser la marionnette pour faire votre élévation. Il n'y a pas actuellement un bon script pour gérer les règles iptables 4 et 6, mais ce ne serait pas trop difficile d'en écrire un une fois que vous vous serez ajusté à la langue.

De Mediawiki dépôt git publique est une mine fantastique de modèles de configuration et comprend une classe iptables qui fournira une bonne base pour commencer. Vous pouvez le modifier pour appliquer des règles aux deux piles à la fois par défaut et avoir des indicateurs pour différentes règles lorsque vous basez les choses sur des règles IPv4 ou IPv6.

Le bonus ultime à la fin de cela est que les règles de pare-feu pour un service peuvent être écrites dans la définition de service et automatiquement déployées et supprimées lorsqu'un service est déployé ou supprimé.

Jeff Ferland
la source
Je regarderai. Jusqu'à présent, je n'ai pas été impressionné par les solutions typiques basées sur Puppet pour gérer iptables. En particulier, ils semblent tous implémenter l'ordre explicitement, soit à travers les noms de fichiers des fichiers de fragments ou à travers les index explicites fournis dans les règles de Puppet, plutôt que d'utiliser les mécanismes de résolution de dépendances de Puppet, ce que je veux vraiment. Si la solution liée ici évite ces problèmes, je suis tout à fait d'accord.
larsks
@larsks Je suis d'accord et j'ai été frustré de la même façon qu'une bonne solution générique n'ait pas été publiée ... mais il est peut-être temps que je le fasse moi-même. Puppet permettra d'utiliser le before => Resource['declared_name']sur n'importe quelle définition, vous pouvez donc les commander en utilisant une implémentation qui n'essaie pas de classer les choses avec des fragments. Une bonne utilisation d'Augueas pour la structure empêcherait également ce problème - faites vos commentaires d'arbre supérieurs et votre commande ci-dessous comme vous le souhaitez.
Jeff Ferland
Mes propres tentatives pour résoudre ce problème ne sont pas allées très loin. Ce que j'ai fait pour l'instant, c'est (a) d'installer des fragments dans un sous-répertoire puis (b) d'utiliser rcorder pour les mettre dans l'ordre de dépendance. Cela fonctionne, mais comme il est basé exclusivement sur la gestion de fichiers de fragments, il ne se prête pas à un environnement mixte ipv4 / ipv6. Je n'ai pas vraiment regardé de près l'utilisation d'Augeas pour aider à résoudre le problème. Je serais curieux de savoir si vous avez un code prototype.
larsks
2

Répondre à ma propre question ici, mais j'ai pensé que cette information pourrait être d'intérêt général:

En examinant cette question, je suis tombé sur ufw ( Uncomplicated FireWall) des gens d'Ubuntu. Avec IPV6 activé dans la configuration ufw, ufw gérera les règles iptables et ip6tables en parallèle. Cela signifie que vous pouvez faire quelque chose comme ceci:

# ufw allow ssh/tcp

Et finir avec:

# ufw status
Status: active

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

Ce qui se traduit par des règles iptables / ip6tables qui ressemblent à ceci:

# 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 prend également en charge les profils d'application, qui vous permettent de créer des groupes de ports nommés. Tu peux le faire:

# ufw allow 'WWW Full'

Et finissent par ouvrir les deux ports 80 et 443 (pour IPv4 et IPv6).

Je viens juste de commencer à le regarder, mais il semble assez bien préparé.

larsks
la source
0

Puisqu'il est toujours absent de la liste: Shorewall est un outil de configuration de filtre de paquets riche en fonctionnalités, largement adopté et régulièrement mis à jour. Il avait un support IPv6 depuis un certain temps maintenant.

le-wabbit
la source
1
Je crois comprendre que «shorewall» est uniquement ipv4 et «shorewall6» est uniquement ipv6, et il faut utiliser les deux afin de couvrir les deux protocoles. Peuvent-ils partager une configuration commune?
larsks