Table des matières
Serveur Postfix avec MySQL
Cette documentation vous permettra de mettre en place une solution multi-domaine basée sur des utilisateurs et domaines virtuels, couplée avec MySQL.
Prérequis
- Debian: 5.0 (Lenny)
- Réseau: 192.168.0.0
- Serveur: 192.168.0.12 (Serveur de messagerie)
- Firewall & routeur: port TCP 25 ouvert et redirigé
- Une addresse IP statique couplé a un MX ou dynamique (avec dyndns.org par exemple)
Installation de Postfix et MySQL
<note important> Pour plus d'information sur l'installation de base d'un serveur Postfix, veuillez consulter l'article suivant Postfix </note>
# apt-get install postfix postfix-mysql mysql-server-5.0
Configuration de MySQL pour Postfix
Création de la base de donnée postfix
# mysqladmin -u root --password='motdepasse' create postfix
Création de l'utilisateur mailer
Nous pourrons nous connecter en root a notre base de données postfix mais allons créer un utilisateur mysql spécifique qui ne pourra accèder qu'a la base de données postfix.
# mysql -u root -p Enter password: mysql> GRANT ALL PRIVILEGES ON postfix.* TO mailer@localhost IDENTIFIED BY 'motdepasse';
Création des tables
Enregistez les lignes suivantes dans un fichier postfix_vitual.sql
USE postfix CREATE TABLE postfix_alias ( id int(11) unsigned NOT NULL auto_increment, alias varchar(128) NOT NULL default '', destination varchar(128) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM; CREATE TABLE postfix_relocated ( id int(11) unsigned NOT NULL auto_increment, email varchar(128) NOT NULL default '', destination varchar(128) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM; CREATE TABLE postfix_transport ( id int(11) unsigned NOT NULL auto_increment, domain varchar(128) NOT NULL default '', destination varchar(128) NOT NULL default '', PRIMARY KEY (id), UNIQUE KEY domain (domain) ) TYPE=MyISAM; CREATE TABLE postfix_virtual_domains ( id int(11) unsigned NOT NULL auto_increment, domain varchar(128) NOT NULL default '', destination varchar(128) NOT NULL default '', PRIMARY KEY (id), UNIQUE KEY domain (domain) ) TYPE=MyISAM; CREATE TABLE postfix_users ( id int(11) unsigned NOT NULL auto_increment, email varchar(128) NOT NULL default '', clear varchar(128) NOT NULL default '', crypt varchar(128) NOT NULL default '', name tinytext NOT NULL, uid int(11) unsigned NOT NULL default '2000', gid int(11) unsigned NOT NULL default '2000', homedir tinytext NOT NULL, maildir tinytext NOT NULL, quota tinytext NOT NULL, access enum('Y','N') NOT NULL default 'Y', postfix enum('Y','N') NOT NULL default 'Y', disablepop3 char(1) NOT NULL default '0', disableimap char(1) NOT NULL default '0', disablewebmail char(1) NOT NULL default '0', sharedgroup varchar(128) NOT NULL default '0', smtpaccess enum('Y','N') NOT NULL default 'Y', PRIMARY KEY (id), UNIQUE KEY email (email) ) TYPE=MyISAM; CREATE TABLE postfix_virtual ( id int(11) unsigned NOT NULL auto_increment, email varchar(128) NOT NULL default '', destination varchar(128) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM; CREATE TABLE postfix_access ( id int(10) unsigned NOT NULL auto_increment, source varchar(128) NOT NULL default '', access varchar(128) NOT NULL default '', type enum('recipient','sender','client') NOT NULL default 'recipient', PRIMARY KEY (id) ) TYPE=MyISAM ;
Et maintenant vous pouvez exécuter la requete:
#mysql -u root -p < postfix_virtual.sql
Utilisateur virtuel et structure des répertoires
Nous allons créer notre utilisateur et les dossiers de notre système virtuel. Elle regroupera les boites mail des utilisateurs.
# groupadd vmail -g 2000 # useradd vmail -u 2000 -g 2000 # mkdir /var/mail/vmail # chown vmail:vmail /var/mail/vmail # chmod 700 /var/mail/vmail
Configuration de Postfix pour MySQL
Creez un répertoire pour stocker et ranger les fichiers de configuration mysql
mkdir /etc/postfix/mysql/
Editez le fichier /etc/postfix/main.cf et ajoutez les lignes suivantes:
# Pour la redirection transport_maps = mysql:/etc/postfix/mysql/mysql-transport.cf virtual_transport = virtual # Stockage domaine virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql-virtual-domains.cf virtual_alias_maps = mysql:/etc/postfix/mysql/mysql-aliases.cf virtual_mailbox_base = /var/mail/vmail # Stockage email virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql-virtual-maps.cf virtual_minimum_uid = 100 virtual_uid_maps = static:2000 virtual_gid_maps = static:2000 # Support du relay # relay_domains = mysql:/etc/postfix/mysql/mysql-relay-domains.cf # Support du quota virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_mailbox_limit.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = La boite email de l'utilisateur est pleine, merci d'essayez plus tard. virtual_overquota_bounce = yes
Il est temps maintenant de creer les fichiers spécifier dans main.cf plus haut. Créer les fichier avec les memes noms dans le repertoire /etc/postfix/mysql
mysql-aliases.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT destination FROM postfix_alias WHERE alias = '%s'
mysql-relocated.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT destination FROM postfix_alias WHERE alias = '%s'
mysql-transport.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT destination FROM postfix_transport where domain = '%s'
mysql-virtual-domains.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT destination FROM postfix_virtual_domains WHERE domain = '%s'
mysql-virtual-maps.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT maildir FROM postfix_users where email='%s' and postfix = 'y'
mysql-recipient.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT maildir FROM postfix_users where email='%s' and postfix = 'y'
mysql-sender.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT maildir FROM postfix_users where email='%s' and postfix = 'y'
mysql-client.cf
user = mailer password = motdepasse dbname = postfix hosts = 127.0.0.1 query = SELECT access FROM postfix_access WHERE source = '%s' AND type = 'client'
Sécurisation des dossiers
# chmod 640 /etc/postfix/mysql/mysql-* # chgrp postfix /etc/postfix/mysql/mysql-*
Configuration de courier (POP et IMAP) avec MySQL
Installer le module Mysql pour courier.
apt-get install courier-pop courier-imap courier-authlib-mysql
Editez le fichier /etc/courier/authdaemonrc Cherchez la ligne authmodulelist=“authpam” et remplacez par authmodulelist=“authmysql”
Editez le fichier /etc/courier/authmysqlrc et modifiez le comme suis:
MYSQL_SERVER 127.0.0.1 MYSQL_USERNAME mailer MYSQL_PASSWORD motdepasse #MYSQL_SOCKET /var/lib/mysql/mysql.sock MYSQL_PORT 0 MYSQL_OPT 0 MYSQL_DATABASE postfix MYSQL_USER_TABLE postfix_users MYSQL_CRYPT_PWFIELD crypt MYSQL_CLEAR_PWFIELD clear #DEFAULT_DOMAIN domain.tld MYSQL_UID_FIELD 2000 MYSQL_GID_FIELD 2000 MYSQL_LOGIN_FIELD mail MYSQL_HOME_FIELD homedir MYSQL_NAME_FIELD name MYSQL_MAILDIR_FIELD maildir #MYSQL_QUOTA_FIELD quota #MYSQL_WHERE_CLAUSE server='exemple.domain.tld'
Sécuriser le fichier authmysqlrc
# chmod 400 /etc/courier/authmysqlrc
Il faut redémarrer les services:
# /etc/init.d/courier-authdaemon restart # /etc/init.d/mysql restart # /etc/init.d/postfix restart
Ajouter des utilisateurs à Postfix
Ajouter un domaine
# mysql -u root -p Enter password: mysql> use postfix; mysql> INSERT INTO postfix_virtual_domains VALUES (' ','example.com','maildrop:');
Ajouter une nouvelle adresse mail
mysql> INSERT INTO postfix_users (email,clear,name,homedir,maildir,quota) VALUES ('john@example.com','mypassword','John DOE','/var/mail/vmail/','example.com/john/Maildir/','10000000') ;
Avec cette commande SQL, vous creez une adresse mail “john@example.com” avec le password “mypassword”. Les mails des utilisateurs seront stockés dans /var/mail/vmail/test.com/john/Maildir/. Le quota est 10000000 bytes = 10MB.
Création du repertoire personnel
Nous avons indiqué que les mails seront stockés dans /var/mail/vmail/test.com/john/, il faut donc créer les dossiers.
# su - vmail $ mkdir -p /var/mail/vmail/example.com/john $ maildirmake /var/mail/vmail/example.com/john/Maildir $ maildirmake -q 10000000S /var/mail/vmail/example.com/john/Maildir