Ce document décrit l'installation d'un serveur e-mail complet en utilisant les logiciels exposés dans le titre.
N'hésitez pas à me contacter pour d'éventuelle suggestions. Le document se base sur Debian GNU/Linux en version Lenny.
1° Introduction :
Ici vous trouverez rien de très essentiel (si ce n'est les quelques dernières lignes), c'est pour la forme quoi :-)
Pourquoi ce tutoriel est-il intéressant ?
Ce que ce tutoriel n'abordera pas :
2° Installation des logiciels et fichiers nécessaires :
C'est assez simple, pour l'installation tapez :
apt-get install postfix postfix-mysql courier-authlib-mysql courier-pop courier-pop-ssl courier-imap clamav clamav-testfiles maildrop spamassassin razor pyzor
Tout les fichiers de configuration sont disponibles dans cette archive. Dans l'archive il y a un répertoire postfix :
Ce qu'il faut customiser :
Comme on peut le voire dans le fichier main.cf, il est prévu que l'utilisateur vmail possède l'uid 5000.
Pour ce faire, tapez :
useradd vmail -s /bin/false -u 5000
Dans la configuration de postfix, le répertoire contenant les mails est : /home/mail. Donc on le crée :
mkdir /home/mail && chown vmail:vmail /home/mail && chmod 700 /home/mail
On s'assure que les programmes de /usr/local/bin sont éxecutables :
chmod +x /usr/loca/bin/*
Normallement le répertoire /var/spool/vmail est utilisé pour stocker les e-mails des comptes virtuels. Pour que tout aille dans /home/mail, on peut taper :
rmdir /var/spool/vmail && ln -s /home/mail /var/spool/vmail
Dans le répertoire /home/mail la structure sera :
On vérifie que les droits sont bons sur les fichiers de config de postfix, courier et les scripts php (car ils contiennent vos mots de passe MySQL) :
chmod 700 /usr/local/bin/* && chmod 600 /etc/postfix/mysql-* && chmod 600 /etc/courier/authmysqlrc chown vmail:vmail /usr/local/bin/maildrop_wrapper.php && chmod 655 /usr/local/bin/clamscan.sh
Remarque :
3° Création de la base de donnée :
Attention, selon le nombre de mailbox que vous utiliserez, il se peut que le nombre maximum de connexion pour MySQL par défaut (100) ne suffisent pas, dans ce cas il faut l'augmenter (à condition que le serveur suivent bien sur) dans le fichier my.cnf. Dans notre exemple, l'utilisateur MySQL se nomme postfix et la base de donnée se nomme postfix aussi. Je vous conseille de garder ces noms car ils sont utilisés à plein d'endroit et on oublie facilement d'en changer un (et du coup, ça marche pas). Il suffit d'éxecuter cette requête SQL :
CREATE TABLE `alias` ( `source` varchar(255) NOT NULL default '', `destination` varchar(255) NOT NULL, UNIQUE KEY `source` (`source`,`destination`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Alias Virtuels';
CREATE TABLE `domain` ( `domain` varchar(255) NOT NULL default '', PRIMARY KEY (`domain`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Domaines Virtuels';
CREATE TABLE `mailbox` ( `email` varchar(255) NOT NULL default '', `login` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `quota` varchar(20) NOT NULL default '0' COMMENT 'Quota in MBytes, 0 = no quota', `imap` tinyint(1) NOT NULL default '1', `pop3` tinyint(1) NOT NULL default '1', PRIMARY KEY (`email`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Postfix Admin - Boites Emails Virtuelles';
Quelques remarques :
4° Configuration de maildrop :
C'est là que je suis plus ou moins sorti des chantiers batus (ou parti en free style, prenez votre expression préférée) avec le script php. Le problème de base :
Ce que le wrapper fait :
Ce que le wrapper ne fait pas :
Le fichier /etc/maildroprc :
Le fichier /etc/quotawarnmsg :
5° Mise en place des taches cron :
C'est ici que les autres scripts interviennent. D'abord leurs utilité :
Ce que je propose comme taches cron :
30 3 * * * /usr/local/bin/spam_learn.sh
20 4 * * * /usr/local/bin/spam_roller.php
*/15 8-23 * * * /usr/local/bin/maildir_make.php
Ce qui est important c'est de lancer spam_learn.sh avant spam_roller.php, sinon spamassassin ne s'entrainera pas avec tout le spam disponible. Pour le script maildir_make.php, inutile de le faire tourner à des heures ou vous ne travaillez pas (pour un humain normal, mettre 8 à 23 heure, pour un geek normal mettre 13 à 04 heure me semble de bonnes valeurs).
6° Conclusion :
Ce tutoriel étant assez conséquent, j'ai peut-être oublié des choses, il y a peut-être des fautes ou des points pas claires. Pour toutes remarques ou suggestions, veuillez me contacter par e-mail ou laisser un commentaire. Sinon je peut juste vous dire que chez moi ça marche. Vous pouvez testez l'installation en insérant un tuple dans la table mailbox. Si dans le quart d'heure suivant vous pouvez consulter votre mailbox, envoyez vous un mail test pour vérifier que tout fonctionne.