Debian – Installer un serveur mail Postfix
juin 2, 2015 11:45 2 ComentairesBonjour à 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 :
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
Saisissez ensuite le nom de courrier
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 :
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:
dpkg-reconfigure postfix
pour plus reconfigurer davantage d’options. ↩
Classés dans :Debian
Cet article a été écrit par admin
2 commentaires
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 ?
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?