Configuration d'un serveur mail

De Breizh-Entropy
Aller à la navigation Aller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.


Installation du serveur postfix

Lisez cette page entièrement pour une configuration complète, chaque section ajoute quelques lignes aux différents fichiers de configuration.

configuration postfix

Pour qu'une machine reçoive et accepte des mails, elle doit disposer d'un serveur SMTP. Nous allons utiliser le serveur postfix.

 # aptitude install postfix

debconf va vous poser une série de question, afin de générer la configuration de postfix, située dans le fichier /etc/postfix/main.cf. Au besoin, il est possible de relancer debconf au moyen de la commande 'dpkg-reconfigure postfix'

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = /usr/share/doc/postfix

# TLS parameters
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

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

home_maildir = Maildir/
myhostname = mail.breizh-entropy.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = breizh-entropy.org, localhost, localhost.localdomain, localhost
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html


Les points importants :

  • home_mailbox : par défaut postfix enregistre les mails dans /var/mail/user au format mbox (tout les mails sont dans un seul fichier). cette option permet d'enregistrer les mails dans le home des utilisateurs. home_mailbox=Mailbox conserve le format mbox alors que home_maildir=Maildir/ enregistre les mails au format Maildir (un fichier par mail). Cette deuxième option utilise beaucoup plus d'inodes que la première. voir ici.
  • myhostname : le hostname du système où tourne le service postfix, voir ici
  • alias_maps : chemin vers la description des alias voir ici. voir la section suivante sur les Alias. Sinon <man 5 aliases
  • alias_database : similaire
  • myorigin : le chemin vers le fichier contenant le nom de domaine qui sera utilisé pour les mails envoyés localement. voir ici.
  • mydestination : liste des domaines qui sont acceptés par le serveur à la reception d'un mail. voir ici.

On démarre le serveur postfix :

 # /etc/init.d/postfix start
 

On install le Mail User Agent **heirloom-mailx** qui nous permettra d'envoyer et de recevoir des mails en ligne de commande :

 # aptitude install heirloom-mailx
 

on fait un test !

 $ echo "test" | mail -s test_sujet votre@adresse.mail

Administration de postfix

Commandes importantes

mailq voir l'état des files d'attente de mails
tail -f /var/log/mail.log voir les logs
postfix flush forcer l'envoie des messages dans la queue
postsuper retrier la queue, virer des mails etc..
postconf voir les paramètres de configuration
/etc/init.d/postfix service postfix


Le fichier Aliases

Ce fichier contient la liste des Alias, ça permet par exemple d'avoir plusieurs adresses mails pour un seul utilisateur. Exemple de configuration :

# See man 5 aliases for format
postmaster: root      # mail
hostmaster: root      # dns 
webmaster:  root      # web
root:       nameless, geb    


Ce fichier associe les adresses postmaster (utilisé par le service mail), hostmaster (utilisé par le service dns), webmaster (utilisé par le service web) à l'utilisateur root. Les messages à destination de root sont ensuite finalement renvoyés aux deux utilisateurs nameless et geb. Postfix n'utilise pas directement ce fichier mais un truc binaire compilé. Après chaque modification on fait donc:

 # newaliases
 # /etc/init.d/postfix reload

le fichier .forward

Il existe un fichier bien pratique pour facilement rediriger ses mails vers une autre boîte: ~/.forward il suffit de lui mettre une adresse email vers laquelle renvoyer les mails. exemple :

 $ cat ~/.forward
 votre@adresse.mail
 

Le fichier /etc/mailrc

la commande mail permet d'envoyer du courrier mais permet aussi d'en recevoir (on a alors un jolie listing des mails reçus). Comme on a changé le chemin et le format d'enregistrement des mails par défaut, il faut le préciser dans un fichier de configuration. Le fichier /etc/mailrc permet de configurer le comportement de cette commande, assurez vous d'ajouter les lignes suivantes au fichier de configuration :

 set folder="Maildir/"
 set MBOX="Maildir"

Connectez vous en ssh et tapez la commande mail ça doit marcher !

 $ mail
 Heirloom mailx version 12.4 7/29/08.  Type ? for help.
 "/home/nameless/Maildir": 2 messages 1 unread
  O  1 nameless     Wed Feb 29 09:46   63/2870  test1
 >U  2 nameless     Thu Mar  1 14:18   62/2781  test2
 ? 

Installation de Dovecot (IMAP/POP)

Pour l'instant on peut envoyer et recevoir des mails en local avec la commande mail, ou bien se les faire rediriger avec .forward mais ça reste peu pratique. On va donc mettre en place un serveur IMAPS/POPS pour pouvoir gérer nos mails à distance avec un client mail comme l'excellent thunderbird par exemple. Pour cela il faut installer les paquets dovecot-imapd dovecot-pop3d :

 # aptitude install dovecot-imapd dovecot-pop3d
 Les NOUVEAUX paquets suivants vont être installés : 
 dovecot-common{a} dovecot-imapd dovecot-pop3d libpq5{a} openssl{a} ucf{a} 
 0 paquets mis à jour, 6 nouvellement installés, 0 à enlever et 0 non mis à jour.
 Il est nécessaire de télécharger 9 057 ko d'archives. Après dépaquetage, 27,3 Mo seront utilisés.

Le fichier de configuration de dovecot se trouve dans le fichier /etc/dovecot/dovecot.conf. La configuration par défaut normalement suffit, vérifiez juste que dovecot va chercher les mails au bon endroit :

 mail_location =  maildir:~/Maildir

L'authentification se fait par PAM. à ce stade vous devriez déjà être capable de récupérer vos mails. Un détail cependant les mots de passes sont envoyés en CLAIR, il faut donc utiliser SSL/TLS.

SSL/TLS pour Postfix

vérifiez dans votre /etc/postfix/main.cf que les paramètres suivant soient correct :

 # pour recevoir en SSL
 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
 # pour envoyer en SSL
 smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 smtp_use_tls=yes
 smtp_tls_security_level =		may
 smtp_tls_loglevel =			1

Si jamais postfix tente de faire du SSL en localhost alors que vos daemons locaux ne le supporte pas, utilisez smtp_tls_policy_maps

et on redémarre postfix :

 # /etc/init.d/postfix restart

SSL/TLS pour Dovecot

De la même façon, vérifier que les paramètres suivant soient correct dans le fichier /etc/dovecot/dovecot.conf :

 ssl_cert_file = /etc/ssl/private/dovecot.crt
 ssl_key_file = /etc/ssl/private/dovecot.key

dans le même fichier, on en profite pour interdire l'authentification en PLAINTEXT (sauf si ça vient de la même IP ou encapsulé dans du SSL/TLS) :

 disable_plaintext_auth = yes

et on redémarre dovecot :

 # /etc/init.d/dovecot restart

Règles iptables

Il faut penser à ouvrir les ports pour SMTP (25), SMTPS (465), POP3 (110), IMAP (143), POPS(993) et IMAPS (995)

 /sbin/iptables -A INPUT -p tcp -i eth0 -m multiport --dport 25,465,110,143,993,995 -j ACCEPT

Authentification SASL

Un serveur SMTP a plusieurs fonctions, la première étant de recevoir les mails étant à destination du domaine sur lequel il est authoritaire et de les stocker dans le dossier de l'utilisateur approprié. Lorsque vous envoyez un mail depuis Thunderbird vers une destination quelconque, votre serveur SMTP est utilisé en mode relais, c'est à dire qu'il va prendre votre mail et le diriger vers le serveur SMTP de la destination. Avoir un serveur mail sur Internet c'est aussi se rendre vulnérable face à la calamité qu'est le spam. Sitôt que votre serveur mail sera en productivité, une mauvaise configuration et vous devenez le relais de tout les vendeurs de viagra, c'est à dire qu'ils utiliseront votre serveur mail pour envoyer des cochoneries. La configuration par défaut de postfix est de n'authoriser le mode relais que pour des clients dont l'adresse IP est la même que celle du serveur postfix, c'est pour ça qu'avec la commande mail on a pu être capable d'envoyer des mails. Mais si on essaye de les envoyer depuis Thunderbird depuis un ordinateur distant, on aura l'erreur Relay access denied. On va donc configurer SASL qui est un service d'authentification qui va permettre d'autoriser le relais que pour les utilisateurs authentifiés. Postfix n'implémente pas lui même SASL mais utilise des implémentations déjà existantes, par défaut il en accepte deux, celle de Cyrus et celle de Dovecot, pour s'en assurer il faut taper la commande suivante :

 # postconf -a
 cyrus
 dovecot
 

Dovecot SASL

La communication entre le serveur Postfix et Dovecot SASL se fait au travers d'un socket UNIX ou via un socket TCP. On configure Dovecot pour écouter sur une socket unix dans le fichier /etc/dovecot/dovecot.conf

 auth default {
   mechanisms = plain login
   passdb pam {
   }
   userdb passwd {
   }
   socket listen {
     client {
       # Assuming the default Postfix $queue_directory setting
       path = /var/spool/postfix/private/auth
       mode = 0660
       # Assuming the default Postfix user and group
       user = postfix
       group = postfix
     }
   }
 }
 

et on redémarre Dovecot :

 # /etc/init.d/dovecot restart  

Postfix SASL

On va maintenant dire à Postfix d'accepter de relayer les mails pour les utilisateurs authentifiés par Dovecot SASL, on modifie le fichier /etc/postfix/main.cf

 smtpd_sasl_type = dovecot
 smtpd_sasl_path = private/auth
 smtpd_sasl_auth_enable = yes
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

et on redémarre postfix :

 # /etc/init.d/postfix restart
 

On est maintenant capable d'envoyer et de recevoir des mails depuis Thunderbird \o/

Contrer le Spam

Le problème c'est que sitôt que notre précieuse adresse mail sera rendu publique, on peut être sur que 90% du traffic qu'on va recevoir sera du spam. Les filtres à spams sont des usines à gaz qui consomment beaucoup de ressources et ont l'inconvénient de parfois classer comme spam des mails légitimes (faux positifs). On va prendre une approche plus légère avec le greylisting. Le principe est simple, lorsque postfix va recevoir un mail à destination d'un utilisateur local, il va dire au serveur distant de revenir plus tard. l'Hypothèse est que si le serveur distant est un spammeur, il ne reviendra pas alors que si il prend le temps de revenir, ce n'est pas un spammeur. l'avantage c'est qu'on va maintenir une liste si bien qu'un serveur distant qui aura fait l'effort de revenir ne sera plus refoulé à l'avenir. Pour ça on installe le paquet postgrey :

 # aptitude install postgrey

et on édite dans le /etc/postfix/main.cf la ligne suivante :

 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023


le port 10063 est défini dans le fichier /etc/default/postgrey

et on relance postfix :

 # /etc/init.d/postfix restart

Pour des besoins plus importants, une bonne documentation sur les différentes techniques antispam est disponible ici: http://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/SecuMail

Roundcube

On veut maintenant Installer un jolie webmail de type squirrel mail ou roundcube, mais je trouve roundcube plus sympa :) Roundcube utilise mysql pour utiliser certaines informations. Heuresement pour nous, il ne va pas enregistrer les mails (sinon on les stockerait deux fois) car il utilise imap, mais il a besoin d'une base de donnée pour enregistrer quelques informations (type contact), on va préparer cela pour lui avant d'installer roundcube.

on install mysql-client :

 # aptitude install mysql-client 
 Les NOUVEAUX paquets suivants vont être installés : 
 libdbd-mysql-perl{a} libdbi-perl{a} libmysqlclient16{a} libnet-daemon-perl{a} libplrpc-perl{a} mysql-client mysql-client-5.1{a} 
 mysql-common{a} 
 0 paquets mis à jour, 8 nouvellement installés, 0 à enlever et 0 non mis à jour.
 Il est nécessaire de télécharger 13,3 Mo d'archives. Après dépaquetage, 34,4 Mo seront utilisés.

On installe ensuite roundcube :

 # aptitude install roundcube

Normalement il vous demande le mot de passe root du serveur mysql ainsi que le nom et le mot de passe de l'user roundcube et il crée toutes les tables pour vous. le fichier mysql qui crée les tables est disponible dans les sources du projet (wget http://garr.dl.sourceforge.net/sourceforge/roundcubemail/roundcubemail-0.1.1.tar.gz) sinon je l'ai enregistré Mysql5.initial.sql

Pour recevoir (IMAPS) et envoyer (SMTPS) des messages avec Roundcube, Il faut se rappeler qu'on a fait une configuration de paranoïaque :

  • dovecot a interdit l'authentification en plaintext avec la directive disable_plaintext_auth = yes dans le fichier /etc/dovecot/dovecot.conf, à moins qu'il n'y ait une connexion SSL/TLS
  • postfix refuse de relayer des messages pour des utilisateurs non authentifiés (SASL)

Il faut donc préciser cela à roundcube dans le fichier de configuration /etc/roundcube/main.inc.php :

 # SSL pour pouvoir s'identifier en IMAP
 $rcmail_config['default_host'] = 'ssl://breizh-entropy.org';
 $rcmail_config['default_port'] = 143;
 $rcmail_config['imap_auth_type'] = "check";
 
 # %u et %p pour l'identification SASL
 $rcmail_config['smtp_server'] = '192.168.0.25';
 $rcmail_config['smtp_port'] = 25;
 $rcmail_config['smtp_user'] = '%u';
 $rcmail_config['smtp_pass'] = '%p';

Et voilà ! RoundCube possède déjà une configuration apache dans /etc/roundcube/apache.conf qu'il suffit d'inclure dans notre configuration apache. On est maintenant capable d'envoyer et de recevoir des mails avec RoundCube :D

Documentation

postfix :

dovecot :

Authors

nameless`, geb