Configuration d'un serveur mail
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 :
- http://www.postfix.org/postconf.5.html
- http://www.postfix.org/aliases.5.html
- http://www.linuxmail.info/mbox-maildir-mail-storage-formats/
- https://en.wikipedia.org/wiki/Mailx
- http://www.postfix.org/SMTPD_ACCESS_README.html
- http://www.postfix.org/SMTPD_POLICY_README.html
- http://www.postfix.org/postconf.5.html#smtpd_sasl_auth_enable
- http://www.postfix.org/SASL_README.html#saslauthd_pam
- http://www.postfix.org/SASL_README.html#server_dovecot
dovecot :
- http://wiki.dovecot.org/SSL/DovecotConfiguration
- http://wiki.dovecot.org/HowTo/PostfixAndDovecotSASL
- http://serverfault.com/questions/42519/how-to-correct-postfix-relay-access-denied
Authors
nameless`, geb