====== 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 ===== Pour plus d'information sur l'installation de base d'un serveur Postfix, veuillez consulter l'article suivant [[serveurs:Postfix]] # 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