Postfix Mysql : Différence entre versions

De Wiki NCad
Aller à : navigation, rechercher
(Comptes mails et utilisateurs)
(Configuration de Postfix)
Ligne 178 : Ligne 178 :
  
 
{{ Box Attention | objet=Si vous avez mis en place un contrôle de l'adresse de l'émetteur en fonction de son login (c.f [[Postfix#Restriction_.C3.A9metteur.2Fsender]], cette partie est donc obligatoire. Le cas échant, le SMTP refusera d'envoyer les mails des utilisateurs locaux. }}
 
{{ Box Attention | objet=Si vous avez mis en place un contrôle de l'adresse de l'émetteur en fonction de son login (c.f [[Postfix#Restriction_.C3.A9metteur.2Fsender]], cette partie est donc obligatoire. Le cas échant, le SMTP refusera d'envoyer les mails des utilisateurs locaux. }}
 +
 +
===  ===
 +
 +
  
 
=== Configuration de Postfix ===
 
=== Configuration de Postfix ===
Ligne 188 : Ligne 192 :
  
 
  smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual-senders.cf
 
  smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual-senders.cf
 +
 +
=== Fichier de configuration ===
 +
 +
* Créer le fichier de configuration '''/etc/postfix/mysql-virtual-senders.cf''' qui permettra d'interroger la table des adresses d'émetteurs autorisés :
 +
 +
user = postfix
 +
password = motdepassebasemysqlpourpostfix
 +
dbname = postfix
 +
hosts = 127.0.0.1
 +
query = SELECT email FROM postfix_senders where username='%s'
  
 
===
 
===

Version du 3 février 2014 à 00:16

Installation

  • Pour fonctionner avec une base de données MySQL, il faut installer les paquets postfix-mysql, libsasl2-modules-sql (module saslauthd) et courier-authlib-mysql (modules courier POP/IMAP) :
ICON Terminal.png

sudo apt-get install postfix-mysql libsasl2-modules-sql

Création de la base de données

  • Création de l'utilisateur mysql postfix avec le mot de passe motdepassebasemysqlpourpostfix et sa base de données nommé postfix avec les droits nécessaires.
ICON Terminal.png

CREATE USER 'postfix'@'%' IDENTIFIED BY 'motdepassebasemysqlpourpostfix';
GRANT USAGE ON * . * TO 'postfix'@'%' IDENTIFIED BY 'motdepassebasemysqlpourpostfix' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `postfix` ;
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'%';

Authentification

Module Saslauthd

  • Postfix utilise le module saslauthd pour l'authentification des utilisateurs qui est basée sur pam. Voici le contenu du fichier de configration /etc/pam.d/smtp :
auth       required     pam_mysql.so user=postfix passwd=motdepassebasemysqlpourpostfix host=127.0.0.1 db=postfix table=postfix_users usercolumn=username passwdcolumn=cleard crypt=0
account    sufficient   pam_mysql.so user=postfix passwd=motdepassebasemysqlpourpostfix host=127.0.0.1 db=postfix table=postfix_users usercolumn=username passwdcolumn=clear crypt=0
  • Redémarrer le service saslauthd :
ICON Terminal.png

sudo service saslauthd restart

Module authdaemonrc pour POP / IMAP

  • Pour activer l'authentification mysql, dans le fichier /etc/courier/authdaemonrc remplacer :
authmodulelist="authpam"
  • Par :
authmodulelist="authmysql"
  • Créer le fichier de connexion à la base de données mysql /etc/courier/authmysqlrc :
MYSQL_SERVER            127.0.0.1
MYSQL_USERNAME          postfix
MYSQL_PASSWORD          motdepassebasemysqlpourpostfix
MYSQL_PORT              0
MYSQL_OPT               0
MYSQL_DATABASE          postfix
MYSQL_USER_TABLE        postfix_users
MYSQL_CRYPT_PWFIELD     crypt
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         5000
MYSQL_GID_FIELD         5000
MYSQL_LOGIN_FIELD       CONCAT(username,'@',domain)
MYSQL_HOME_FIELD        "/home/vmail"
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
  • On redémarre le service courier-authdaemon :
ICON Terminal.png

sudo service courier-authdaemon restart

Configuration de Postfix

Général

  • Pour activer les utilisateurs virtuels et interroger les bases de données adéquates, il faut ajouter les lignes suivantes dans le fichier de configuration /etc/postfix/main.cf de Postfix :
virtual_mailbox_base = / 
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql-virtual-maps.cf
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = virtual

Fichiers de configurations

  • Le fichier de configuration /etc/postfix/mysql-virtual-maps.cf permet de vérifier les utilisateurs virtuels de Postfix :
user = postfix
password = motdepassebasemysqlpourpostfix
dbname = postfix
hosts = 127.0.0.1
query = SELECT maildir FROM postfix_users where CONCAT(username,'@',domain)='%s' and postfix = 'y'
  • Le fichier de configuration mysql-virtual-domains.cf permet de vérifier les domaines locaux de Postfix :
user = postfix
password = motdepassebasemysqlpourpostfix
dbname = postfix
hosts = 127.0.0.1
query = SELECT destination FROM postfix_virtual_domains WHERE domain = '%s'

Comptes mails et utilisateurs

Utilisateur générique vmail

  • Les messages des utilisateurs virtuels seront stockés dans le dossier /var/mail/vmail qui sera crée spécialement à cet effet. On créera aussi l'utilisateur et le groupe vmail qui pourront accéder à ce dossier et ses sous-dossiers.
ICON Terminal.png

groupadd vmail -g 5000
useradd vmail -u 5000 -g 5000
mkdir /var/mail/vmail
chown vmail:vmail /var/mail/vmail
chmod 700 /var/mail/vmail

Création de la Table

  • Maintenant, il faut créer la table contenant les utilisateurs virtuels de Postfix. Cette table contiendra les comptes mails ainsi que leur mot de passe.
CREATE TABLE postfix_users (
 id int(11) unsigned NOT NULL auto_increment,
 username varchar(64) NOT NULL default ,
 domain varchar(64) 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 '5000',
 gid int(11) unsigned NOT NULL default '5000',
 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)
)
  • On créée également la table contenant les noms de domaine locaux (gérés par Postfix).
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)
)
ICON boxWarning.png

Les noms de domaine contenus dans cette table ne devront pas apparaître dans le paramètre mydestination du fichier de configuration /etc/postfix/main.cf de Postfix.

Création d'un utilisateur

  • Nous allons ajouter l'utilisateur cacheln avec le mot de passe cacheln et pour adresse mail cacheln@mail.glx dans la table mysql postfix_users :
INSERT INTO `courriel`.`postfix_users` (
 `id` ,
 `username` ,
 `domain` ,
 `clear` ,
 `crypt` ,
 `name` ,
 `uid` ,
 `gid` ,
 `maildir` ,
 `quota` ,
 `access` ,
 `postfix` ,
 `disablepop3` ,
 `disableimap` ,
 `disablewebmail` ,
 `sharedgroup` ,
 `smtpaccess`
)
VALUES (
 NULL , 'cacheln', 'mail.glx', 'cacheln', , 'Nicolas CACHELOU', '5000', '5000', '/var/mail/vmail/mail.glx/cacheln/', '10000000', 'Y', 'Y', '0', '0', '0', '0', 'Y'
);
  • Nous allons créer le répertoire mail de l'utilisateur :
ICON Terminal.png

mkdir -p /var/mail/vmail/mail.glx/
maildirmake /var/mail/vmail/mail.glx/cacheln
chown vmail:vmail /var/mail/vmail -R
chmod 700 /var/mail/vmail -R

Restriction émetteur / sender

ICON boxWarning.png

Si vous avez mis en place un contrôle de l'adresse de l'émetteur en fonction de son login (c.f Postfix#Restriction_.C3.A9metteur.2Fsender, cette partie est donc obligatoire. Le cas échant, le SMTP refusera d'envoyer les mails des utilisateurs locaux.

Configuration de Postfix

  • Dans le fichier /etc/postfix/main.cf, remplacer :
smtpd_sender_login_maps =hash:/etc/postfix/sender_login
  • Par :
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual-senders.cf

Fichier de configuration

  • Créer le fichier de configuration /etc/postfix/mysql-virtual-senders.cf qui permettra d'interroger la table des adresses d'émetteurs autorisés :
user = postfix
password = motdepassebasemysqlpourpostfix
dbname = postfix
hosts = 127.0.0.1
query = SELECT email FROM postfix_senders where username='%s'

=

Validation

Authentification SMTP

  • On peut valider l'authentification SMTP grâce à la commande suivante :
ICON Terminal.png

sudo testsaslauthd -u cacheln -p cacheln -f /var/spool/postfix/var/run/saslauthd/mux -s smtp 0: OK "Success."

Liens