IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Installation complète d'un serveur web sous Debian


précédentsommairesuivant

VI. Configuration de Postfix

VI-A. Introduction

Que manque-t-il de crucial sur notre serveur web ? Un MTA. En effet, actuellement, nous pouvons accéder à notre site, le mettre à jour, et y exécuter des pages web. Il faut maintenant pouvoir envoyer et recevoir des mails.

C'est le rôle de Postfix. Un MTA (Mail Transfert Agent) très connu, très performant, et assez simple à mettre en œuvre. Une fois de plus, son choix a été décisif vis-à-vis de sa possibilité à gérer les utilisateurs virtuels. Chacun de nos sites sera désireux d'avoir un ou plusieurs mails. Ce système nous permettra de proposer un nombre infini de mails pour chaque site, sans risque de conflit entre utilisateurs.

VI-B. Création de l'utilisateur

On commence par rajouter l'utilisateur et le groupe qui gérera postfix.

Si vous désirez placer vos comptes mails dans le répertoire /home, pour des raisons de place notamment, pensez à modifier les fichiers en conséquence, de sorte qu'ils pointent vers /home/vmail par exemple (attention à le spécifier lors de la création du groupe !).

 
Sélectionnez
# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m

VI-C. 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
Sélectionnez
bind-address            = 127.0.0.1
# skip-networking

On se connecte à mysql en root, afin de le configurer :

 
Sélectionnez
# mysql -p

On entre le mot de passe lorsque le shell nous le demande. On va maintenant ajouter nos paramètres Mysql :

 
Sélectionnez
> create database postfix;
 
Sélectionnez
> use postfix;
 
Sélectionnez
> 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';

Si vous désirez utiliser le serveur smtp sécurisé, celui-ci est configuré en mode authentifié, pour éviter le spam. Cependant, je n'ai pas patché postfix, n'ayant pas eu la possibilité de le faire sur mes serveurs. Si l'un de vous l'a fait, qu'il n'hésite surtout pas à me faire parvenir la marche à suivre, et les différentes informations le concernant. En conséquence, si vous utilisez le smtp, il est nécessaire de rajouter un champ password_smtp dont le mot de passe sera enregistré en clair dans la base de données (vous pouvez le faire directement via phpmyadmin). L'enregistrement en clair est obligatoire, car le smtp de postfix non patché n'autorise que les mots de passe en clair. À vous de bien protéger vos données !

 
Sélectionnez
> 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';
 
Sélectionnez
> 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é).

 
Sélectionnez
> GRANT SELECT ON `postfix`.* TO 'postfix'@'%' IDENTIFIED BY 'MONMOTDEPASSE';

On applique les paramètres :

 
Sélectionnez
> FLUSH PRIVILEGES;

Et on termine notre session mysql.

 
Sélectionnez
> exit;

VI-D. 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
Sélectionnez
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

# SASL
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key

# SASL 2nd version
smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_non_fqdn_hostname,
   reject_non_fqdn_sender,
   reject_non_fqdn_recipient,
   reject_unauth_destination,
   reject_unauth_pipelining,
   reject_invalid_hostname,
   reject_rbl_client opm.blitzed.org,
   reject_rbl_client list.dsbl.org,
   reject_rbl_client bl.spamcop.net,
   reject_rbl_client sbl-xbl.spamhaus.org
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous 

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
Sélectionnez
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
Sélectionnez
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
Sélectionnez
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
Sélectionnez
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
Sélectionnez
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 :

 
Sélectionnez
# chgrp postfix /etc/postfix/mysql-virtual_*.cf
# chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf

Un redémarrage de Postfix, et un test de la configuration :

 
Sélectionnez
# /etc/init.d/postfix restart
# postfix check

VI-E. Configurer le SMTP

 
Sélectionnez
# aptitude install libsasl2 libsasl2-modules libsasl2-modules-sql openssl

On se place dans le répertoire de Postfix, afin de créer les certificats autosignés

 
Sélectionnez
# cd /etc./postfix

On génère les certificats (il suffit de répondre aux questions! en mettant dans « common name » le nom du serveur)

 
Sélectionnez
# openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365  -x509

On sécurise les fichiers du certificat

 
Sélectionnez
# chmod 600 smtpd.cert smtpd.key

Et créer le fichier /etc/postfix/sasl/smtpd.conf pour la connexion sql

 
Sélectionnez
# nano /etc/postfix/sasl/smtpd.conf
 
Sélectionnez
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: pass
sql_database: postfix
sql_select: select password_smtp from mailbox where email='%u@%r'

VI-F. Configuration du courrier

 
Sélectionnez
# aptitude install courier-base courier-authdaemon courier-libauth-mysql courier-imap courier-pop

À 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
Sélectionnez
/etc./courier/authdaemonrc

Et on modifie la ligne qui commence par authmodulelist.

 
Sélectionnez
authmodulelist="authmysql"

Je remplace le contenu du fichier /etc./courier/authmysqlrc par ce qui suit :

 
Sélectionnez
# >/etc./courier/authmysqlrc
# nano /etc./courier/authmysqlrc
 
Sélectionnez
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 daemons que l'on a paramétrés :

 
Sélectionnez
# /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épertoire ! De plus, il est nécessaire de recréer les alias de bases de données. Pour cela, placez vous dans le répertoire /etc. et tapez la commande

 
Sélectionnez
newaliases

VI-G. Test du serveur

On commence par installer les outils :

 
Sélectionnez
# aptitude install mailutils

On teste que notre domaine est bien configuré dans bind pour accepter notre serveur mail :

 
Sélectionnez
# 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.

 
Sélectionnez
# mysql -u root -p
==> On entre le mot de passe
> 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) :

 
Sélectionnez
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).

 
Sélectionnez
pop: mail.nom_domaine.com
smtp: votre FAI
login: user@nom_domaine.com
pass: *****

VI-H. 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 :

 
Sélectionnez
# nano /var/log/mail.log

(1)


précédentsommairesuivant
Je tiens tout particulièrement à remercier Fred036 pour son aide, et la mise à disposition de son tutoriel, qui m'a bien aidé, et dont je me suis largement inspiré pour ce tutoriel sur Postfix. Je tiens également à remercier tout particulièrement Julien de fbtech.com pour son aide dans la mise en place du smtp, qui m'a posé de relatifs problèmes !

Copyright © 2007 Onet. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.