Debian – Installer un serveur mail Postfix

juin 2, 2015 11:45 Publié par 2 Comentaires

Bonjour à tous!
Bon autant vous prévenir tout de suite, j’espère que vous n’avez rien prévu la prochaine heure si vous êtes novice ou si vous souhaitez suivre et comprendre l’intégralité de ce tutoriel. Un peu de courage et de bonne volonté et vous serez capable d’installer et de configurer votre propre serveur de messagerie!
Ready?… C’est parti!

On commence par quelques acronymes :

Postfix : le MTA (Mail Transfert Agent)
Dovecot : le LDA (Local Delivery Agent) : serveur IMAP (Internet Messaging Application Protocol) et POP3 (Post Office Protocol).
SASL : Simple Authentification and Secure Layer : Ajouter une authentification entre l’utilisateur et le serveur (MySQL dans notre cas) afin de sécuriser les échanges.

Sommaire

-* Configuration de Debian 7
-* Configuration de l’IP statique
-* Modification du MX
-* Configuration de votre Firewall
-* Configuration du fichier hosts
-* Installation de Postfix
-* Configuration de Postfix
-* Configuration de Mysql
-* Installation et configuration de Dovecot
-* Troubleshooting

Configuration de Debian 7

Installation de base
Nous commençons par installer une Debian 7.8 Minimaliste (netinstall) 64 bits.
Aucune difficulté particulière lors de l’installation, sélectionnez simplement les paquets à télécharger et à installer lorsque vous arrivez à cette étape :

tutodidacte mail1.png
Nous nous contenterons dans un premier temps du serveur SSH et des utilitaires usuels du système.

Configuration de l’IP statique

root@mail:~# nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1

Serveurs DNS

nano /etc/resolv.conf
name server 192.168.1.1
name server 8.8.8.8

Redémarrage des services

/etc/init.d/networking restart

Modification du MX

1. Effacer les MX existant
2. Créer une entrée de Type A avec le nom de votre sous domaine et l’IP de votre serveur mail. Exemple
{mail.mondomaine.com} – Type A – {1.1.1.1}
3. Créer le MX correspondant au domaine :
sousdomaine = {mondomaine.com } – Type MX – {mail.mondomaine.com.}
4. Modifier les CNAME
{mail.mondomaine.com } – CNAME – {mondomaine.com.}

Test du MX :

host -t MX mondomaine.com

Configuration de votre Firewall

Redirigez les requêtes des ports 25 (smtp), 110 (pop) et 143 (IMAP) en TCP sur l’IP privée de votre serveur Mail.

Test DNS:

root@mail:~# host -t MX mondomaine.com
mondomaine.com mail is handled by 10 mail1.mondomaine.com.

Configuration du fichier hosts

nano /etc/hosts
127.0.0.1       localhost
127.0.1.1       mail.mondomaine.com   mail
192.168.1.1   mail.mondomaine.com    mail

Installation de Postfix

apt-get install postfix postfix-mysql mailutils

Choisissez Site Internet 1

tutodidacte mail2.png
Saisissez ensuite le nom de courrier

tutodidacte mail3.png

Configuration de Postfix

Fichier de configuration: /etc/postfix/main.cf

cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
  
postconf -e "mailbox_command ="
postconf -e "myorigin = mondomaine.com"
postconf -e "mydomain = mondomaine.com"
postconf -e "myhostname=mail.mondomain.com
postconf -e "relay_domains = mondomaine1.com, mondomaine2.com"
postconf -e "relayhost = smtp.monfai.com"
postconf -e "mynetworks = 127.0.0.0/8 192.168.1.0/24"

/etc/init.d/postfix restart

La commade mynetworks autorise les pc du réseau local (192.168.1.0) à envoyer des mails via ce serveur. Par défaut, uniquement ce serveur est autorisé à envoyer des mails.

Test avec un telnet en local :

root@mail:/# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mondomaine.com ESMTP Postfix (Debian/GNU)

ehlo localhost
250-mail.mondomaine.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Très bien!

Ajoutons à présent un utilisateur :

adduser pierre
passwd : toto

Après avoir installé mailx (apt-get install mailx) nous allons testé l’envoi d’un mail en ligne de commande avec notre nouvel utilisateur :

echo "test mail" | mail -s "sujet mail" pierre@mondomaine.com

Création de l’utilisateur système vmail pour la gestion des comptes virtuels:
Nous fixerons l’ID du l’utilisateur et du groupe (virtuels) à 5000 :

groupadd vmail -g 5000
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Configuration de Mysql

Si vous souhaitez stocker les mails dans le sous dossier maildir du dossier perso de l’utilisateur, ajoutez la commande postconf -e "home_mailbox = Maildir/"
Base de donnée MySQL:
Nous faisons le choix de confier la gestion des utilisateurs, des domaines et des alias à MySQL (avec l’interface postfixadmin) :

apt-get install  mysql-server php5-mysql 

Création de la base postfix et ajout des droits pour l’utilisateur postfix :

root@DB-MAIL:/# mysql -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* TO 'postfix'@IPSRVPostfix identified by 'mypassword';
flush privileges;

Attention si vous utilisez un serveur MySQL distant car celui-ci autorise uniquement les connexion locales par défaut:

root@DB-MAIL:/etc/mysql# netstat -tnl
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

Commentez les 2 lignes suivantes du fichier /etc/mysql/my.cnf :

#skip-networking (normalement déjà commentée)
# bind-adress = 127.0.0.1

Un peu de sécurité

Nous allons activer le mode SSL dans Apache :

a2enmod ssl

Puis créons le lien vers le site SSL:

ln /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf

Testez l’accès https vers le serveur apache/MySQL :

tutodidacte postfix5.png
Très bien!

Nous allons configurer SASL (pour ajouter une couche d’authentification) afin de sécuriser les échanges entre le serveur Mysql et le serveur Postfix.( Le protocle TLS nous permettra quand à lui de bénéficier d’une connexion sécurisée SSL).

Téléchargeons les paquets nécessaires :

apt-get install libsasl2-modules sasl2-bin

nano /etc/default/saslauthd
START=yes
MECHANISMS="rimap"
MECH_OPTIONS="localhost"
service saslauthd start

Procédez aux installations de phpmyadmin et de postfix :
Installation de phpmyadmin
Debian 7 – installer phpmyadmin
Installation de postfixadmin
Debian 7 – installer Postfixadmin

Création des fichiers pour la connexion de postfix à la base MySQL. Les requêtes pointerons vers les tables crées lors de l’installation de postfixadmin : tables {domain, mailbox} et {alias}.

root@mail:/# nano /etc/postfix/mysql_virtual_mailbox_domains.cf
user =postfix
password = toto
hosts = 127.0.0.1
dbname = postfix
query= SELECT domain FROM domain WHERE domain='%s'

root@mail:/# nano /etc/postfix/mysql_virtual_mailbox_maps.cf
user =postfix
password = toto
hosts = 127.0.0.1
dbname = postfix
query= SELECT maildir FROM mailbox, alias_domain WHERE alias_domain.alias_domain = '%d' AND mailbox.username= concat('%u', '@', alias_domain.target_domain) AND mailbox.active = 1

root@mail:/# nano /etc/postfix/mysql_virtual_alias_maps.cf
user =postfix
password = toto
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' AND alias.address=concat('%u', '@', alias_domain.target_domain) AND alias.active = 1

root@mail:/# nano /etc/postfix/mysql_relay_domains.cf
hosts = 127.0.0.1
user = postfix
password = toto
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 1


postmap -q mondomaine.com mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
postmap -q mondomaine.com mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
postmap -q mondomaine.com mysql:/etc/postfix/mysql_virtual_alias_maps.cf
postmap -q mondomaine.com mysql:/etc/postfix/mysql_relay_domains.cf

Modification des droits :

chgrp postfix /etc/postfix/mysql_virtual_*.cf
chmod 750 /etc/postfix/mysql_virtual_*.cf

Ajoutons le code suivant à la fin du fichier /etc/postfix/main.cf

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
#virtual_mailbox_base = /home/vmail
virtual_transport = dovecot
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf

smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

puis à la fin du fichier /etc/postfix/master.cf

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}

Puis décommenter les lignes correspondant à la configuration du smtps :

smtp      inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  #-o smtpd_sasl_auth_enable=yes
  #-o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Installation et Configuration de Dovecot

apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-lmtpd

Nous pouvons à présent tester l’envoi de mail vers l’extérieur :

echo "test mail" | mail -s "sujet mail" maboiteperso@outlook.com

Vous devez normalement recevoir un mail de root@mondomaine.com (si vous avez lancé cette commande en root) sur votre email perso.

Connexion de Dovecot à MySQL :
Créez le fichier dovect-mysql.conf avec les lignes suivantes :

nano /etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=monmotdepasse
default_pass_scheme = MD5-CRYPT
user_query = SELECT '/home/vmail/%d/%n' as home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u'
password_query = SELECT password FROM mailbox WHERE username = '%u'
nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n

maildir_stat_dirs=yes

namespace inbox {
    inbox = yes
}

mail_uid = 5000
mail_gid = 5000

first_valid_uid = 5000
last_valid_uid = 5000

mail_privileged_group = vmail

nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=mypassword
user_query = SELECT '/home/vmail/%d/%u' as home, 'maildir:/home/vmail/%d/%u' as mail, 5000 AS uid, 5000 AS gid, concat('dirsize:storage=',  quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

password_query = SELECT username as user, password, '/home/vmail/%d/%u' as userdb_home, 'maildir:/home/vmail/%d/%u' as userdb_mail, 5000 as  userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

Création du dossier de log :

touch /var/log/dovecot
chgrp vmail /var/log/dovecot
chmod 660 /var/log/dovecot
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak

Remplacez le fichier dovecot.conf

protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "

mail_privileged_group = vmail
log_path = /var/log/dovecot

disable_plaintext_auth = no
auth_mechanisms = plain

mail_home = /home/vmail/%d/%u
mail_location = maildir:/home/vmail/%d/%n:INDEX=/home/vmail/%d/%n/indexes

protocol imap {
#ssl_listen = *:993
}

protocol pop3 {
}
protocol managesieve {
}
protocol lda {
  postmaster_address = contact@mondomain.com
  mail_plugin_dir = /usr/lib/dovecot/modules/lda
  auth_socket_path = /var/run/dovecot/auth-master
}
auth default {
        userdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
        }
        passdb sql {
        args = /etc/dovecot/dovecot-mysql.conf
        }
 socket listen {
  master {
  path = /var/run/dovecot/auth-master
  mode = 0600
  user = vmail
 }
  client {
  path = /var/spool/postfix/private/auth
  mode = 0660
  user = postfix
  group = postfix
  }
 }
}
dict {
}
plugin {
}
ssl = yes
ssl_cert = </etc/dovecot/private/dovecot.pem
ssl_key = </etc/dovecot/dovecot.pem
service dovecot restart

Testons la connexion IMAP :

telnet localhost imap
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE START TLS AUTH=PLAIN] Dovecot ready.

Yes!!

Rendez vous à présent sur l’interface postfixadmin afin de créer des domaines et utilisateurs virtuels (Virtuels signifiant simplement que les utilisateurs n’ont pas compte Unix sur le serveur postfix).

Troubleshooting

Les problèmes relatifs aux droits mail configurés sont réccurents. Vérifiez notamment les droits suivants :

chmod 600 /etc/dovecot/*.conf
chown vmail /etc/dovecot/*.conf
usermod -g vmail dovecot
usermod -g vmail postfix

Installation de paquets supplémentaires :

apt-get install g++ make libpam0g-dev

Pour aller plus loin :
Sécuriser votre messagerie avec le trio Amavis, ClamAV et Spamassassin :

Postfix – Installer Amavis, SpamAssassin et ClamAV

Merci à tous les courageux qui ont suivi ce tuto jusqu’à la fin!
A bientôt pour de nouveaux tutoriels 🙂

Notes:

  1. dpkg-reconfigure postfix pour plus reconfigurer davantage d’options.

Classés dans :

Cet article a été écrit par admin

2 commentaires

  • Bratock says:

    Bonjour et merci pour ce tuto

    J’ai suivi a la lettre vos indications mais j’ai des erreursdans dovecot

    Voici les erreurs en question :

    doveconf: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:1: ‘imaps’ protocol is no longer necessary, remove it
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:1: ‘pop3s’ protocol is no longer necessary, remove it
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:19: protocol managesieve {} has been replaced by protocol sieve { }
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: add auth_ prefix to all settings inside auth {} and remove the auth {} section completely
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:27: userdb sql {} has been replaced by userdb { driver=sql }
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:30: passdb sql {} has been replaced by passdb { driver=sql }
    [….] Restarting IMAP/POP3 mail server: dovecotdoveconf: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:1: ‘imaps’ protocol is no longer necessary, remove it
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:1: ‘pop3s’ protocol is no longer necessary, remove it
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:19: protocol managesieve {} has been replaced by protocol sieve { }
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: add auth_ prefix to all settings inside auth {} and remove the auth {} section completely
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:27: userdb sql {} has been replaced by userdb { driver=sql }
    doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:30: passdb sql {} has been replaced by passdb { driver=sql }

    Auriez vous une idée pur m’aider svp ?

     
  • admin says:

    Salut,
    Les messages Warning obsolete settings n’empêchent pas à mon sens l’exécution de Dovecot. Certains termes sont même remplacés automatiquement par Dovecot. Quels dysfonctionnements constatez vous?

     

Laisser un commentaire