Serveur Mail Postfix Et Dovecot
Serveur Mail Postfix Et Dovecot
Serveur Mail Postfix Et Dovecot
Sources de la documentation :
https://vorkbaard.nl/installing-a-mailserver-on-debian-8-part-1-introduction/
https://www.tecmint.com/setup-postfix-mail-server-and-dovecot-with-mariadb-
in-centos/
https://www.badsender.com/2014/01/13/delivrabilite-spf-dkim-dmarc/
https://easyengine.io/tutorials/mail/dkim-postfix-ubuntu
https://blog.debugo.fr/serveur-messagerie-complet-postfix-dovecot-ldap-
rspamd/
https://www.laintimes.com/configurer-postfix-en-relay-avec-ovh/
Présentation du projet
Nous souhaitons installer un serveur SMTP Postfix et un serveur IMAP Dovecot.
Nous utiliserons SpamAssassin pour lutter contre les courriers indésirables. Nous
configurerons également notre serveur afin d'être validé et reconnu comme émetteur
de mails valides. Les comptes utilisateurs de notre serveur mail seront consignés soit
dans une base MariaDB, soit dans un serveur OpenLDAP afin de permettre une plus
grande souplesse de configuration.
Cette documentation est destinée à la fois aux personnes souhaitant installer leur
serveur en réseau local ou pour un site Internet. Si vous êtes dans le premier cas,
ignorez les étapes concernant l'installation d'un serveur public.
Pré-requis
Nous allons utiliser une base LAMP pour notre serveur. Pour cela, nous installons les
paquets suivants :
#ServerName www.example.com
Dé-commentez la et replacez le nom de domaine par celui sur lequel vous installez
votre serveur mail :
ServerName example.com
Créez le fichier /etc/apache2/sites-available/thunderbird-
autoconfig.conf comme suit :
<VirtualHost *:80>
ServerName autoconfig.example.com
DocumentRoot /var/www/html/autoconfig/
<Directory /var/www/html/autoconfig/>
Options -Indexes +FollowSymLinks +MultiViews -Includes -ExecCGI
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Activez le site et rechargez la configuration Apache :
a2ensite thunderbird-autoconfig
service apache2 reload
Configurez les entrées suivantes sur le DNS de votre nom de domaine en
remplaçant le domaine et l'IP :
example.com. IN A 1.2.3.4
example.com. IN MX 10 example.com.
autoconfig.example.com IN CNAME example.com.
example.com. IN TXT "v=spf1 a mx -all"
Pour un serveur public
Si votre serveur mail est destiné à être utilisé sur Internet, vous devez disposer d'un
nom de domaine et d'une IP fixe. Assurez-vous que les ports TCP 25, 80, 443, 465
et 993 sont ouverts et que vous pouvez y accéder depuis Internet.
Nous allons installer Let's Encrypt afin d'obtenir un certificat SSL reconnu. Pour cela,
exécutez les commandes suivantes et suivez l'assistant en choisissant le
mode Secure qui redirige tout trafic HTTP sur HTTPS :
Postfix
Serveur SMTP en charge du transfert des mails.
Dovecot
Serveur IMAP en charge de fournir les mails aux clients de messagerie.
SpamAssassin
Filtre anti-spam
ClamAV
Antivirus
OpenDKIM
Outil de génération de la clef DKIM
apt -y install postfix dovecot-core dovecot-imapd dovecot-lmtpd dovecot-
managesieved dovecot-sieve spamassassin spamc clamav-daemon clamav clamsmtp
opendkim opendkim-tools
Lors de l'installation, Postfix vous demande les questions suivantes :
mysql -u root -p
Saisissez les commandes suivantes afin de créer la base de données :
dn: cn=pdubois,ou=Utilisateurs,dc=example,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
cn: Paul Dubois
cn: pdubois
userPassword:: <hash du mot de passe>
sn: pdubois
gidNumber: 1100
homeDirectory: /home/pdubois
uid: pdubois
mail: pdubois@example.com
uidNumber: 1200
Configuration de Postfix
Inscrivez votre domaine dans le fichier /etc/mailname.
Créez l'utilisateur gérant les utilisateurs virtuels et le répertoire stockant les mails :
useradd -d /var/mail -U -u 5000 vmail
mkdir -p /var/mail/vmail/example.com
chown -R vmail:vmail /var/mail/vmail
Éditez le fichier /etc/postfix/main.cf. Nous effectuerons les modifications
suivantes :
myhostname = example.com
Retirez votre domaine du champ mydestination. Il est en effet impossible qu'un
domaine soit affecté à des utilisateurs réels et virtuels à la fois.
smtpd_tls_cert_file=/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/example.com/privkey.pem
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_mailbox_domains = example.com
virtual_mailbox_base = /var/mail/vmail
virtual_gid_maps = static:5000
virtual_uid_maps = static:5000
virtual_minimum_uid = 5000
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_aliases.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_tls_auth_only = yes
# Signature OpenDKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8892
non_smtpd_milters = inet:localhost:8892
# ClamAV
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_client_restrictions =
smtpd_helo_restrictions =
smtpd_sender_restrictions =
content_filter = scan:localhost:10026
Pour une configuration utilisant LDAP, modifiez les lignes suivantes :
virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf
virtual_alias_maps = ldap:/etc/postfix/ldap_virtual_aliases.cf
Modifiez les lignes suivantes dans le fichier /etc/postfix/master.cf en prenant
garde à ce que les options (commençant par -o) doivent être précédées par au
moins un espace :
# Antivirus
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o smtp_data_done_timeout=1200
Un relais SMTP permet de faire transiter les messages émis sur un serveur relais
afin que ces messages soient vus par le serveur destinataire comme émis par le
relais. Cela est utile lorsque votre serveur ne peut être reconnu comme serveur de
confiance (adresse IP publique dynamique, reverse DNS incorrect, etc.). Un compte
valide sur un service mail permettant le relais SMTP sera nécessaire.
relayhost=[mail.servicemail.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
Configurez le compte mail du relais dans le
fichier /etc/postfix/sasl/sasl_passwd :
[mail.servicemail.net]:587 relais-
smtp@servicemail.net:MotDePasseCompteRelaisSMTP
Générez le hash SASL :
postmap /etc/postfix/sasl/sasl_passwd
Configuration avec MariaDB
user = postfix
password = MonMotDePasseBaseDeDonnees
hosts = localhost
dbname = postfix
query = SELECT 1 FROM addresses WHERE email = '%s'
Créez le fichier /etc/postfix/mysql_virtual_aliases.cf et saisissez la
configuration :
user = postfix
password = MonMotDePasseBaseDeDonnees
hosts = localhost
dbname = postfix
query = SELECT 1 FROM aliases WHERE source = '%s'
Testez en saisissant la commande suivante :
postmap -q antoine@example.com
mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
Si vous obtenez 1, la configuration est correcte.
server_host = ldap://127.0.0.1
version = 3
bind = yes
bind_dn = cn=lecteur,dc=example,dc=com
bind_pw = MotDePasseLectureSeule
search_base = ou=Utilisateurs,dc=example,dc=com
scope = sub
query_filter = (&(mail=%s)(objectClass=inetOrgPerson))
result_attribute = mail
Créez le fichier /etc/postfix/ldap_virtual_aliases.cf et saisissez la
configuration :
server_host = ldap://127.0.0.1
version = 3
bind = yes
bind_dn = cn=lecteur,dc=example,dc=com
bind_pw = MotDePasseLectureSeule
search_base = ou=Utilisateurs,dc=example,dc=com
scope = sub
query_filter = (&(mail=%s)(objectClass=alias))
result_attribute = mail
Testez en saisissant les commandes suivantes :
Configuration d'OpenDKIM
Modifiez le fichier /etc/opendkim.conf :
Domain example.com
KeyFile /etc/postfix/dkim/mail.private
Selector mail
SOCKET inet:8892@localhost
Dans le fichier /etc/default/opendkim, modifiez la ligne suivante :
SOCKET="inet:8892@localhost"
Créez et allez dans le dossier accueillant la clef, puis générez la.
mkdir /etc/postfix/dkim/
cd /etc/postfix/dkim/
opendkim-genkey -t -s mail -d example.com
Configurez une entrée TXT sur une seule ligne (ou DKIM) dans votre DNS avec le
contenu du fichier /etc/postfix/dkim/mail.txt.
Configuration de Dovecot
Configurez le serveur Dovecot. Pour cela, nous allons modifier les lignes suivantes
dans le fichier /etc/dovecot/conf.d/10-mail.conf :
mail_location = maildir:/var/mail/vmail/%d/%n
mail_privileged_group = vmail
mail_uid = 5000
mail_gid = 5000
Modifiez le fichier /etc/dovecot/conf.d/10-master.conf :
service imap-login {
inet_listener imap {
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
#unix_listener auth-userdb {
#mode = 0666
#user =
#group =
#}
Modifiez les chemins vers les certificats SSL dans le
fichier /etc/dovecot/conf.d/10-ssl.conf (ajuster les chemins vers les certificats
SSL si nécessaire) :
ssl_cert = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem
Modifiez la configuration du fichier /etc/dovecot/conf.d/15-lda.conf :
protocol lda {
mail_plugins = $mail_plugins sieve
}
Modifiez la configuration du fichier /etc/dovecot/conf.d/15-mailboxes.conf :
mailbox Drafts {
special_use = \Drafts
auto = subscribe
}
mailbox Junk {
special_use = \Junk
auto = subscribe
}
mailbox Trash {
special_use = \Trash
auto = subscribe
}
mailbox Sent {
special_use = \Sent
auto = subscribe
}
Modifiez la configuration du fichier /etc/dovecot/conf.d/20-lmtp.conf :
protocol lmtp {
mail_plugins = $mail_plugins sieve
postmaster_address = antoine@example.com
}
Ajoutez la ligne suivante au fichier /etc/dovecot/conf.d/90-sieve.conf :
sieve_after = /etc/dovecot/sieve/spamfilter.sieve
Générez les paramètres DH :
ssl_dh=</etc/dovecot/dh.pem
Configuration avec MariaDB
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix
password=MonMotDePasseBaseDeDonnees
default_pass_scheme = SHA512-CRYPT
password_query = \
SELECT email as username, passwd AS password FROM addresses WHERE email =
'%u'
user_query = \
SELECT 5000 AS uid, 5000 as gid, email, '/var/mail/vmail/%d/%n' AS home \
FROM addresses WHERE email = '%u'
iterate_query = SELECT email AS user FROM addresses
Configuration avec OpenLDAP
uris = ldap://127.0.0.1
dn = cn=lecteur,dc=example,dc=com
dnpass = MotDePasseLectureSeule
debug_level = 0
auth_bind = no
ldap_version = 3
base = ou=Utilisateurs,dc=example,dc=com
scope = subtree
user_attrs = homeDirectory=home
user_filter = (&(|(uid=%u)(mail=%u))(objectClass=inetOrgPerson))
pass_attrs = mail=user,userPassword=password
pass_filter = (&(|(uid=%u)(mail=%u))(objectClass=inetOrgPerson))
Redémarrez Dovecot et testez la connexion avec Dovecot :
CRON=1
Si, au lieu de mettre les spam en pièce-jointe, vous souhaitez simplement les
étiqueter comme tel, modifiez la ligne suivante dans le
fichier /etc/spamassassin/local.cf :
report_safe 0
Activez le service au démarrage :
echo "Ceci est mon premier mail" | mailx -vvv -s "Hello world"
pdubois@example.com
Si un fichier mail correspondant au message envoyé est présent dans le
répertoire /var/mail/vmail/example.com/pdubois/new, la configuration est
correcte.