Dans ce tuto, on va installer un serveur mail où contrairement à l’autre tuto, les utilisateurs ne seront pas gérés par des comptes UNIX mais directement dans une base de données MySQL. Cela permet en outre d’avoir un nombre infini de boîtes mails. Il sera également possible de gérer plusieurs domaines.
C’est en outre cette configuration que j’ai retenue pour gérer les boîtes mails de Open-web.fr.
Préambule
On va tout d’abord ajouter un dépôt au sources.list afin de disposer d’une version de postfix avec le patch vda. Ce patch permet à Postfix de gérer les quotas.
# nano /etc/apt/sources.list |
#Postfix-vda deb http://debian.home-dn.net/etch postfix-vda/ #deb-src http://debian.home-dn.net/etch postfix-vda/ |
On créée/modifie ensuite un fichier preferences pour dire à aptitude de privilégier ce dépôt pour l’installation de postfix :
# nano /etc/apt/preferences |
Package: postfix Pin: release o=Home-dn.net archive,l=Home-dn.net archive,c=main Pin-Priority: 900
On met la liste de paquets à jour :
# aptitude update |
On installe ensuite les paquets nécessaires :
# aptitude install postfix postfix-mysql |
Création de l’utilisateur
On commence par rajouter l’utilisateur et le groupe qui gérera postfix :
# groupadd -g 5000 vmail # useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m |
Configuration de Mysql
Pour commencer, il faut autoriser mysql à se connecter en local (pour cela, rechercher et décommenter bind-adress) :
# nano /etc/mysql/my.cnf |
bind-address = 127.0.0.1 # skip-networking
On se connecte à mysql en root, afin de le configurer :
# mysql -p |
On entre le mot de passe lorsque le shell nous le demande. On va maintenant ajouter nos paramètres Mysql :
> create database postfix; |
> use postfix; |
> CREATE TABLE `domain` ( `domain` varchar(255) NOT NULL default '', `actif` tinyint(1) NOT NULL default '1', PRIMARY KEY (`domain`) ) ENGINE=MyISAM COMMENT='Postfix Admin - Domaines Virtuels'; |
> CREATE TABLE `mailbox` ( `email` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `quota` int(10) NOT NULL default '0', `actif` tinyint(1) NOT NULL default '1', `imap` tinyint(1) NOT NULL default '1', `pop3` tinyint(1) NOT NULL default '1', PRIMARY KEY (`email`) ) ENGINE=MyISAM COMMENT='Postfix Admin - Boites Emails Virtuelles'; |
> CREATE TABLE `alias` ( `source` varchar(255) NOT NULL default '', `destination` text NOT NULL, `actif` tinyint(1) NOT NULL default '1', PRIMARY KEY (`source`) ) ENGINE=MyISAM COMMENT='Postfix Admin - Alias Virtuels'; |
On rajoute l’utilisateur mysql pour postfix (pensez à remplacer MONMOTDEPASSE par le mot de passe désiré).
> GRANT SELECT ON `postfix`.* TO 'postfix'@'%' IDENTIFIED BY 'MONMOTDEPASSE'; |
On applique les paramètres :
> FLUSH PRIVILEGES; |
Et on termine notre session mysql.
> exit; |
Fichiers de configuration
On va éditer/créer nos fichiers de configuration. N’oubliez pas de mettre vos informations à jour, sous peine d’erreurs.
# nano /etc/postfix/main.cf |
smtp_banner = $myhostname ESMTP (Debian / GNU) biff = no disable_vrfy_command = yes smtpd_helo_required = yes append_dot_mydomain = no mydestination = nom_de_votre_serveur, localhost, localhost.localdomain mydomain = nom_de_votre_serveur myhostname = nom_de_votre_serveur relayhost = mynetworks = 127.0.0.0/8 ip_de_votre_serveur inet_interfaces = all smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain, warn_if_reject reject_unverified_sender smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient smtpd_client_restrictions = reject_unknown_client, permit_mynetworks virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf, mysql:/etc/postfix/mysql-virtual_aliases_mailbox.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf virtual_mailbox_base = /var/spool/vmail/ virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = "Desole, la boite email de l'utilisateur est pleine. Veuillez re-essayer plus tard !" virtual_overquota_bounce = yes
# nano /etc/postfix/mysql-virtual_mailbox_limit_maps.cf |
hosts = 127.0.0.1 user = postfix password = VOTREMOTDEPASSE dbname = postfix select_field = quota table = mailbox where_field = email
# nano /etc/postfix/mysql-virtual_aliases_mailbox.cf |
hosts = 127.0.0.1 user = postfix password = VOTREMOTDEPASSE dbname = postfix select_field = email table = mailbox where_field = email additional_conditions = AND actif='1'
# nano /etc/postfix/mysql-virtual_aliases.cf |
hosts = 127.0.0.1 user = postfix password = VOTREMOTDEPASSE dbname = postfix select_field = destination table = alias where_field = source additional_conditions = AND actif='1'
# nano /etc/postfix/mysql-virtual_mailboxes.cf |
hosts = 127.0.0.1 user = postfix password = VOTREMOTDEPASSE dbname = postfix select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') table = mailbox where_field = email additional_conditions = AND actif='1'
# nano /etc/postfix/mysql-virtual_domains.cf |
hosts = 127.0.0.1 user = postfix password = VOTREMOTDEPASSE dbname = postfix select_field = 'virtual' table = domain where_field = domain additional_conditions = AND actif='1'
On modifie les droits de ces fichiers de configuration :
# chgrp postfix /etc/postfix/mysql-virtual_*.cf # chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf |
Un redémarage de Postfix, et un test de la configuration :
# /etc/init.d/postfix restart # postfix check |
Configuration du courrier
# aptitude install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-pop maildrop |
A la question posée, on répond par oui.
On va maintenant signaler à postfix que l’on utilise mysql pour l’identification :
# nano /etc/courier/authdaemonrc |
Et on modifie la ligne qui commence par authmodulelist.
authmodulelist="authmysql"
Je remplace le contenu du fichier /etc/courier/authmysqlrc par ce qui suit :
MYSQL_SERVER localhost MYSQL_USERNAME postfix MYSQL_PASSWORD MOTDEPASSE MYSQL_PORT 0 MYSQL_OPT 0 MYSQL_DATABASE postfix MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/var/spool/vmail/" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') MYSQL_QUOTA_FIELD quota
On pense à redémarrer les différents démons que l’on a paramétré :
# /etc/init.d/courier-authdaemon restart # /etc/init.d/courier-imap restart # /etc/init.d/courier-pop restart |
L’accès POP ou IMAP échouera si la boîte mail n’existe pas ! En conséquence, je vous conseille d’envoyer un email de bienvenue lors de la création de vos comptes. Cela vous permettra de créer le répértoire !
Test du serveur
On commence par installer les outils :
# aptitude install mailutils |
On test que notre domaine est bien configuré dans bind pour accepter notre serveur mail :
# host -t MX nom_domaine |
Il doit répondre nom_domaine mail is handled by 10 mail.nom_domaine.tld. Dans le cas contraire, il est nécessaire d’aller configurer BIND !
On va ajouter notre compte dans notre base de données. N’oubliez pas de remplacer les valeurs par les vôtres :
# mysql -u root -p |
On entre le mot de passe puis :
> use postfix; > INSERT INTO domain (domain, actif) VALUES ('nom_domaine.com', '1'); > INSERT INTO mailbox (email,password,quota,actif,imap,pop3) VALUES ('user@nom_domaine.com',ENCRYPT('MONMOTDEPASSEDUCOMPTEMAIL'),0,1,1,1); > exit; |
Et maintenant, on va envoyer un mail à notre propre utilisateur, et à une adresse externe (j’ai testé avec Gmail sans que ce soit reconnu comme spam) :
mail -s sujet To : user@nom_domaine.com Cc : user@domaine_externe.com texte du mail .
- mail -s ==> pour envoyer le sujet. Remplacez le mot sujet par un sujet
- To : l’adresse du compte créé ci-dessus
- Cc : je mets une autre adresse pour tester la réception vers une adresse externe
- Il faut terminer par une ligne contenant un . pour envoyer le mail
Si vous vérifiez votre logiciel mail, vous devriez obtenir le mail envoyé en Cc. Pour tester le mail envoyé à votre utilisateur, il vous suffit de rentrer les bons paramètres dans votre logiciel de mail préféré (Thunderbird).
pop: mail.nom_domaine.com smtp: votre FAI login: user@nom_domaine.com pass: *****
Conclusion
Voilà, votre MTA (Mail Transfert Agent) est normalement configuré. Si vous ne recevez rien, vérifiez bien tous les paramètres. Il est important d’avoir autorisé la connexion en local lors de l’installation de mysql, par exemple. En cas de doute, ou de souci, allez voir les logs :
# nano /var/log/mail.log |
Merci à Olivier Lange pour ce tuto extrait de Installation complète d’un serveur web sous Debian