Postfix 2.2 a introduit le support du protocole IPv6 (IP version 6). Le support d'IPv6 pour les versions précédentes de Postfix était disponible sous forme d'un patch. Le paragraphe "Compatibilité avec le support d'IPv6 dans Postfix <2.2" ci-après présente les différences entre ces implémentations.
La principale fonctionnalité d'IPv6 est qu'il utilise des adresses composée de 128 bits au lieu de 32 bits dans IPv4. Il peut ainsi connecter un plus grand nombre de machines et de réseaux sans mécanismes type NAT. Un autre avantage de ce grand espace d'adressage est qu'il rend quasiment impossible le scan aléatoire d'un réseau.
Postfix utilise le même protocole SMTP sur IPv6 que sur IPv4, et effectue une recherche DNS de type AAAA en complément des anciennes requêtes de type A. Les informations sur IPv6 sont disponibles sur http://www.ipv6.org/.
Ce document fournit des informations sur les sujets suivants :
Postfix version 2.2 supporte IPv4 et IPv6 sur les plateformes suivantes :
Sur les autres systèmes, Postfix utilisera simplement IPv4 comme il l'a toujours fait.
Reportez-vous au paragraphe consacré pour les astuces pour le portage du support IPv6 de Postfix sur les autres environnements.
Le support IPv6 de Postfix introduit deux nouveaux paramètres de configuration dans main.cf, et modifie sensiblement la syntaxe de notation des adresses dans les listes de correspondances telles mynetworks ou debug_peer_list.
La syntaxe des adresses IPv6 de Postfix est assez astucieux car il y a peu d'emplacements où vous devez encadrer une adresse IPv6 dans des crochets "[]", et peu également où vous ne le devrez pas. Il n'est intéressant d'utiliser "[]" qu'aux endroits où vous devez le faire. Consultez la page de manuel postconf(5) à chaque fois que vous travaillez sur des paramètres de configuration en relation avec IPv6.
Plutôt que d'écrire en dûr les adresses de la boucle locale 127.0.0.1 et ::1 dans master.cf, indiquez "inet_interfaces = loopback-only" dans main.cf. Vous pouvez faire de même que le système utilise IPv6 ou non.
Le premier nouveau paramètre est appelé inet_protocols. Il indique quels protocoles Postfix doit utiliser pour établir ou accepter des connexions réseau, et également quels types de consultations DNS Postfix doit utiliser.
/etc/postfix/main.cf: # Vous devez arrêter et redémarrer Postfix après avoir changer ce paramètre inet_protocols = ipv4 (DÉFAUT: n'active qu'IPv4) inet_protocols = all (active IPv4 et IPv6 s'il est supporté) inet_protocols = ipv4, ipv6 (active IPv4 et IPv6) inet_protocols = ipv6 (n'active qu'IPv6)
Par défaut, Postfix n'utilise qu'IPv4, car la plupart des systèmes ne sont pas raccordés à un réseau IPv6.
Sur les systèmes qui combinent les piles IPv4 et IPv6, tenter de livrer du courrier via IPv6 échouera systématiquement avec une erreur "network unreachable", et ces tentatives ralentiront Postfix.
Les noyaux Linux kernels ne chargent pas le module IPv6 par défaut. Toute tentative échouera immédiatement.
Note 1: vous devez arrêter et redémarrer Postfix après avoir changé le paramètre de configuration inet_protocols.
Note 2: si vous voyez des messages d'erreur tels que les suivants, c'est que vous n'avez pas activé IPv6 dans votre Linux. Reportez-vous sur http://www.ipv6.org/ pour les trucs et astuces. Contrairement à d'autres systèmes, Linux ne dispose pas d'une pile combinant IPv4 et IPv6, et le support de protocole IPv6 n'est pas chargé par défaut.
postconf: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol postconf: warning: inet_protocols: configuring for IPv4 support only
Note 3: sur les anciens systèmes Linux et Solaris, le paramètre "inet_protocols = ipv6" n'interdira pas à Postfix d'accepter des connexions IPv4. Postfix présentera cependant les adresses IP du client au format IPv6. Dans tous les autres cas, Postfix présente toujours les adresses IPv4 clientes dans la forme traditionnelle séparée par des points d'IPv4.
L'autre nouveau paramètre est smtp_bind_address6. Il indique l'adresse d'interface locale utilisée pour les connexions IPv6 sortantes, tels que le fait le paramètre smtp_bind_address pour IPv4:
/etc/postfix/main.cf: smtp_bind_address6 = 2001:240:587:0:250:56ff:fe89:1
Si vous laissez le paramètre mynetworks à sa valeur par défaut (i.e. mynetworks non renseigné dans main.cf) Postfix trouvera seul ses adresses de réseau. C'est typiquement ce à quoi ressemble :
% postconf mynetworks mynetworks = 127.0.0.0/8 168.100.189.0/28 [::1]/128 [fe80::]/10 [2001:240:587::]/64
Si vous renseignez la valeur du paramètre mynetworks dans main.cf, vous devez mettre à jour la valeur mynetworks pour inclure les réseaux IPv6. Assurez-vous de bien spécifier les adresses IPv6 entre crochets "[]", comme suit :
/etc/postfix/main.cf: mynetworks = ...réseaux IPv4... [::1]/128 [2001:240:587::]/64 ...
NOTE: lorsque vous configurez des listes de correspondances telles mynetworks ou debug_peer_list, vous devez indiquer les adresses IPv6 entre crochet "[]" dans les valeurs des paramètres de main.cf et dans les fichiers indiqués dans des correspondances "/nom/de/fichier". Les adresses IPv6 contiennent le caractère ":" et risqueraient autrement d'être confondues avec des correspondances "type:table".
L'ordre des tentatives de connexions sortantes IPv6/IPv4 n'est pas actuellement configurable. Généralement, IPv6 est testé avant IPv4.
Postfix ne supporte pas actuellement les consultations DNSBL (listes noires en temps réel) pour les adresses clientes IPv6 ; généralement il n'y a pas de listes qui couvrent les espaces d'adresses IPv6.
IPv6 n'a pas de classes d'adresses réseaux A, B, C, etc.. Avec les réseaux IPv6, le paramètre "mynetworks_style = class" a le même effet que "mynetworks_style = subnet".
Sur Tru64Unix and AIX, Postfix ne peut détecter le masque du réseau local et suppose toujours qu'il s'agit d'un réseau /128. Ce n'est un problème qu'avec "mynetworks_style = subnet" ou si mynetworks n'est pas explicite dans main.cf.
Le support IPv6 de Postfix version 2.2 est basé sur le patch Postfix/IPv6 de Dean Strik et autres mais diffère en quelques points.
main.cf: Le paramètre inet_interfaces ne supporte pas la notation "ipv6:all" ou "ipv4:all". Utilisez le paramètre inet_protocols à la place.
main.cf: Indiquez "inet_protocols = all" ou "inet_protocols = ipv4, ipv6" Pour activer à la fois le support d'IPv4 et d'IPv6.
main.cf: Le paramètre inet_protocols contrôle également quelles requêtes DNS Postfix utilisera pour envoyer et recevoir d courrier.
main.cf: Indiquez "inet_interfaces = loopback-only" pour n'écouter que sur les interfaces réseaux de la boucle locale.
Les fonctionnalités lmtp_bind_address et lmtp_bind_address6 ont été oubliées. Le client LMTP de Postfix sera absorbé par le client SMTP, il n'y a donc aucune raison d'ajouter des fonctionnalités au client LMTP.
Le serveur SMTP requiert maintenant que les adresses IPv6 dans les commandes SMTP soient indiquées sous la forme [ipv6:ipv6address], tel que décrit dans la RFC 2821.
Le code d'examen des adresses des réseaux IPv6 a été entièrement réécrit et devrait être plus proche des spécifications. Le résultat peut être incompatible avec le patch Postfix/IPv6.
Faire fonctionner IPv6 sur Postfix sur les autres systèmes passe par les étapes suivantes :
Indiquez comment Postfix peut trouver les interfaces réseaux locales. Postfix a besoin de ces informations pour éviter les boucles de messages et pour savoir si un message à destination de user@[ipaddress] concerne une destination locale ou distante.
Si votre système dispose de la routine getifaddrs() alors ajoutez ce qui suit dans la section concernant votre plateforme dans src/util/sys_defs.h :
#ifndef NO_IPV6 # define HAS_IPV6 # define HAVE_GETIFADDRS #endif
Autrement, si votre système dispose de la commande SIOCGLIF ioctl() dans /usr/include/*/*.h, ajoutez ce qui suit dans la section concernant votre plateforme dans src/util/sys_defs.h :
#ifndef NO_IPV6 # define HAS_IPV6 # define HAS_SIOCGLIF #endif
Dans les autres cas, Postfix devra utiliser les anciennes commandes SIOCGIF et ne disposera que de fonctionnalités IPv6 restreintes (il ne pourra pas trouver vos masques réseaux IPv6 nécessaires pour "mynetworks_style = subnet". Ajoutez ceci dans la section concernant votre plateforme dans src/util/sys_defs.h :
#ifndef NO_IPV6 # define HAS_IPV6 #endif
Testez si Postfix peut trouvez les informations concernant ses interfaces.
Après avoir compilé Postfix selon la méthode habituelle, entrez dans le répertoire src/util et tapez "make inet_addr_local". Lancer ce fichier à la main devrait afficher toutes les adresses des interfaces ainsi que leurs masques ; par exemple :
% make % cd src/util % make inet_addr_local [... messages divers ...] % ./inet_addr_local [... messages divers ...] ./inet_addr_local: inet_addr_local: configured 2 IPv4 addresses ./inet_addr_local: inet_addr_local: configured 4 IPv6 addresses 168.100.189.2/255.255.255.224 127.0.0.1/255.0.0.0 fe80:1::2d0:b7ff:fe88:2ca7/ffff:ffff:ffff:ffff:: 2001:240:587:0:2d0:b7ff:fe88:2ca7/ffff:ffff:ffff:ffff:: fe80:5::1/ffff:ffff:ffff:ffff:: ::1/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
L'exemple précédent concerne une ancienne machine FreeBSD. Les autres systèmes produisent des résultats légèrement différents.
Si aucun résultat utilisable ne sort, envoyez un message à la liste postfix-users@postfix.org et nous essairont de vous aider avec ceci.
Les informations suivantes sot pour partie issues de celles rassemblées par Dean Strik.
Mark Huizer a écrit me patch IPv6 original pour Postfix.
Jun-ichiro 'itojun' Hagino du projet KAME a écrit des modifications sensibles. Depuis lors, nous parlons du patch KAME.
La distribution PLD Linux a porté le code sur d'autres piles (en particulier USAGI). Nous parlons alors du patch PLD. Une caractéristique importante de ce patch est qu'il peut marcher avec celui de Lutz Jaenicke.
Dean Strik a étendu le support d'IPv6 aux autres plateformes que KAME et USAGI, mis à jour le patch pour respecter le développement de Postfix et créé un patch combiné IPv6 + TLS. Les informations sur ces travaux peuvent être trouvées sur le site Postfix de Dean Strik's : http://www.ipnet6.org/postfix/.
Wietse Venema a pris le patch IPv6 de Dean Strik, l'a inclus dans Postfix 2.2, et en a profité pour éliminer tous le code spécifique IPv4 de Postfix qui pouvait l'être. Sur les systèmes sans librairies ou noyau supportant IPv6, Postfix dispose d'une simple couche de compatibilité pour qu'il utilise IPv4 comme avant.
traduction par Xavier Guimard - Retour au menu