Auto-hébergement de la messagerie : Debian Jessie, Postfix, Dovecot, Postgrey

Auto-hébergement de la messagerie : Debian Jessie, Postfix, Dovecot, Postgrey…

Cet article répond à la question : comment installer simplement, un serveur de mail, qui soit un minimum sécurisé et capable de limiter un peu le SPAM ?

La configuration proposée permet de gérer les boites mails (BAL) des utilisateurs systèmes sur un ou plusieurs domaines. Les utilisateurs sont ceux ajoutés sur le système (/etc/passwd). Pas besoin de gérer les comptes mails avec des « Virtuals » dans une configuration basique (pour quelques personnes, cette option est amplement suffisante).

Prérequis

Avant tout, il faut que l’enregistrement MX soit configuré sur le DNS du domaine traité.

exemple.com.         3w   IN      MX  10   mail.exemple.com.

Ajouter aussi le champs Sender Policy Framework (SPF) dans la zone DNS, car certains serveurs de mails vérifient cette information pour qualifier les serveurs SPAMmeurs.

exemple.com.  IN  TXT   "v=spf1 mx -all"

Une dernière chose, pensez à mettre à jour le Reverse (enregistrement PTR dans la zone Reverse du DNS). Cette information est également vérifiée pour savoir si c’est vraiment sérieux de recevoir des mails de votre serveur.

Installation de la messagerie

Je pars du principe que le système est déjà installé et à jour (Debian Jessie). Les configurations ont été faites sur un VPS Cloud OVH, mais le serveur peut être hébergé n’importe où, il faut juste s’assurer que les ports nécessaires au fonctionnement de la messagerie ne soient pas filtrés ou bloqués (TCP 25, 993, 587).

Les paquets à installer :

$ sudo apt install postfix dovecot-imapd postgrey

Aux questions :

Configuration type, répondre : Internet Site
Nom du système de mail, répondre : exemple.com (ou levotre !)

La configuration par défaut après l’installation de Postfix

$ postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_size_limit = 0
mydestination = exemple.com, localhost.localdomain, localhost
myhostname =  mx2.exemple.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
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

Il faut y ajouter :

## TLS smtp Opportuniste

smtpd_tls_security_level = may

## Dovecot (SASL) Simple Authentication and Security Layer
## http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# On Debian Wheezy path must be relative and queue_directory defined
queue_directory = /var/spool/postfix
# and the common settings to enable SASL:
smtpd_sasl_auth_enable = yes

## local delivery agent (LDA) celui qui délivre le mail dans la BAL, avec la commande qui va bien

mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"

## Format des BAL : Maildir
home_mailbox = Maildir/

## Quelques restrictions pour éviter les clandestins et les spammeurs 
## Bien évidement ces restrictions sont personnelles et sont tout à fait ajustable en fonction des besoins

smtpd_client_restrictions = permit_mynetworks,
    reject_unauth_pipelining,
    reject_rbl_client sbl-xbl.spamhaus.org,
    reject_rbl_client list.dsbl.org

smtpd_helo_required = yes

smtpd_helo_restrictions = permit_mynetworks,
    reject_invalid_hostname,
    reject_non_fqdn_hostname,
    warn_if_reject reject_unknown_hostname

smtpd_sender_restrictions = permit_mynetworks,
    reject_non_fqdn_sender,
    reject_unlisted_sender,
    reject_unknown_sender_domain

smtpd_recipient_restrictions =
    # General rules
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    # Our users
    permit_mynetworks,
    permit_sasl_authenticated,
    # Spam filters
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client dnsbl.sorbs.net,
    reject_rhsbl_reverse_client dbl.spamhaus.org,
    reject_rhsbl_helo dbl.spamhaus.org,
    reject_rhsbl_sender dbl.spamhaus.org,
    # This should be next-to-last
    check_policy_service inet:127.0.0.1:10023
    reject_unauth_destination, reject_unlisted_recipient,
    permit

Authentification de l’expéditeur et chiffrement

Pour éviter que n’importe qui envoie des mails depuis notre serveur de mail, il vaut mieux s’assurer de l’identité et vérifier les habilitations de l’expéditeur.

# vi /etc/postfix/master.cf
~
submission inet n       -       -       -       -       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=$mua_client_restrictions
#  -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
~

Recharge la configuration et relance le service

service postfix restart

A ce stade

# netstat -lnpt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:10023         0.0.0.0:*               LISTEN      4787/postgrey.pid -
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      5133/master     
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      5191/dovecot    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      539/sshd        
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      5133/master     
tcp6       0      0 :::587                  :::*                    LISTEN      5133/master     
tcp6       0      0 :::143                  :::*                    LISTEN      5191/dovecot    
tcp6       0      0 :::22                   :::*                    LISTEN      539/sshd        
tcp6       0      0 :::25                   :::*                    LISTEN      5133/master

On remarque que « postgrey » écoute sur le port 10023. Ce service va rejeter dans un premier temps, les serveurs mails qu’il ne connaît pas, puis acceptera de laisser passer le mail à la seconde tentative.

Théoriquement, avec le « Greylisted » et les quelques règles de restrictions, une bonne partie des SPAM seront rejetés.

Fini pour Postfix

Maintenant configuration de Dovecot

A modifier dans /etc/dovecot/conf.d/10-mail.conf

## Emplacement des BAL
#mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_location = maildir:~/Maildir

A modifier dans /etc/dovecot/conf.d/10-ssl.conf

## Activation du TLS
# SSL/TLS support: yes, no, required.
#ssl = no
ssl = required
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key

A modifier dans /etc/dovecot/conf.d/10-master.conf

# Gestion de l'authentification des utilisateurs 
# Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666 }

Relance le service

# service dovecot restart

Création d’un utilisateur

# adduser alex 

Création des alias

A modifier dans /etc/aliases

# See man 5 aliases for format
postmaster:    root
root: alex

Recharge la base des alias

# newaliases

Test

A configurer sur un client comme Thunderbird

Attention, le certificat TLS est auto signé, donc, une exception est nécessaire.

IMAP
Server Name: mx2.exemple.com
Port: 993
Connection security: SSL/TLS
Authentication method: Normal password
User Name: alex
SMTP
Server Name: mx2.exemple.com
Port: 587
Connection security: STARTTLS
Authentication method: Normal password
User Name: alex

Conclusion

Bon ben, voila ! Un serveur de mail de plus.

Cette configuration est suffisante pour passer la plus part des mécanismes de répudiation mis en place anarchiquement par certains serveurs de mail (pour lutter contre le SPAM).

2 thoughts on “Auto-hébergement de la messagerie : Debian Jessie, Postfix, Dovecot, Postgrey

  1. Merci pour cet article riche et bien détaillé. J’avoue que je n’arrive pas à barrer la route au SPAM, ça ne va plus dans les indésirables mais carrément dans ma boite principale et il arrive que des mails importants tombent dans le SPAM, ça me rend dingue à la fin.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *