03/08/2017 29/12/2017 Tetsumaki Linuxarcdebiandkimdmarcdovecotpostfixrspamdsievespfstretch
Vous apprendrez ici comment installer une solution mail complète avec des utilisateurs virtuels MySQL sous Debian 9 Stretch, à savoir qu’il est aussi possible d’utiliser SQLite ou pgSQL.
Rspamd permettra de signer les emails sortants avec DKIM et ARC afin que vous ne vous retrouviez pas dans les spams et de vérifier les emails entrants grâce à son filtrage bayésien mais aussi Fuzzy check, SPF, DKIM, DMARC, ARC, DNSBL et autres.
Les champs SPF et DMARC participeront à ne pas se retrouver dans les spams, ou pire, ignoré.
Nous utiliserons les logiciels suivants :
- Postfix
- Dovecot
- Sieve
- Rspamd
Pour la gestion des utilisateurs virtuels :
- PostfixAdmin : Seule la configuration sera expliquée ici mais pour l’installation (documentation officielle) je conseille l’utilisation de la dernière version tar.gz disponible sur GitHub.
Dans ce guide, nous travaillerons avec la configuration suivante :
- Domaine : domain.tld
- IPv4 du serveur : x.x.x.x
- IPv6 du serveur : xxxx:xxxx:xx:xxxx::1
- Courrier entrant : imap.domain.tld sur port 993 (imaps)
- Courrier sortant : smtp.domain.tld sur port 587 (submission)
- Compte courrier : mail@domain.tld
- Certificats : Let’s Encrypt
On peut commencer.
- Pré-requis
- Configuration des champs DNS
- Génération des certificats Let’s Encrypt
- Modification des dépôts APT
- Modification du fichier hosts
- Création de la base MySQL
- Configuration de PostfixAdmin
- Création d’un compte mail virtuel
- Installation de Postfix
- Installation de Dovecot
- Installation de Sieve
- Installation de Rspamd
- Configuration du champ DMARC
- Configuration du champ SPF
- Valider son installation
- Conclusion
- Références et remerciements
1. Pré-requis
- Nginx (installation conseillé depuis les debian-backports) : servira pour la WebUi Rspamd ainsi que pour PostfixAdmin
- MariaDB : servira à héberger vos utilisateurs virtuels depuis PostfixAdmin
- PHP-FPM : utilisé par PostfixAdmin
- Posséder un nom de domaine domain.tld (ici chez Gandi)
2. Configuration des champs DNS
Depuis l’interface de votre registar, qui donne pour Gandi :
@ 86400 IN A x.x.x.x @ 86400 IN MX 1 smtp.domain.tld. imap 86400 IN A x.x.x.x smtp 86400 IN A x.x.x.x
- Ligne 1 : domain.tld pointe vers x.x.x.x (A = IPv4)
- Ligne 2 : Un mail arrivant vers domain.tld sera acheminé vers smtp.domain.tld (ne pas oublier le point en fin de ligne)
- Ligne 3 : imap.domain.tld pointe vers x.x.x.x (A = IPv4)
- Ligne 4 : smtp.domain.tld pointe vers x.x.x.x (A = IPv4)
Si vous souhaitez utiliser IPv6 (AAAA) en plus de IPv4 (A), il suffira d’ajouter des champs AAAA :
@ 86400 IN A x.x.x.x @ 86400 IN MX 1 smtp.domain.tld. imap 86400 IN A x.x.x.x imap 86400 IN AAAA xxxx:xxxx:xx:xxxx::1 smtp 86400 IN A x.x.x.x smtp 86400 IN AAAA xxxx:xxxx:xx:xxxx::1
3. Génération des certificats Let’s Encrypt
La génération des certificats ne sera pas expliquée mais vous pouvez suivre ce guide si vous êtes chez Gandi.
Quoi qu’il en soit, je préconise l’utilisation du client acme.sh mais vous pouvez aussi utiliser certbot ou alors le client de votre choix sur cette liste.
4. Modification des dépôts APT
Vous devrez ajouter le dépôt rspamd en suivant le guide officiel pour Debian.
5. Modification du fichier hosts
Modification du fichier /etc/hosts afin d’ajouter les domaines à 127.0.0.1 :
127.0.0.1 localhost domain.tld imap.domain.tld smtp.domain.tld
6. Création de la base MySQL
Création d’une base postfix et d’un utilisateur postfix ayant tous les privilèges sur la base :
[root@serveur ~]$ mysql -u root -p
La requête :
CREATE DATABASE postfix; CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'CHANGEME'; GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost'; FLUSH PRIVILEGES;
7. Configuration de PostfixAdmin
Vous n’avez plus qu’à créer le fichier config.local.php dans le répertoire de PostfixAdmin :
<?php $CONF['configured'] = true; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'CHANGEME'; $CONF['database_name'] = 'postfix'; $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'NO'; $CONF['fetchmail'] = 'NO'; ?>
Rendez-vous sur le setup.php de PostfixAdmin depuis votre navigateur afin d’initialiser les tables et créer votre password d’admin que vous ajouterez dans config.local.php :
$CONF['setup_password'] = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
Si vous avez ce message d’erreur lors de l’accès à setup.php : ERROR: the templates_c directory doesn’t exist or isn’t writeable for the webserver :
[root@serveur ?]$ mkdir templates_c
[root@serveur ?]
$ chown www-data: templates_c/
8. Création d’un compte mail virtuel
Depuis l’interface d’administration de PostfixAdmin, vous devez ajouter un nouveau domaine puis un nouveau compte courrier.
Nous prendrons ici comme exemple :
- Domaine : domain.tld
- Compte courrier : mail@domain.tld
9. Installation de Postfix
Installation des paquets :
[root@serveur ~]$ apt install postfix postfix-mysql postfix-pcre libsasl2-modules libsasl2-modules-sql
Vous compléterez les options comme ceci :
- Configuration type du serveur de messagerie : Site Internet
- Nom de courrier : domain.tld
Ajout de l’utilisateur postfix dans le groupe sasl :
[root@serveur ~]$ adduser postfix sasl
Création de l’utilisateur vmail et du groupe vmail ainsi que du répertoire de stockage des emails :
[root@serveur ~]$ groupadd -g 5000 vmail
[root@serveur ~]
$ useradd -M -s /sbin/nologin -u 5000 -g vmail -d /var/vmail vmail
[root@serveur ~]
$ mkdir /var/vmail
[root@serveur ~]
$ chown vmail: /var/vmail/
Pour commencer, on va épurer le fichier /etc/postfix/main.cf afin de mieux nous y retrouver :
alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no compatibility_level = 2 mailbox_size_limit = 0 mydestination = smtp.domain.tld, localhost myhostname = smtp.domain.tld mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = smtp.domain.tld myorigin = smtp.domain.tld readme_directory = no recipient_delimiter = + smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls=yes
Puis on va compléter, sécuriser au mieux TLS, utiliser LMTP et Rspamd, vous devrez adapter et comprendre cette configuration :
alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no broken_sasl_auth_clients = yes compatibility_level = 2 header_checks = pcre:/etc/postfix/header_checks html_directory = no readme_directory = no mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m "${EXTENSION}" mailbox_size_limit = 0 message_size_limit = 104857600 mydestination = smtp.domain.tld, localhost mydomain = domain.tld myhostname = smtp.domain.tld mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = smtp.domain.tld recipient_delimiter = + default_destination_concurrency_failed_cohort_limit = 10 default_destination_concurrency_limit = 1 default_destination_rate_delay = 3s default_destination_recipient_limit = 2 smtp_tls_ciphers = high smtpd_tls_ciphers = high smtp_tls_fingerprint_digest = sha1 smtpd_tls_fingerprint_digest = sha1 smtp_tls_loglevel = 1 smtpd_tls_loglevel = 1 smtp_tls_mandatory_ciphers = high smtp_tls_security_level = may smtpd_tls_security_level = may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_helo_required = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_invalid_hostname, reject_unknown_recipient_domain, reject_unauth_destination, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_pipelining smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes smtpd_sasl_path = private/auth smtpd_sasl_type = dovecot smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_tls_auth_only = yes smtpd_tls_CAfile = /etc/ssl/certs/domain.tld-chain.pem smtpd_tls_cert_file = /etc/ssl/certs/domain.tld-cert.pem smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem smtpd_tls_key_file = /etc/ssl/private/domain.tld-privkey.key smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, 3DES, MD5, PSK smtpd_tls_mandatory_ciphers = high smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls=yes strict_rfc821_envelopes = yes tls_high_cipherlist = ECDH+aRSA+AES256:ECDH+aRSA+AES128:AES256-SHA:DES-CBC3-SHA tls_preempt_cipherlist = yes smtpd_milters = inet:localhost:11332 milter_default_action = accept milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen} milter_protocol = 6 virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_gid_maps = static:5000 virtual_uid_maps = static:5000 virtual_mailbox_base = /var/vmail virtual_mailbox_limit = 0 virtual_transport = lmtp:unix:private/dovecot-lmtp
Si vous ne voulez ou pouvez pas utiliser IPv6, vous devrez ajouter ceci :
inet_protocols = ipv4
Création du fichier /etc/postfix/header_checks :
/^Received:/ IGNORE /^User-Agent:/ IGNORE /^X-Originating-IP:/ IGNORE
Cela permettra aux emails sortant d’avoir des informations sensibles supprimées du header, par exemple votre client (User-Agent) et votre adresse IP (X-Originating-IP).
Attention à ne pas supprimer certains éléments si vous ne souhaitez pas atterrir dans les spams en dégradant votre note calculée par les anti-spams (SpamAssassin, Rspamd), il est par exemple déconseillé de supprimer Message-ID.
Génération des paramètres Diffie-Hellman avec une clé de 2048 bits :
[root@serveur ~]$ openssl dhparam -out /etc/postfix/dh2048.pem 2048
Si vous voulez utiliser un relay pour envoyer vos emails, vous devrez ajouter ceci et l’adapter, dans mon exemple j’utilise un relay gandi :
relayhost = [relay.mail.gandi.net]:587 smtp_sasl_auth_enable = yes smtp_sasl_mechanism_filter = plain, login smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_use_tls = yes
Créer le fichier /etc/postfix/sasl_passwd :
[relay.mail.gandi.net]:587 mail@domainrelay.tld:password
Puis générer le fichier /etc/postfix/sasl_passwd.db avec postmap :
[root@serveur ~]$ postmap /etc/postfix/sasl_passwd
Création du fichier /etc/postfix/mysql_virtual_mailbox_domains.cf :
hosts = localhost user = postfix password = CHANGEME dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx=0 and active=1
Création du fichier /etc/postfix/mysql_virtual_mailbox_maps.cf :
hosts = localhost user = postfix password = CHANGEME dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active=1
Création du fichier /etc/postfix/mysql_virtual_alias_maps.cf :
hosts = localhost user = postfix password = CHANGEME dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active=1
Activation du port submission (587) dans le fichier /etc/postfix/master.cf, le port smtps (465) n’est volontairement pas activé :
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_reject_unlisted_recipient=no -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
10. Installation de Dovecot
Installation des paquets, dovecot-pop3d n’est volontairement pas installé :
[root@serveur ~]$ apt install dovecot-imapd dovecot-mysql dovecot-lmtpd
Modification du fichier /etc/dovecot/dovecot-sql.conf.ext :
driver = mysql connect = host=localhost dbname=postfix user=postfix password=CHANGEME default_pass_scheme = SHA512-CRYPT user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' 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, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1' iterate_query = SELECT username as user FROM mailbox
Modification du fichier /etc/dovecot/conf.d/10-auth.conf :
disable_plaintext_auth = no auth_mechanisms = plain login !include auth-sql.conf.ext
Modification du fichier /etc/dovecot/conf.d/10-mail.conf :
mail_location = maildir:/var/vmail/%d/%n namespace inbox { inbox = yes }
Modification du fichier /etc/dovecot/conf.d/10-ssl.conf :
ssl = required ssl_cert = </etc/ssl/certs/domain.tld-cert.pem ssl_key = </etc/ssl/private/domain.tld-privkey.key ssl_ca = </etc/ssl/certs/domain.tld-chain.pem ssl_dh_parameters_length = 2048 ssl_protocols = !SSLv3 ssl_cipher_list = ALL:!LOW:!SSLv3:!aNULL:!eNULL:!EXP:!DES:!RC4:!3DES:!MD5:!PS ssl_prefer_server_ciphers = yes
Modification du fichier /etc/dovecot/conf.d/10-master.conf (vous remarquerez le port = 0 dans le service imap-login afin de désactiver ce protocole, mettez port = 143 si vous souhaitez le conserver) :
service imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0666 user = postfix group = postfix } } service imap { } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } } service auth-worker { user = vmail } service dict { unix_listener dict { mode = 0666 user = vmail group = vmail } }
Attention, à partir de la version 2.3.0 de Dovecot (pas encore disponible sur Debian Stretch au moment où j’écris), vous devrez générer des paramètres Diffie-Hellman, ici avec une clé de 4096 bits :
[root@serveur ~]$ openssl dhparam -out /etc/dovecot/dh4096.pem 4096
Et modifier le fichier /etc/dovecot/conf.d/10-ssl.conf comme ceci :
ssl = required ssl_cert = </etc/ssl/certs/domain.tld-cert.pem ssl_key = </etc/ssl/private/domain.tld-privkey.key ssl_ca = </etc/ssl/certs/domain.tld-chain.pem ssl_dh = </etc/dovecot/dh4096.pem ssl_protocols = !SSLv3 ssl_min_protocol = TLSv1 ssl_cipher_list = ALL:!LOW:!SSLv3:!aNULL:!eNULL:!EXP:!DES:!RC4:!3DES:!MD5:!PS ssl_prefer_server_ciphers = yes
Ce guide sera raccourci lorsque la version 2.3.0 de Dovecot sera disponible sur les dépôts Debian Stretch.
11. Installation de Sieve
Installation des paquets :
[root@serveur ~]$ apt install dovecot-sieve dovecot-managesieved
Modification du fichier /etc/dovecot/conf.d/20-lmtp.conf :
protocol lmtp { mail_plugins = $mail_plugins sieve }
Modification du fichier /etc/dovecot/conf.d/90-sieve.conf :
plugin { sieve = /var/vmail/%d/%n/.dovecot.sieve }
Création de ma première règle pour la boite email@domain.tld :
[root@serveur ~]$ vim /var/vmail/domain.tld/email/.dovecot.sieve
La règle parle d’elle-même :
require "fileinto"; if header :is "X-Spam" "Yes" { fileinto "Junk"; stop; }
Je n’oublie pas de modifier les permissions du fichier :
[root@serveur ~]$ chown vmail: /var/vmail/domain.tld/email/.dovecot.sieve
12. Installation de Rspamd
Installation du paquet :
[root@serveur ~]$ apt install rspamd
Génération des clés DKIM et ARC :
[root@serveur ~]$ rspamadm dkim_keygen -s 'dkim' -d domain.tld
si vous le souhaitez, vous pouvez utiliser une clé différente pour ARC et DKIM.
Cela devrait vous retourner votre clé privée ainsi que l’enregistrement DNS à ajouter au niveau de votre registar :
-----BEGIN PRIVATE KEY----- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJw8Kj9Lnujn7ZJM fCNtGkOh5ZLBhk4qz8KldARmvIBcVFd5+Qi3aHNVvHvUPSloWPTLWFuQo0SvEU7q SFunwNySiO6MhIgA80TyCdAI5ACEWnCV32bnwXflghSiyqKufOeE+MTaTVXoU4XE Gsg6IHnFb9mSFNnD+B0o5+0wKJTtAgMBAAECgYA4g/8YVGeQgs1KncZOHlpg2sCr /LtzrULoe2djbDKGEGAmIKY4Q/hRuFLtTFIvl2KOcrxsqv6Uiuus60zvcthtoRZP 1HBYVCTTS/l9Kygos19ppefUV8excpHjwLP4shlnXf6LQPiTh30wQdLSwHOPUudD 8UYmfExj5n7HKyDuoQJBAMnYhIHMmGm4a93+hqG0LNzEVIlkTMOf2ogZIXphoJh/ KTc6txfj3Fr7oT6XgEDahgZ+WGDcp5xOmP5cwD7mZLUCQQDGJvB/JWGV0Eibey3h q6/lIvcHLzfn8Kmj0sWJ4WKwQejFFp7PYgH1QqTafD6/s/3DClqJ4o49W5IQqcKy bopZAkArV9Q0bzO3WAPJutM8PA16JqqkiiY1x8jMeuEGf5pVxNCb7H7OoX57Bxe7 8hp3UrV/BXiC7D8NwI736ADcQOsVAkBXtxcRAagwHFJ32VBXLJwhj5fQq1tRJhzC M2RUg9we8B4tWLUWUmlRe53kRcm1LOUxeJzZmtuiV63SCIPyXrKJAkBTfdpcdQ74 XoRT5qF8raJuA/jS0mbI7EF/vTLyJebkATLnd3ZdekG/lO2h0ORtz5zepifdrNcT Akm7ilhEosrG -----END PRIVATE KEY----- dkim._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcPCo/S57o5+2STHwjbRpDoeWSwYZOKs/CpXQEZryAXFRXefkIt2hzVbx71D0paFj0y1hbkKNErxFO6khbp8DckojujISIAPNE8gnQCOQAhFpwld9m58F35YIUosqirnznhPjE2k1V6FOFxBrIOiB5xW/ZkhTZw/gdKOftMCiU7QIDAQAB" ) ;
On enregistre la clé privée dans /var/lib/rspamd/arc/domain.tld.arc.key et /var/lib/rspamd/dkim/domain.tld.dkim.key, il s’agit des emplacements par défaut que Rspamd saura lire directement :
[root@serveur ~]$ mkdir /var/lib/rspamd/arc/ /var/lib/rspamd/dkim/ [root@serveur ~]$ cd /var/lib/rspamd/ [root@serveur rspamd]$ vim arc/domain.tld.arc.key [root@serveur rspamd]$ cp arc/domain.tld.arc.key dkim/domain.tld.dkim.key [root@serveur rspamd]$ chown -R _rspamd: arc/ dkim/
Le contenu des fichiers domain.tld.arc.key et domain.tld.dkim.key contiendra la clé privée :
-----BEGIN PRIVATE KEY----- MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJw8Kj9Lnujn7ZJM fCNtGkOh5ZLBhk4qz8KldARmvIBcVFd5+Qi3aHNVvHvUPSloWPTLWFuQo0SvEU7q SFunwNySiO6MhIgA80TyCdAI5ACEWnCV32bnwXflghSiyqKufOeE+MTaTVXoU4XE Gsg6IHnFb9mSFNnD+B0o5+0wKJTtAgMBAAECgYA4g/8YVGeQgs1KncZOHlpg2sCr /LtzrULoe2djbDKGEGAmIKY4Q/hRuFLtTFIvl2KOcrxsqv6Uiuus60zvcthtoRZP 1HBYVCTTS/l9Kygos19ppefUV8excpHjwLP4shlnXf6LQPiTh30wQdLSwHOPUudD 8UYmfExj5n7HKyDuoQJBAMnYhIHMmGm4a93+hqG0LNzEVIlkTMOf2ogZIXphoJh/ KTc6txfj3Fr7oT6XgEDahgZ+WGDcp5xOmP5cwD7mZLUCQQDGJvB/JWGV0Eibey3h q6/lIvcHLzfn8Kmj0sWJ4WKwQejFFp7PYgH1QqTafD6/s/3DClqJ4o49W5IQqcKy bopZAkArV9Q0bzO3WAPJutM8PA16JqqkiiY1x8jMeuEGf5pVxNCb7H7OoX57Bxe7 8hp3UrV/BXiC7D8NwI736ADcQOsVAkBXtxcRAagwHFJ32VBXLJwhj5fQq1tRJhzC M2RUg9we8B4tWLUWUmlRe53kRcm1LOUxeJzZmtuiV63SCIPyXrKJAkBTfdpcdQ74 XoRT5qF8raJuA/jS0mbI7EF/vTLyJebkATLnd3ZdekG/lO2h0ORtz5zepifdrNcT Akm7ilhEosrG -----END PRIVATE KEY-----
Ajouter l’enregistrement DNS générée précédemment au niveau de votre registar pour les 2 selecteurs arc et dkim :
arc._domainkey 86400 IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcPCo/S57o5+2STHwjbRpDoeWSwYZOKs/CpXQEZryAXFRXefkIt2hzVbx71D0paFj0y1hbkKNErxFO6khbp8DckojujISIAPNE8gnQCOQAhFpwld9m58F35YIUosqirnznhPjE2k1V6FOFxBrIOiB5xW/ZkhTZw/gdKOftMCiU7QIDAQAB;" dkim._domainkey 86400 IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcPCo/S57o5+2STHwjbRpDoeWSwYZOKs/CpXQEZryAXFRXefkIt2hzVbx71D0paFj0y1hbkKNErxFO6khbp8DckojujISIAPNE8gnQCOQAhFpwld9m58F35YIUosqirnznhPjE2k1V6FOFxBrIOiB5xW/ZkhTZw/gdKOftMCiU7QIDAQAB;"
Si vous ne souhaitez pas que les emails considérés comme spam avec une note au-delà de 15 (par défaut) soient supprimés mais déplacés dans les spams, vous devez créer ou modifier le fichier /etc/rspamd/override.d/metrics.conf :
actions { add_header = 6; greylist = 4; }
Configuration de la WebUi :
Vous devrez suivre le guide officiel.
A titre d’exemple, voici ma configuration pour Nginx :
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name sub.domain.tld; access_log /var/log/nginx/rspamd-access.log; error_log /var/log/nginx/rspamd-error.log; ssl_certificate /etc/ssl/certs/domain.tld-fullchain.pem; ssl_certificate_key /etc/ssl/private/domain.tld-privkey.key; ssl_trusted_certificate /etc/ssl/certs/domain.tld-chain.pem; ssl_dhparam certs/dhparam.pem; ssl_protocols TLSv1.2; ssl_ecdh_curve X25519:sect571r1:secp521r1:secp384r1; ssl_ciphers ECDHE-RSA-CHACHA20-POLY1305:EECDH+AES:+AES128:+AES256:+SHA; ssl_prefer_server_ciphers on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block"; location = /robots.txt { return 200 "User-agent: *\nDisallow: /\n"; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:11334; } }
Si vous ne voulez pas de logs dans /var/log/rspamd/ mais uniquement sous journald, vous devez créer ou modifier le fichier /etc/rspamd/local.d/logging.inc :
systemd = true; type = "console";
Puis supprimer les logs :
[root@serveur ~]$ systemctl stop rspamd [root@serveur ~]$ cd /var/log/rspamd/ [root@serveur rspamd]$ rm -f rspamd.* [root@serveur rspamd]$ systemctl start rspamd
Il est possible de dire à Dovecot d’apprendre automatiquement à Rspamd depuis les spams déplacés par Sieve dans le répertoire .Junk (spam) mais je conseille de ne pas mettre en place cette fonctionnalité car il arrive parfois que des faux positifs arrivent dans le dossier, surtout lorsque l’installation est toute fraiche et que vous n’avez pas jouer avec les listes blanches.
Vous pourrez de temps en temps taper cette commande en vous assurant d’abord qu’il n’y a aucun faux positif dans les spams :
[root@serveur ~]$ rspamc learn_spam /var/vmail/domain.tld/mail/.Junk/cur
Ce qui vous retournera par exemple :
Results for file: /var/vmail/domain.tld/mail/.Junk/cur/1500138937.M595397P8882.xxx.tld,S=1750,W=1812:2,S (0.073 seconds) success = true; Results for file: /var/vmail/domain.tld/mail/.Junk/cur/1499713762.M666346P25835.xxx.tld,S=1420,W=1472:2,S (0.077 seconds) HTTP error: 404, <544289145.201707101209@sstechnologies.com> has been already learned as spam, ignore it Results for file: /var/vmail/domain.tld/mail/.Junk/cur/1500346894.M702472P15799.xxx.tld,S=1482,W=1536:2,S (0.017 seconds) success = true;
13. Configuration du champ DMARC
Ajouter l’entrée TXT au niveau de votre registar :
_dmarc 86400 IN TXT "v=DMARC1; p=none; sp=reject"
Voici un assistant afin de comprendre la ligne ci-dessus : http://www.kitterman.com/dmarc/assistant.html
14. Configuration du champ SPF
Ajouter l’entrée TXT au niveau de votre registar :
Dans mon exemple :
@ 86400 IN TXT "v=spf1 a mx -all"
Voici un assistant afin de comprendre la ligne ci-dessus : https://www.spfwizard.net/
Attention, si vous utilisez un relay, par exemple pour Gandi, vous devrez avoir une ligne de ce type :
@ 86400 IN TXT "v=spf1 ip4:217.70.176.0/21 ip6:2001:4b98:c::/48 ip4:217.70.185.10 ip4:217.70.186.165 a ptr -all"
C’est terminé, on peut relancer les daemons :
[root@serveur ~]$ systemctl restart postfix dovecot rspamd
15. Valider son installation
Le temps de la réplication DNS pouvant prendre un certain temps, il sera sans doute nécessaire d’attendre quelques heures avant d’avoir des résultats optimaux.
Il est déconseillé d’envoyer des emails vers gmail, outlook, ymail ou n’importe où tant que votre configuration ne sera pas notée 10/10 sur https://www.mail-tester.com/.
Je vois beaucoup de guide expliquant de regarder l’entête d’un email envoyé vers gmail afin de contrôler son installation, l’art de se tirer une balle dans le pied, à ne pas faire.
Suis-je blacklisté ? :
- http://blaggregate.emailsrvr.com/index.php
- http://multirbl.valli.org/lookup/
- http://www.anti-abuse.org/
- https://mxtoolbox.com/blacklists.aspx
- https://www.dnsbl.info/dnsbl-database-check.php
Si vous-êtes blacklisté, vous pouvez demander à ne plus l’être mais ça peut être très long, vous pouvez aussi faire comme moi et commander un autre VPS en espérant qu’une IP non blacklistée vous soit fournie.
Mon serveur mail est-il bien configuré ? :
SPF, DKIM, DMARC sont-ils bien configurés ? :
- https://250ok.com/tools/dmarc-wizard/
- https://250ok.com/tools/spf-analyzer/
- https://port25.com/authentication-checker/
On continue les tests ? :
16. Conclusion
Il est fortement conseillé de jouer avec Rspamd et de bien comprendre son fonctionnement, notamment au niveau des settings, rules, local et override et de ne jamais modifier les fichiers de configuration de base.
Les logs Postfix et Dovecot pourront vous en apprendre beaucoup et permettront de corriger les potentielles erreurs, détecter des tentatives de hack par bots ou ciblées.
L’analyse des logs Rspamd ainsi que la WebUi vous permettront de peaufiner vos règles, settings et différentes listes blanches.
Je préconise l’utilisation d’un bon webmail tel que RainLoop ou RoundCube, du client K9 Mail pour Android.
On pourra maintenant imaginer cette configuration finale pour vous :
- WebUi Rspamd : https://rspamd.domain.tld
- RainLoop ou RoundCube : https://webmail.domain.tld
- PostfixAdmin : https://postfix.domain.tld
- Courrier entrant : imap.domain.tld sur port 993 (imaps)
- Courrier sortant : smtp.domain.tld sur port 587 (submission)
17. Références et remerciements
- http://www.kitterman.com/dmarc/assistant.html
- http://www.postfix.org/header_checks.5.html
- https://fr.wikipedia.org/wiki/Enregistrement_Mail_eXchanger
- https://fr.wikipedia.org/wiki/Liste_des_enregistrements_DNS
- https://github.com/postfixadmin/postfixadmin/blob/master/INSTALL.TXT
- https://rspamd.com/doc/modules/arc.html
- https://rspamd.com/doc/modules/dkim_signing.html
- https://rspamd.com/doc/modules/dkim.html
- https://wiki.archlinux.org/index.php/Virtual_user_mail_system
- https://www.spfwizard.net/
Source: https://blog.tetsumaki.net/articles/2017/08/installation-dune-solution-mail-complete-sous-debian-9-stretch.html
—
Mr SALVAN.YANNICK
06.14.57.46.35