Serveur mail avec Postfix et dovecot

Nous allons mettre en place un serveur mail relativement basique avec pour MTA Postfix et MDA Dovecot. L'accès à la boite mail se fera par un client lourd (genre thunderbirds) via IMAP/IMAPS avec une authentification sasl/Plain/TLS pour s'y connecter de n'importe où. Les utilisateurs seront les utilisateurs du serveurs de messagerie.

Installation

Nous allons donc installer le nécessaire sur notre serveur :

sudo aptitude install postfix dovecot-impad
#accessoirement on peut installer mailutils pour faire des tests
sudo aptitude install mailutils


Lors de l'installation, Postfix devrait vous poser des questions. Vous pouvez laisser les choix par défaut, sachant que nous allons reprendre intégralement la configuration.

Configuration

Nous allons d'abord configurer Postfix. Les fichiers de configuration se trouvent dans /etc/postfix. Ceux qui vont nous intéresser pour le moment sont main.cf pour la configuration d'accès et de distribution et master.cf pour la partie transport

Commencez par faire une copie de ce fichier.
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

/etc/postfix/main.cf
#global
smtpd_banner = Qui me parle ?
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
delay_warning_time = 4h
readme_directory = no
inet_interfaces = all

myhostname = <nom_smtp_sur_internet>
mydomain = <domain_local>
mydestination = <domains_de_distribution>
mynetworks = <réseau_local_x.x.x.x/24> 127.0.0.0/8
relayhost = <smtp_de_sortie>

#Restrictions
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain

#TLS
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
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_auth_only = yes
tls_random_source = dev:/dev/urandom

#SASL
smtpd_sasl_type = dovecot
smtpd_sasl_auth_enable = yes
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

#Fichier
mailbox_size_limit = 0
recipient_delimiter = +
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m "${EXTENSION}"


/etc/postfix/master.cf

Il faut dé-commenter les parties submission et smtps
submission 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

Nous allons maintenant configurer Dovecot pour qu'il distribue les mails et authentifie les utilisateurs
Il existe deux façons de configurer Dovecot. Soit on édite les fichiers contenus dans /etc/dovecot/conf.d/, soit on édite directement /etc/dovecot/dovecot.conf

C'est cette seconde méthode que nous allons utiliser. Commencez par faire une copie de ce fichier.
sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf/orig

Remplacer ensuite le contenue de ce fichier par :
/etc/dovecot/dovecot.conf
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "

mail_location = maildir:~/Maildir
protocols = imap

#Auth
auth_mechanisms = plain login
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
#disable_plaintext_auth = no

service auth {
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
userdb {
driver = passwd
}
passdb {
driver = pam
}

#SSL
ssl_cert = ssl_cipher_list = ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM
ssl_key =

# IMAP configuration
protocol imap {
mail_max_userip_connections = 10
imap_client_workarounds = delay-newmail
}

# LDA configuration
protocol lda {
log_path = ~/dovecot-deliver.log
postmaster_address = postmaster
deliver_log_format = msgid=%m: %$
}


Utilisation

La configuration des clients se fait avec les paramètres suivants :
  • utilisateur : <nom_d'utilisateur> (sans le @)
  • port imaps : 993
  • port smtp : 465
  • sécurité imap et smtp : SSL/TLS
  • méthode d'authentification imap et smtp : mot de passe normal


Bonus

1 - Il est possible de faire l'installation plus rapidement en utilisant le meta paquet mail-stack-delivery. Ce paquet semble présent avec les distributions récentes. Il permet de mettre en place un serveur sécurisé avec Postfix/Dovecot et en grande partie configuré.

sudo aptitude install mail-stack-delivery

Il ne vous reste plus qu'à modifier les fichiers de configuration pour adapter à vos besoins. A noter que la configuration de Dovecot se fait par les fichiers spécifiques situés dans le dossier /etc/dovecot/conf.d/. Pour postfix, on reprend les fichiers /etc/postfix/main.cf et /etc/postfix/master.cf.

2 - il arrive que les FAI empêchent l'envoi de mail depuis un serveur, obligeant ainsi à utiliser leurs smtp. Il est parfois possible contourner cela en modifiant le port d'envoie du smtp. Pour cela il faut éditer fichier /etc/postfix/master.cf :

#changez la ligne
smtp inet - - - - - smtp

#comme ceci (le numéro de port est à votre convenance)
2525 inet - - - - - smtp


3 - Pour respecter les bonnes pratiques il faut que le votre reverse DNS (FAI ou maison) retourne bien l'adresse de votre serveur. Cette manipulation n'est pas toujours possible pour les clients qui sont en ip dynamique (comme orange :s). Cela peut se vérifier comme suit :

# host <adresse_ip>

Si tout est bien configuré vous devriez voir apparaître le nom de votre serveur. Si ce n'est pas le cas il faut mettre en place un enregistrement PTR dans votre DNS.

4 - vous pouvez tester votre smpt avec cet outil en ligne : mxtoolbox

5 - Il est possible de faire des alias ou des adresses temporaires en utilisant le fichier /etc/aliases

Documentation

La discussion continue ailleurs

URL de rétrolien : http://www.leslamas.net/index.php?trackback/51

Fil des commentaires de ce billet