[Précédent : Authpf : Shell Utilisateur pour les Passerelles d'Authentifications] [Index] [Suivant : Pare-feu pour réseau domestique ou petite société]
On appelle un groupe d'hôtes utilisant CARP un "groupe de redondance". Le groupe de redondance se voit attribuer une adresse IP partagée entre les membres du groupe. Au sein de ce groupe, un hôte est désigné comme "maître". Les autres membres sont appellés "esclaves". L'hôte maître est celui qui "prend" l'adresse IP partagée. Il répond à tout trafic ou requête ARP à l'attention de cette adresse. Chaque hôte peut appartenir à plusieurs groupes de redondance.
Une utilisation commune de CARP est la création d'un groupe de pare-feu redondants. L'adresse IP virtuelle attribuée au groupe de redondance est désignée comme l'adresse du routeur par défaut sur les machines clientes. Dans le cas où le pare-feu maître rencontre une panne ou est déconnecté du réseau, l'adresse IP virtuelle sera prise par un des pare-feu esclaves et le service continuera à être rendu sans interruption.
Il est possible de faire co-exister plusieurs groupes CARP sur un même segment réseau. Les annonces de CARP contiennent un identifiant appelé "Virtual Host ID" qui permet à des membres d'un même groupe d'identifier le groupe de redondance auquel une annonce donnée appartient.
Afin d'empêcher un utilisateur malicieux sur le segment réseau d'usurper les annonces CARP, chaque groupe peut être doté d'un mot de passe. Ainsi chaque paquet CARP envoyé au groupe est protégé par SHA1 MAC.
Etant donné que CARP est un protocole à part entière, il doit être explicitement autorisé au niveau des règles de filtrage :
pass out on $carp_dev proto carp keep state
$carp_dev est l'interface physique que CARP utilise pour la communication.
ifconfig carpN create
ifconfig carpN vhid vhid [pass password] [carpdev carpdev] \
[advbase advbase] [advskew advskew] [state state] ipaddress \
netmask mask
Vous pouvez contrôler d'avantages de paramètres de CARP à l'aide de sysctl(8).
# sysctl -w net.inet.carp.allow=1
# ifconfig carp1 create
# ifconfig carp1 vhid 1 pass mekmitasdigoat carpdev em0 \
advskew 100 10.0.0.1 netmask 255.255.255.0
Les commandes ci-dessous permettent de faire les opérations suivantes :
L'utilisation de ifconfig permet de voir l'état de l'interface carp1.
# ifconfig carp1
carp1: flags=8802<UP,BROADCAST,SIMPLEX,MULTICAST> mtu 1500
carp: BACKUP carpdev em0 vhid 1 advbase 1 advskew 100
groups: carp
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
Lorsque pfsync(4) est configuré pour envoyer et recevoir des mises à jour à travers le réseau, le comportement par défaut consiste à utiliser le multicast sur le réseau local. Toutes les mises à jour sont envoyées sans authentification. Il faudrait donc utiliser une des deux méthodes suivantes pour sécuriser les échanges :
Lorsque les mises à jour sont envoyées et reçues à travers le réseau, les paquets pfsync doivent être autorisés par les règles de filtrage :
pass on $sync_if proto pfsync
$sync_if est l'interface physique utilisée pour la communication pfsync(4).
ifconfig pfsyncN syncdev syncdev [syncpeer syncpeer]
# ifconfig pfsync0 syncdev em1Cette commande active pfsync sur l'interface em1. Les mises à jour seront envoyées en multicast sur le réseau. Ainsi tout hôte utilisant pfsync pourra les recevoir.
Voici un scénario typique avec deux pare-feu : fw1 et
fw2.
+----| WAN/Internet |----+
| |
em2| |em2
+-----+ +-----+
| fw1 |-em1----------em1-| fw2 |
+-----+ +-----+
em0| |em0
| |
---+-------LAN partagé------+---
Les interfaces em1 des pare-feu sont connectées à l'aide d'un câble croisé. Les interfaces em0 sont connectées au LAN et les interfaces em2 sont connectées à un réseau WAN ou à Internet. Les adresses IP utilisées sont les suivantes :
La politique réseau veut que le pare-feu fw1 soit maître.
Configurons d'abord fw1 :
! activation de la préemption et le basculement de toutes les interfaces
# sysctl -w net.inet.carp.preempt=1
! configuration de pfsync
# ifconfig em1 10.10.10.1 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configuration de CARP côté LAN
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
172.16.0.100 netmask 255.255.255.0
! configuration de CARP côté WAN/Internet
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
192.0.2.100 netmask 255.255.255.0
|
Configurons maintenant fw2 :
! activation de la préemption et le basculement de toutes les interfaces
# sysctl -w net.inet.carp.preempt=1
! configuration de pfsync
# ifconfig em1 10.10.10.2 netmask 255.255.255.0
# ifconfig pfsync0 syncdev em1
# ifconfig pfsync0 up
! configuration de CARP côté LAN
# ifconfig carp1 create
# ifconfig carp1 vhid 1 carpdev em0 pass lanpasswd \
advskew 128 172.16.0.100 netmask 255.255.255.0
! configuration de CARP côté WAN/Internet
# ifconfig carp2 create
# ifconfig carp2 vhid 2 carpdev em2 pass netpasswd \
advskew 128 192.0.2.100 netmask 255.255.255.0
|
Exemples :
Pour forcer le basculement d'un groupe CARP donné, il vous suffit d'arrêter l'interface carp(4) sur le maître. Ceci aura pour effet d'amener le maître à annoncer des valeurs advbase et advskew "infinies". Les autres membres du groupe de redondance le remarqueront immédiatement et l'un d'eux prendra le rôle de maître.
# ifconfig carp1 down
Une alternative consiste à positionner advskew à une valeur supérieure à la valeur d'advskew sur les hôtes esclaves. Ceci causera un basculement tout en permettant au maître de participer au groupe CARP.
Une autre méthode de basculement consiste à paramétrer finement le compteur de dégradation CARP. Ce compteur est une mesure de la promptitude d'un hôte à devenir le maître d'une groupe CARP. Par exemple, lorsqu'un hôte est au milieu d'une séquence de démarrage, il ne saurait devenir maître CARP avant que toutes les interfaces soient configurées, que tous les services réseau soient démarrés, etc... Des hôtes annoncant une grande valeur de dégradation seront moins privilégiés pour passer maître.
Un compteur de dégradation est stocké au niveau de chaque groupe d'interfaces auquel appartient l'interface CARP. Par défaut, les interfaces CARP sont membres du groupe d'interfaces "carp". La valeur actuelle du compteur de dégradation peut être vue à l'aide d'ifconfig(8) :
# ifconfig -g carp
carp: carp demote count 0
Dans cet exemple, le compteur associé au groupe d'interfaces "carp" est affiché. Lorsqu'un hôte CARP s'annonce sur le réseau, il prend la somme des compteurs de dégradation pour chaque groupe d'interfaces auquel est associée l'interface carp(4) et l'annonce comme étant sa valeur de dégradation.
Considérons maintenant l'exemple suivant. Deux pare-feu utilisant CARP avec les interfaces ci-après :
L'objectif consiste à basculer uniquement les groupes carp1 et carp2 au pare-feu secondaire.
Tout d'abord, affectez chaque interface à un nouveau groupe, dans ce cas appelé "internal" :
# ifconfig carp1 group internal
# ifconfig carp2 group internal
# ifconfig internal
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
carp: MASTER carpdev em0 vhid 1 advbase 1 advskew 100
groups: carp internal
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
carp2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
carp: MASTER carpdev em1 vhid 2 advbase 1 advskew 100
groups: carp internal
inet 10.0.1.1 netmask 0xffffff00 broadcast 10.0.1.255
Maintenant, augmentez la valeur du compteur de dégradation pour le groupe "internal" à l'aide d'ifconfig(8):
# ifconfig -g internal
internal: carp demote count 0
# ifconfig -g internal carpdemote 50
# ifconfig -g internal
internal: carp demote count 50
Le pare-feu basculera les groupes carp1 et carp2 vers l'autre pare-feu du cluster tout en restant maître de carp3 et carp4. Si l'autre pare-feu commence à s'annoncer avec une valeur de dégradation supérieure à 50 ou s'il arrête d'effectuer des annonces, alors ce pare-feu prendra à nouveau le rôle de maître pour carp1 et carp2.
Pour revenir vers le pare-feu primaire, renversez les modifications :
# ifconfig -g internal -carpdemote 50
# ifconfig -g internal
internal: carp demote count 0
Des services réseau tels que OpenBGPD et sasyncd(8) utilisent le compteur de dégradation pour s'assurer que le pare-feu ne devienne maître que lorsque les sessions BGP ont été établies et les SAs IPsec ont été synchronisées.
pass in on fxp0 inet proto tcp from any to carp0 port 22mais le remplacement de fxp0 par carp0 ne permettrait pas de la faire fonctionner comme on le souhaite.
N'oubliez PAS d'autoriser proto carp et proto pfsync!
[Précédent : Authpf : Shell Utilisateur pour les Passerelles d'Authentifications] [Index] [Suivant : pare-feu pour réseau domestique ou petite société]