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 virtuelles | frederic.kiczewski | frederic.kiczewski@toto.org | | /etc/imap.cnf | defaultdomain:
toto.org | virtdomains:
yes | | cyradm | user/frederic.kiczewski | user/frederic.kiczewski@toto.org | | /etc/postfix/master.cf | ${user} | ${user}\@{nexthop} | | /etc/postfix/vmailbox | frederic.kiczewski | frederic.kiczewski@toto.org | | /etc/postix/virtual | webmaster frederic.kiczewski | webmaster@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
|