Project-Id-Version: Trac 0.12
Report-Msgid-Bugs-To: trac-dev@googlegroups.com
POT-Creation-Date: 2013-01-27 11:21+0900
PO-Revision-Date: 2010-07-19 23:05+0200
Last-Translator: Jeroen Ruigrok van der Werven <asmodai@in-nomine.org>
Language-Team: en_US <trac-dev@googlegroups.com>
Plural-Forms: nplurals=2; plural=(n != 1)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Generated-By: Babel 0.9.6

Configuration/FirewallV6 – Trac ResEl
wiki:Configuration/FirewallV6

Le Firewall ipv6 du ResEl de Brest

Date : 9 décembre 2011

Disclaimer

Une bonne connaissance des protocoles IP, TCP (notamment), de Iptables et de Ip6tables seront nécessaires. Cette documentation n'a pas pour but de vous apprendre le fonctionnement d'Iptables ni de Ip6tables. Vous pouvez consulter Cette page pour avoir plus d'informations sur le firewall ipv4 et la documentation d'Iptables et de Ip6tables.

Pourquoi un firewall V6

On pourrait ce demander pour quelle raison il serait nécessaire de refaire un firewall pour l'ipV6 alors qu'il existe déjà un firewall ipV4. Surtout que deux firewall impliquent deux maintenances différentes. La principal raison vient du fait que le réseau ipV6 est totalement indépendante de l'ipv4, qu'il a une structure différente au sein du ResEl et surtout parce que l'ensemble des machines a une ipV6 publique, ce qui n'est pas le cas en ipV4, loin de là.

Modification à apporter à l'existant

Afin de mieux contrôler les sorties ipv6 du "vlan" utilisateur, la mise en place d'un DHCPv6 semble être une bonne solution. En effet, avec un DHCPv6, on peut associer directement une ipv6 à chaque pc (interface) enregistré par un utilisateur. Ainsi, on peut autoriser que les IP associés à un utilisateur à sortir du ResEl et bloquer les personnes black-listé ou non membre du ResEl. Il sera surement nécessaire d'ajouter l'ipv6 à la fiche LDAP des hosts. Elle sera générer automatiquement pour les nouvelles inscriptions mais il faudra trouver un moyen (petit script) pour les ajouter aux hosts déjà enregistré.

On pourrait laisser GO faire des RA pour les machines non inscrites avec un préfixe du genre 2001:660:7302:d999:1::0 et un DHCPv6 avec un autre préfixe pour les inscrits genre 2001:660:7302:d999:2::0

L'IPv6 au ResEl

Une page décrit la structure de l'IPv6 au ResEl (ici). Il ne faut pas oublier de la mettre à jour selon les modifications qui seront appliqué. Globalement, il faut savoir que les vlan du réseau ipv4 sont remplacé par des /64 en ipv6.

  • 2001:660:7302:D994::/64 pour le Vlan 994, pour les interfaces publiques des machines ResEl. Le routage vers ce réseau est fait par Grandours.
  • 2001:660:7302:D999::/64 pour le Vlan 999, pour les utilisateurs. Le préfixe est annoncé par un radvd sur Loli. Le script ldap2dns génère une entrée DNS par machine, sur le principe de la génération d'adresses en fonction de l'adresse MAC (non respectée par défaut sur windows qui utilise un identifiant d'interface aléatoire).
  • 2001:660:7302:D000::/64 Sous-réseau de connexion avec la DISI. L'adresse 2001:660:7302:D000::2/64 est utilisée par le routeur DISI, l'adresse 2001:660:7302:D000::1/64 est l'adresse ou la DISI envoie l'ensemble des paquets pour notre /52 (actuellement l'adresse est sur Loli eth0.990).

Description du script ResEl de génération du firewall

Utilisation du script

Le script est situé dans /srv/firewall/firewallv6-loli . Il est aussi accessible dans /etc/init.d/firewallv6 .

  • Efface toutes les règles/chaînes, vide les files, puis relance le firewall statique + ajout des règles IP/MAC. C'est la commande à lancer pour (re)démarrer le firewall :
 # firewallv6 start
  • Efface toutes les règles/chaînes et désactive le forwarding de paquet : ATTENTION celà changera la passerelle en une simple machine et coupera supprimera tous les flux non directement destinés à la passerelle :
 # firewallv6 stop
  • Affiche l'aide :
 # firewallv6 help

Les variables

Afin de simplifier la modification du script, on va créer de nombreuses variables. Cette partie à pour but d'expliciter l'utilité de ces variables.

  • $IP6TABLES : contient le chemin absolu vers l’exécutable ip6tables
  • $ETH* : définition des interfaces réseau de loli (interface adin, publique, extérieur, des services, du flux propre, du flux sale)
  • @COUPE : permet de bloquer directement tout le trafic d'une adresse ip
  • @ICMP_NOT_LIMITED : liste les paquets ICMP qui seront accepté sans limite
  • @ICMP_LIMITED_V1 : liste les paquets ICMP qui seront accepté avec pour limite $ICMP_LIMITED_V1_LIMIT paquet par seconde
  • @ICMP_LIMITED_V2 : liste les paquets ICMP qui seront accepté avec pour limite $ICMP_LIMITED_V2_LIMIT paquet par seconde
  • $ICMP_LIMITED_V1_LIMIT : limite du paquet exprimé en nombre de paquet par seconde (ex : 10/s) classé dans la liste @ICMP_LIMITED_V1
  • $ICMP_LIMITED_V2_LIMIT : limite du paquet exprimé en nombre de paquet par seconde (ex : 10/s) classé dans la liste @ICMP_LIMITED_V1
  • @RESEL : définit la découpe des rangs IPv6 pour les utilisateurs afin de limiter le nombre de règle à annalyser pour chaque paquet. C'est une liste de range d'IP

Définition des chaînes et séparation des flux

Afin de rendre plus claire le filtrage et les différentes règles en fonction des types de flux, nous allons définir des chaînes (par exemple int_to_ext) sur lesquelles on appliquera des règles particulières.

Il y a quatre grandes zones à gérer :

  • l'intérieur du ResEl coté utilisateur que nous nommerons pas la suite int. Cette zone est la zone contenant l'ensemble des ordinateurs des membres du ResEl. Elle correspond au préfixe 2001:660:7302:D999::/64. Elle contient les membre du ResEl mais aussi les utilisateur non encore inscrit au ResEl connecté sur une prise de la MaisEl et les utilisateurs blacklisté.
  • l'ensemble de interface publique des machines du ResEl, que nous nommerons par la suite DMZ. Elle correspond au préfixe 2001:660:7302:D994::/64 - 2001:660:7302:D994::29:1/64 (l'ip de l'interface du 994 de loli) .
  • La gateway, c'est ce qui correspond aux interfaces de loli, nous la nommerons par la suite gw : 2001:660:7302:D994::29:1 et 2001:660:7302:D000::1/64
  • Rennes relier par une tunnel V6, nous la nommerons par la suite Rennes : 2001:660:7301:4168::/64 pour le vlan utilisateur et 2001:660:7301:4993::/63 pour le vlan 993
  • l'extérieur que nous nommerons ext. C'est l'ensemble des machines ne se trouvant pas dans le ResEl. C'est donc l'ensemble des ipv6, privé des préfixes 2001:660:7302:D994::/64, 2001:660:7302:D999::/64, 2001:660:7301:4168::/64 et 2001:660:7301:4993::/63

Chaîne FilterICMP

  1. Les ICMP non limités: ces types de paquets ICMP sont simplement acceptés par le firewall. Ils sont listés dans la variable @ICMP_NOT_LIMITED.
  2. Les ICMP limités au niveau 1: ces types de paquets ICMP sont limités à $ICMP_LIMITED_V1_LIMIT paquets par seconde. Ils sont listés dans la variable @ICMP_LIMITED_V1.
  3. Les ICMP limités au niveau 2: ces types de paquets ICMP sont limités à $ICMP_LIMITED_V2_LIMIT paquets par seconde. Ils sont listés dans la variable @ICMP_LIMITED_V2.
  4. Les paquets restant sont dropé

Les paquets ICMP qui ne sont dans aucune des trois listes sont des paquets dont nous ne souhaite pas. Ils sont dropé.

Dropit

Cette chaîne est utilisée en lieu et place de DROP quand on souhaite faire croire que le port est fermé, et non que le paquet envoyé a été bêtement supprimé. On utilise pour celà la cible REJECT avec l'option: --reject-with tcp-reset pour une connexion TCP et icmp-port-unreachable pour un paquet UDP, le reste est envoyé sur DROP. NOTE: cette chaîne ne fonctionnera que pour des règles de la table filter.

int_to_int

Ce trafic n'a pas lieu d'être. On drop tous les paquets

int_to_ext

C'est ici qu'on coupe les utilisateurs qui n'ont pas payé et ceux qui ne sont pas encore inscrit

  1. On envoie les ICMP sur la chaîne FilterICMP
  2. On envoie les paquets qui ne sont pas ICMP vers la chaîne DoNotSendOutside?
  3. On envoie les paquets qui ne sont pas ICMP vers la chaîne StringMatchsDrops?
  4. On crée une chaîne par range de @RESEL nommée int_to_ext_$trange Les chaînes ainsi créées laissent tout passer. On insèrera dans celles-ci les règles IP/MAC correspondantes à leur range respective : ce qui fait gagner BEAUCOUP en temps de transit du paquet. En effet, au lieu d'essayer le paquet sur 600 règles IP/MAC, on ne l'essaiera que sur au plus 254.
  5. On envoie les paquets de chaque range de @RESEL dans sa chaîne respective
  6. Pour les paquets qui ne sont pas partis dans une chaine de range, c'est que leur adresse n'est pas attribuée : on rejette avec un icmp-net-prohibited.

int_to_DMZ

  1. On envoie les ICMP sur la chaîne FilterICMP
  2. On accepte les connexions qui sont déjà initialisées
  3. On accepte les initialisations de connexion sur les ports listés dans @TCP_INT_DMZ, @TCP_INT_DMZ_VENUS, @UDP_INT_DMZ, @UDP_INT_DMZ_VENUS
  4. On rejette le reste avec Dropit

int_to_gw

  1. On envoie les ICMP sur la chaîne FilterICMP
  2. On accepte les connexions qui sont déjà initialisées
  3. On rejette les paquets mal formés
  4. On accepte les demandes de connexion au serveur ssh tcp/2222
  5. On accepte les demandes de connexion à darkstat tcp/6789
  6. On accepte les demandes de connexion au serveur DNS de la passerelle (tcp/53 et udp/53)
  7. On rejette le reste avec Dropit

ext_to_int

  1. On accepte les connexions déja établies
  2. On rejette tout le reste

int_to_Rennes

À définir

ext_to_ext

Ce trafic n'a pas lieu d'être, on le DROP sauvagement

ext_to_int

Ici est un bon endroit pour DROPer les IPs externes que l'on veut bannir.

  1. On accepte les connexions qui sont déjà initialisées
  2. On rejette les paquets mal formés
  3. On envoie les ICMP sur la chaîne FilterICMP
  4. On rejette le reste avec Dropit

ext_to_gw

  1. On accepte les connexions qui sont déjà initialisées
  2. On rejette les paquets mal formés
  3. On envoie les ICMP sur la chaîne FilterICMP

ext_to_rennes

À définir

ext_to_DMZ

  1. On accepte les connexions qui sont déjà initialisées
  2. On rejette les paquets mal formés
  3. On envoie les ICMP sur la chaîne FilterICMP
  4. On accepte les demandes de connexion dans une limite de 20 paquets par seconde sur les ports listés dans @TCP_EXT_DMZ pour tous
  5. On accepte les demandes de connexion dans une limite de 20 paquets par seconde sur les ports IMAP et IMAPS depuis les réseaux de l'école uniquement
  6. On accepte les paquets UDP dont le port de destination est listé dans @UDP_EXT_DMZ
  7. On rejette le reste avec Dropit

Organisation du script


Page créée par xcorbill et modifiée par lboue le 13/12/2011 08:30:20

Last modified 7 years ago Last modified on Dec 13, 2011, 8:30:20 AM