Configurer un serveur mail
Posté le dim. 15 novembre 2015
Installation d’un serveur mail complet et à jour sous debian jessie (8.2).
Configuration des DNS
Pour commencer nous allons créer des entrées DNS.
Nous créons un MX pour les mails avec une priorité de 1, un sous domaine “mail” qui pointe vers l’adresse ipv4 de votre serveur, d’un sous domaine webmail qui pointe sur le sous domaine mail et d’un enregistrement SPF :
votredomaine.com. MX 1 mail.votredomaine.com.
mail.votredomaine.com. A ip.v4.du.serveur
webmail.votredomaine.com. CNAME mail.votredomaine.com.
votredomain.com. SPF "v=spf1 ip4:ip.v4.du.server ~all"
Installation des paquets
Maintenant installons postfix dovecot-imapd et sasl2-bin :
apt-get install postfix dovecot-imapd sasl2-bin php5-curl
Configurer le serveur de messagerie comme “Site Internet”, puis en nom de courrier indiquer “mail.votredomaine.com”.
Configuration de dovecot
Créer un dossier ssl dans dovecot :
mkdir /etc/dovecot/ssl && cd /etc/dovecot/ssl
Créer un certificat ssl :
openssl req -new -newkey rsa:2048 -nodes -keyout certificat.key -out certificat.csr
chmod 600 certificat.key
⚠️ À ne pas reproduire : sans ce
chmod, la clé privée TLS reste lisible par tout compte local (umask 022 → droits 644 par défaut). Restreins-la à 600 dès sa création.
Puis répondre aux différentes questions pour ma part j’ai répondu :
FR
(vide)
Paris
votredomaine
IT
mail.votredomaine.com
contact@votredomaine.com
(vide)
(vide)
Ensuite :
openssl x509 -req -days 365 -in certificat.csr -signkey certificat.key -out certificat.crt
⚠️ À ne pas reproduire : un certificat auto-signé ne rassure ni les clients mail ni les serveurs distants et ne se renouvelle pas tout seul. Pour un serveur exposé, préfère Let’s Encrypt via
certbotavec un renouvellement automatique.
Puis :
cat certificat.key certificat.crt > certificat.pem
Créer le groupe et l’utilisateur vmail :
groupadd -g 5000 vmail
useradd -m -d /var/vmail -s /bin/false -u 5000 -g vmail vmail
Ajouter dans /etc/dovecot/dovecot.conf :
listen = ip.v4.du.server
Editer /etc/dovecot/conf.d/10-auth.conf :
disable_plaintext_auth = yes
auth_username_format = %Lu
#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext
Editer /etc/dovecot/conf.d/10-logging.conf :
auth_verbose = yes
mail_debug = yes
Editer /etc/dovecot/conf.d/10-master.conf :
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
Editer /etc/dovecot/conf.d/10-ssl.conf :
ssl = required
ssl_cert = </etc/dovecot/ssl/certificat.pem
ssl_key = </etc/dovecot/ssl/certificat.key
Editer /etc/dovecot/conf.d/15-mailboxes.conf :
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
#mailbox "Sent Messages" {
# special_use = \Sent
#}
Editer /etc/dovecot/conf.d/auth-passwdfile.conf.ext :
passdb {
driver = passwd-file
args = scheme=SHA512-CRYPT username_format=%u /etc/dovecot/users
}
⚠️ À ne pas reproduire : j’avais mis
scheme=MD5: le MD5 brut non salé se casse en rainbow table. Utilisedoveadm pw -s SHA512-CRYPTpour générer les hash des comptes.
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/users
default_fields = uid=5000 gid=5000 home=/var/vmail/%d mail=maildir:~/%u
}
Créer le fichier /etc/dovecot/users :
touch /etc/dovecot/users
Puis pour chaque mail créer un enregistrement :
adresse@votredomaine.com:motdepassemd5:::::::
Le format est le suivant :
| Champ | Valeur |
|---|---|
| Adresse email | |
| Mot de passe (MD5) | motdepassemd5 |
| uid | déjà défini dans auth-passwdfile |
| gid | déjà défini dans auth-passwdfile |
| home directory | déjà défini dans auth-passwdfile |
| mail directory | déjà défini dans auth-passwdfile |
Tester votre utilisateur grâce à la commande :
doveadm user adresse@votredomaine.com
Ce qui devrait afficher :
field value
uid 5000
gid 5000
home /var/vmail/votredomaine.com
mail maildir:~/adresse@votredomaine.com
Démarrer dovecot :
/etc/init.d/dovecot start
Tester la connexion :
openssl s_client -connect ip.v4.du.server:993
Si vous avez “* OK [CAPABILITY …] Dovecot ready. Vous pouvez vous authentifier :
. LOGIN adresse@votredomaine.com motdepasseenclair
C’est fini pour dovecot.
Configuration de sasl
Editer /etc/default/saslauthd :
START=yes
OPTIONS="-m /var/spool/postfix/var/run/saslauthd"
Puis lancer :
/etc/init.d/saslauthd start
C’est fini pour sasl
Configuration de postfix
Editer /etc/postfix/main.cf ::
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_tls_cert_file=/etc/dovecot/ssl/certificat.pem
smtpd_tls_key_file=/etc/dovecot/ssl/certificat.key
mynetworks = 127.0.0.0/8 ip.v4.du.server
virtual_mailbox_domains = votredomaine.com, autredomaine.com
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual_alias
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_helo_restrictions = reject_unknown_helo_hostname
smtpd_sender_restrictions = permit_sasl_authenticated reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination
smtpd_enforce_tls = no
smtpd_tls_auth_only = yes
smtpd_tls_ask_ccert = no
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
tls_random_source = dev:/dev/urandom
⚠️ À ne pas reproduire : j’avais mis
smtpd_tls_auth_only = no; avec cette valeur, les identifiants SASL peuvent transiter en clair sur le port 25 ; l’auth ne doit passer qu’en chiffré (submission 587 / smtps 465). Lesmtpd_tls_mandatory_protocolsverrouille en plus un plancher TLS moderne en excluant SSLv2/SSLv3.
Créer /etc/postfix/virtual_alias :
touch /etc/postfix/virtual_alias
Pour créer un alias, éditer /etc/postfix/virtual_alias :
alias@votredomaine.com destination@votredomaine.com
Créer /etc/postfix/virtual_domains :
touch /etc/postfix/virtual_domains
Pour gérer vos domaines, éditer /etc/postfix/virtual_domains :
votredomaine.com OK
votredeuxiemedomaine.com OK
Créer /etc/postfix/virtual_mailbox :
touch /etc/postfix/virtual_mailbox
Pour créer un compte mail, éditer /etc/postfix/virtual_mailbox :
email@votredomaine.com votredomaine.com/email@votredomaine.com/
linus@torvald.com torvald.com/linus@torvald.com/
N’oubliez pas lors de la création de nouveaux comptes mail d’éditer /etc/dovecot/users ;-)
Maintenant il faut dire à postfix que nous avons modifié nos fichiers virtuels :
postmap /etc/postfix/virtual_alias
postmap /etc/postfix/virtual_domains
postmap /etc/postfix/virtual_mailbox
Editer /etc/postfix/master.cf :
smtp inet n - - - - smtpd -v
-o smtpd_tls_cert_file=/etc/dovecot/ssl/certificat.pem
-o smtpd_tls_key_file=/etc/dovecot/ssl/certificat.key
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
urd inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
smtps inet n - - - - smtpd -v
-o smtpd_tls_wrappermode=yes
-o smtpd_tls_cert_file=/etc/dovecot/ssl/certificat.pem
-o smtpd_tls_key_file=/etc/dovecot/ssl/certificat.key
Puis redémarrer postfix :
/etc/init.d/postfix restart
Fin de la configuration de postfix.
Vous pouvez maintenant tester votre serveur mail ainsi que la qualité de votre serveur sur le site http://www.mail-tester.com
Installation d’un webmail rainloop
Créer un dossier pour votre webmail :
mkdir -p /var/www/webmail/public && cd /var/www/webmail/public
Télécharger rainloop :
wget http://repository.rainloop.net/v2/webmail/rainloop-community-latest.zip
Décompresser rainloop :
unzip rainloop*.zip && rm -rf rainloop*.zip
Modifier les droits :
chown -R www-data:www-data /var/www/webmail
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
Créer un vhost pour apache dans /etc/apache2/site-enabled/001-webmail.domain.com.conf :
<VirtualHost *:80>
ServerAdmin contact@domain.com
ServerName mail.domain.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerAdmin contact@domain.com
ServerName mail.domain.com
DocumentRoot /var/www/webmail/public
<Directory /var/www/webmail/public>
Options FollowSymLinks
#Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<Directory /var/www/webmail/public/data>
Options -FollowSymLinks
AllowOverride None
Order allow,deny
Deny from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/dovecot/ssl/certificat.crt
SSLCertificateKeyFile /etc/dovecot/ssl/certificat.key
ErrorLog ${APACHE_LOG_DIR}/webmail_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/webmail_access.log combined
</VirtualHost>
⚠️ À ne pas reproduire : un webmail servi en HTTP (port 80) fait circuler les identifiants en clair. Sers-le uniquement en HTTPS (443) et redirige tout le trafic 80 vers 443, comme ci-dessus.
N’oubliez pas de redémarrer apache :
/etc/init.d/apache2 restart
Pour configurer rainloop se rendre sur : http://mail.domain.com/?admin
| Login | admin |
|---|---|
| Password | 12345 |
⚠️ À ne pas reproduire : ce login/mot de passe par défaut est connu de tout le monde. Change-le avant toute exposition publique du serveur, et restreins l’accès à
/?adminpar IP ou par Basic Auth en plus du mot de passe.
Changer la langue et votre mot de passe (dans security).
Puis dans domains configurez votre nom de domaine en cliquant sur + Add domain
| Name | domaine.com |
|---|---|
| IMAP | |
| Server | mail.domain.com |
| Secure | SSL/TLS |
| SMTP | |
|---|---|
| Server | mail.domain.com |
| Secure | SSL/TLS |
Puis + Add
Je supprime tous les autres domaines (gmail etc…)
Ensuite j’active les plugins, et les packages : X-Originating-IP, Black list et White list.
Maintenant rendez-vous sur : http://mail.domain.com et identifiez-vous avec votre login et mot de passe.
Commentaires