www.condom.orgVille de CondomCondom-en-Armagnac
 > Accueil | Tourisme |  Les écoles | Les associations | Les manifestations | Les marchés publics | Nous contacter 
  Le tri sélectif  |  Etat Civil  |  Le bulletin municipal  |  Le P.I.J  |  La bibliothèque municipale  |  Les archives communales  |
  Le Pole Petite Enfance  |  Les marchés de Condom  |  Les archives du site  |  Les sites internet
Postfix + Cyrus21 + Sasl sur Debian 3.1
 

Objet :

Mise en place d'un serveur mail afin d'internaliser la gestion des courriers électroniques de la mairie (60 boites mail environ). Nous avions précédemment beaucoups de problèmes de maintenance avec notre fournisseur externe, notamment des delais trop long pour les rétablissements de services.
Actuellement il est possible de reinstaller un serveur et de restaurer sa configuration en quelques heures.

contraintes : il fallait des comptes pop avec authentification en clair afin de ne pas changer la configuration de tous les postes. Donc obligatoirement une gestion de boites virtuelles (sans création de compte Unix).

Choix logiciel :

Pour le MDA (Mail Delivery Agent), j'ai choisi Cyrus21 pour la gestion des boites mails virtuelles.  Cyrus est assez réputé bien que la documentation officielle soit trés "light".

Pour la gestion des accés : Saslauthd avec une base de donnée dbm. Je ne voulais pas utiliser LDAP ou Mysql pour seulement 60 boites.

Pour le MTA (Mail Transport Agent), j'avais d'abord choisi Exim4 (installation en standart sur Debian). Mais la gestion des boites virtuelles était trop complexe (à la limite bidouillage).
Je me suis donc rabattu sur Postfix, qui à l'avantage d'avoir une excellente documentation en français.


  • Le serveur Cyrus sert à réceptionner les mails dans une boite a l'aide du protocole POP (port 110)
  • Le serveur Postfix sert au transport des courriers avec le protocole SMTP (port 25)
  • Le serveur Saslauthd sert a l'authentification des comptes virtuels avec SASL ( il n'y a pas de compte unix sur la machine pour des raisons de sécurité).
  • Il n'y pas de gestion des connexions securise pop3s, imaps et smtps avec les procoles SSL/TLS a cause d'une charge importante. SSL consomme beaucoup de ressources processeur.
  • Cela peux être mis en oeuvre pour certains comptes exterieurs, il faut alors créer des certificats et modifier le fichier /etc/imap.conf. Toutefois, comme toutes les connexions se font avec le même fournisseur d'accés, le risque d'interception des mots de passe est trés limité.

Prérequis

  • Un nom de domaine (toto.org pour l'exemple) avec configration du DNS avec pop.toto.org + smtp.toto.org + facteur.toto.org redirigés vers votre adresse IP fixe w.x.y.z.
  • Un acces ADSL avec adresse IP fixe w.x.y.z, modem-routeur-firewall configuré (NAT et Firewall) pour redirriger les ports 25 et 110 vers l'adresse IP de votre serveur (192.168.1.200 pour l'exemple)
  • un serveur avec au moins une carte réseau 10/100BT. OS GNU/Linux Debian 3.1 stable.


Installation de Cyrus et Sasl :

# Se logger root sur le serveur .
# installer les paquets suivants :
apt-get install cyrus21-admin cyrus21-common cyrus21-imapd libauthen-sasl-cyrus-perl libcyrus-imap-perl21 libsasl2

# installer ensuite :
apt-get install sasl2-bin libauthen-sasl-perl libsasl2-modules

# controler la bonne installation de cyrus
id cyrus

Configuration de Sasl :

# creation du mot de passe de l'utilisateur cyrus dans sasl.
saslpasswd2 cyrus

# controle de l'opération
sasldblistusers2

# modifier le fichier saslauthd
vi /etc/default/saslauthd

# modifier les ligne :
"START=yes"
MECHANISMS="sasldb"


# lancer le serveur d'authentification
/etc/init.d/saslauthd start

# tester l'utilisateur cyrus
testsaslauthd -u cyrus -p motdepasse

# NB : l'utilisateur cyrus n'a pas de password système.


Configuration de Cyrus :

# modifier le fichier cyrus.conf (1er fichier de configuration de Cyrus)
vi /etc/cyrus.conf

# avec cette configuration :
SERVICES {
# --- Normal cyrus spool, or Murder backends ---
# add or remove based on preferences
imap cmd="imapd -U 30" listen="127.0.0.1:imap" prefork=0 maxchild=100
pop3 cmd="pop3d -U 30" listen="192.168.1.200:pop3" prefork=0 maxchild=50

# Le protocole imap est autorisé en local uniquement pour des raisons de sécurité  (il ne sert que pour l'administration avec cyradm)
# Le protocole pop3 est autorisé depuis l'interface 192.168.1.200 .
# vérifier le fichier /etc/services que les ports sont déclarés.

# modifier le fichier imap.conf (2e fichier de configuration Cyrus)
vi /etc/imap.conf

# insérer ou décommenter ou modifier les lignes suivantes :
# l'administrateur du serveur imap/pop
admins: cyrus                          

# la methode d'authentification du client pop
sasl_pwcheck_method: saslauthd
# la taille maximale des boites en Ko
autocreatequota: 102400
# force la casse en minuscule
lmtp_downcase_rcpt: yes
# autorise les "." dans les adresses mail
unixhierarchysep: yes
# pour autoriser les @ dans les adresse mails
virtdomains: yes
# le domaine par defaut 
defaultdomain: toto.org
# delai minimum entre 2 requetes du client pop
# peut être commenté par un dièse si problemes
popminpoll: 1

#relancer le serveur cyrus
/etc/init.d/cyrus21 restart

# controler l'accés au serveur
telnet 192.168.1.200 pop3
# quit pour quitter


Création d'une BAL dans Cyrus :

# creer une Boite Aux Lettres (BAL) dans Cyrus
cyradm --user cyrus localhost
# entrer le mot de passe de l'administrateur cyrus
# NB : seul les acces locaux (localhost) sont possible pour l'administration.

# création de la BAL frederic.kiczewski@toto.org
>cm user/frederic.kiczewski@toto.org
# ATTENTION : une BAL doit être préfixée par "user/", sinon c'est un dossier public qui est crée.
# NB : cm = create mailbox

# controler la creation de la BAL :.
>lm
# NB : lm = list mailbox

# quitter cyradm
>quit 


Destruction d'une BAL dans Cyrus :

# attention : par défaut l'administrateur cyrus n'a pas l'autorisation de modifier ou supprimer une BAL
# il lui faut d'abord en modifier les droit (all = tous les droits) avec la commande "setacl".
# l'utilisation du caractère joker "*" est possible : à manier avec précaution.
cyradm --user cyrus localhost
>setacl user/frederic.kiczewski@toto.org cyrus all
>dm user/frederic.kiczewski@toto.org
>quit

Création d'un mot de passe dans Sasl :

# créer le mot de passe d'authentification sasl de la BAL
saslpasswd2 -c -u toto.org frederic.kiczewski
# remarquez la notation inverse du "user" -u
# ceci n'est mentionné dans aucune documentation.
# NB option -c pour créer, -d pour supprimer,

# verifier la création des mots de passse
sasldblistusers2 

# tester le mot de passe
testsaslauthd -u frederic.kiczewski -r toto.org -p lemotdepasse
# ici le domaine est préfixé d'un -r : attention aux erreurs...


Installation de Postfix :

# installation des paquetages standart de Postfix
apt-get install postfix


Configuration de Postfix :

# Il y a 2 fichiers de configuration : /etc/postfix/main.cf et /etc/postix/master.cf.
# toute modification de ces fichiers doit être suivi d'un rechargement des paramêtres du serveur :
/etc/init.d/postfix reload

# Il y a ensuite 2 fichiers listants les BAL et alias /etc/postfix/vmailbox et /etc/postfix/virtual
# toute modification de ces fichiers doit être suivi d'un reformatage :
postmap /etc/postfix/vmailbox
postmap /etc/postfix/virtual

Configuration du fichier /etc/postfix/main.cf :

# editer le fichier /etc/postfix/main.cf et ajouter ou modifier les points suivants:
vi /etc/postix/main.cf

# nom par defaut du MTA
# doit etre déclaré dans les DNS afin que les retours-erreurs puissent s'effectuer !!!
myhostname = facteur.toto.org
# les alias LOCAUX
alias_maps = hash:/etc/aliases
# la liste des BAL LOCALES
local_recipient_maps = $alias_maps
# le nom par defaut après l'@ pour les courriers LOCAUX.
myorigin = $mydomain
# domaine LOCAL fictif (sert en interne uniquement derriere le routeur-NAT) :
mydomain = fictif
# domaines LOCAUX pour la reception du courrier :
mydestination = $myhostname, localhost, localhost.$mydomaine
# le smtp du fournisseur d'accés va servir de relai pour les envois internet
# car les envois directs sont refusés par certains serveurs.
relayhost = smtp.wanadoo.fr
# les domaines que vous autorisez à relayer.
# n'autoriser aucun relayage de l'exterieur pour eviter de devenir spammer !!!
relay_domains =
# les clients de votre réseaux autorisés à utiliser le MTA pour les envois.
# Peut etre restreint à quelques serveurs, au minimum a localhost
mynetworks = 127.0.0.0/8, 192.168.0.0/24
# adresse ip fixe livrée par le fournisseur d'accés ADSL
# à indiquer uniquement si le serveur est un serveur MX de secours
proxy_interface = w.x.y.z
# les interfaces réseaux utilisées par postfix.         
inet_interfaces = all

# le transport VIRTUEL fait réference à une ligne dans le fichier master.cf
# cela implique que les mails ne seront pas livrés en local, mais par Cyrus.
virtual_transport = cyrus
# le ou les domaines VIRTUELS gérés par votre serveur et qui seront envoyés au transport virtuel
virtual_mailbox_domains = toto.org, toto.com, toto.net
# le fichier des boites VIRTUELLES autorisees
# il est nécessaire d'en indiqué la liste, car Posfix ne les gère pas.
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
# le fichiers des alias VIRTUELS autorises
virtual_alias_maps = hash:/etc/postfix/virtual

ATTENTION :

Il y a une double gestion des mails : le domaine LOCAL géré directement (comptes Unix ou alias externes) et les domaines VIRTUELS (compte unix ou BAL Cyrus) avec des tranports différents.
Ici il n'y a pas d'utilisation du transport LOCAL. Dans le fichier /etc/aliases on crée des alias vers root et un alais de root vers frederic.kiczewski@toto.org.

La différence entre domaine virtuel et boite virtuelle dans Postfix:

Avec domaine virtuel :
Le paramètre virtual_alias_domains dans main.cf permet de spécifier plusieurs domaines virtuels gérés avec livraison à des comptes unix locaux. Ainsi frederic.kiczewski@toto.org et frederic.kiczewski@toto.com seront livrés au compte unix frederic.kiczewski ou à un autre compte unix via virtual_alias_maps.

Avec boite virtuelle :
Le paramètre virtual_transport indique que la livraison sera faîte à Cyrus. Il faut donc préciser une liste des boites autorisées virtual_mailbox_maps puisque Postfix en délègue la livraison.

Si les BAL crées dans Cyrus sont du type user/frederic.kiczewski, alors on a frederic.kiczewski dans virtual_mailbox_maps.
Tous les courrier envoyés à frederic.kiczewski@toto.org ou frederic.kiczewski@toto.com seront envoyés à frederic.kiczewski grâce au transport virtuel cyrus et parce que les domaines sont listés dans virtual_mailbox_domains et la BAL listée dans virtual_mailbox_maps.

Si les BAL crées dans Cyrus sont du type user/frederic.kiczewski@toto.org, alors il faut avoir frederic.kiczewski@toto.org dans virtual_mailbox_maps.
Le courier envoyé à frederic.kiczewski@toto.org sera livré à frederic.kiczewski@toto.org par le transport virtuel Cyrus. Mais Postfix contrôle que toto.org fait bien parti des domaines listés dans virtual_mailbox_domains et que la boite frederic.kiczewski@toto.org est listée dans virtual_mailbox_maps.

NB : il peut y avoir un domaine par défaut dans imap.conf de Cyrus (defaultdomain: ). Je vous déconseille de le mettre en oeuvre. Car pour Cyrus, user/frederic.kiczewski avec defaultdomain: toto.org et user/frederic.kiczewski@toto.org ne sont pas les mêmes BAL !!!

Dans la pratique, avec les alias, il est possible de faire des "multiplexages" trés complexe entre les BAL. Mais Cyrus est beaucoup moins flexible de Postfix. Donc il y a là source de cheveux blancs en perspective...

Un tableau expliquant les différences des boites virtuelles :

Boites virtuellesfrederic.kiczewskifrederic.kiczewski@toto.org
/etc/imap.cnfdefaultdomain: toto.orgvirtdomains: yes
cyradmuser/frederic.kiczewskiuser/frederic.kiczewski@toto.org
/etc/postfix/master.cf${user}${user}\@{nexthop}
/etc/postfix/vmailboxfrederic.kiczewskifrederic.kiczewski@toto.org
/etc/postix/virtualwebmaster frederic.kiczewskiwebmaster@toto.org frederic.kiczewski@toto.org

Configuration du fichier /etc/postfix/master.cf

# editer le fichier /etc/postfix/master.cf
vi /etc/postix/master.cf

# ajouter le transport VIRTUEL cyrus :
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
cyrus unix - n n - - pipe
  flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -r ${sender} ${user}\@${nexthop}

# ATTENTION :
# bien respecter les tabulations dans la 1ère ligne cyrus
# les colonnes des paramêtres doivent correspondre...
#
# il doit y avoir deux espaces avant "flags" en 2ème ligne pour indiquer qu'il s'agit de la suite de la 1ère ligne.
# la 2ème ligne corresond aux arguments de la commande pipe.
#
# /usr/sbin/cyrdeliver est le transport au protocole LMPT de cyrus (à adapter selon les distris).
#
# le parametre "-r ${sender}" envoyé à cyrdeliver indique l'expéditeur pour les retours-erreurs.
#
# Si vous mettez l'option "-u ${extension}" les envois multiples génèreront un message d'erreur
# mais les courriers seront quand même envoyés !!!
#
# Le dernier paramètre de la ligne doit être le nom de la BAL : ${user}\@${nexthop}
#
# Pour les BAL virtuelles l'arobase doit être précédé d'un anti-slash
# et aucune documentation cyrus ne le précise !!!
#
# pour info les paramêtres : ${mailbox} = ${user}+${extension}
# et ${recipient} = ${mailbox}@${nexthop}
# mais comme l'arobase doit être précédé d'un anti-slash, ${recipient} ne fonctionne pas !!!
#
# pipe est une commande de postfix !!!
# cyrdeliver est une commande de cyrus !!!

Configuration du fichier /etc/postfix/vmailbox :

# editer le fichier /etc/postfix/vmailbox
vi /etc/postix/vmailbox

# y inscrire toutes les boites virtuelles crées dans cyrus.
# toute boite non inscrite dans ce fichier sera rejettée par postfix.
# seule la partie de gauche est utile, la colonne droite évite uniquement un message d'erreur de postmap
frederic.kiczewski@toto.org frederic.kiczewski
cecile.duchemin@toto.org cecile.duchemin
gertrude.dupont@toto.org gertrude.dupont
victor.durand@toto.com victor.durand

# faire un postmap /etc/postfix/vmailbox pour mettre à jour la base de donnee
postmap /etc/postfix/vmailbox


Configuration du fichier /etc/postfix/virtual :

# editer le fichier /etc/postfix/virtual :
vi /etc/postix/virtual

# on y déclare les alias VIRTUELS avec adresse complète.
# à gauche un alias unique et à droite une ou plusieurs boites VIRTUELLES et/ou alias VIRTUELS
# ATTENTION : ne pas entrer dans la partie gauche une boite VIRTUELLE !!!
webmaster@toto.org frederic.kiczewski@toto.org
postmaster@toto.org frederic.kiczewski@toto.org
fredo@toto.org frederic.kiczewski@toto.org
gertrude@toto.org gertrude.dupont@toto.org

# un ancien qui a pris sa retraite...
# on redirige sur une boite perso externe
leon.nettoyeur@toto.org l.nettoyeur@wanadoo.fr
# un peut de fantaisie pour les amis
totor@toto.org victor.durand@toto.org
# exemples de listes de diffusion
# les boites et/ou alias VIRTUELS sont séparées par une virgule.
compta@toto.org gertrude.dupont@toto.org, victor.durand@toto.org
informatique@toto.org frederic.kiczewski@toto.org, cecile.duchemin@toto.org

# les listes sont cascadables
personnel.organisation@toto.org compta@toto.org, informatique@toto.org

# faire un postmap pour mettre à jour
postmap /etc/postfix/virtual

# il n'est pas nécéssaire de relancer postfix après mise à jour par postmap
# car les bases sont consultées à chaque mail.



Le contrôle :

Pour vérifier le bon fonctionnement de l'ensemble :
cat /var/log/syslog


Références :

http://www.z0pe.org/howto/serveur-mail/administration-de-compte-cyrus/

http://www.linuxorable.fr/Cyrus-IMAP-58-installer-Cyrus.html

http://x.guimard.free.fr/postfix/

http://postfix.traduc.org/

Conclusion

J'ai lu ça et là que Postfix + Cyrus c'est chaud... je confirme !!!

En fait Postfix est d'un flexibilité incroyable, mais ça le rend trés complexe, même avec une bonne doc en français. Faire la différence d'usage entre les transports LOCAL et VIRTUAL c'est pas facile.

Quand à Cyrus, la doc officielle est miteuse. Indigne d'un bon logiciel comme celui-ci. Regrettable qu'il y ait tant de bidouillages pour l'utilisation des "." et des "@" dans les adresses. Même chose avec sasl.

J'ai l'impression que les developpeur de Cyrus sont agacés par les utilisateurs de Postfix et vice-versa. C'est regrettable pour les utilisateurs.

Bon point positif tout de même : cela fonctionne trés bien.

Frédéric KICZEWSKI - le webmaster

mise à jour le : 27-02-2007 Ecrire au webmestre © 2003-2007 Ville de Condom