LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


serveurs:postfix-mysql

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
serveurs/postfix-mysql.txt · Dernière modification : 2018/11/17 12:54 de 127.0.0.1