Simple install postfix + courier-imap courier-pop + roundcube
Le but de cet article est de montrer comment déployer rapidement un serveur mail de A à Z sans la complexité de configuration d’une usine à gaz anti-spam et authentification ssl.
Vous aurez à la fin de cet article un serveur de mail fonctionnel, simple à administrer avec le webmail roundcube que vous pourrez personaliser à souhait avec ses nombreux skins.
Configuration du nom de domaine
La première étape avant d’entreprendre l’installation de l’artillerie du serveur mail c’est la configuration de votre nom de domaine.
Les éléments indispensables :
- Un champs de type A faisant la relation entre un nom canonique (mail.mondomaine.fr) et l’ip de votre serveur.
- Un champs de type MX (mail eXchange)
- Des champs cname (ex: smtp.yourdomain.fr, imap.yourdomain.fr,webmail.yourdomain.fr etc…)
Dans une zone DNS il peut y avoir plusieurs champs A identifiant des serveurs physiques différent.
Quand un courrier est envoyé (user@mondomain.fr), le serveur de courrier sortant interroge le serveur DNS afin d’obtenir l’enregistrement MX et connaitre le chemin à emprunter pour acheminer le mail. Il peut y en avoir plusieurs par domaine. La configuration DNS du/des champs MX sert à indiquer le chemin à suivre pour le courrier.
Pour avoir un redondance des services, on définit des priorités sur les enregistrements MX afin qu’un serveur secondaire puisse prendre le relais en cas de besoin.
Une priorité avec une valeur pouvant aller de 0 à 65 535.
@ 10800 IN MX 30 mailrescue.mondomaine.fr.
La priorité décroit à mesure que le chiffre de la priorité augmente.
Exemple de configuration de domaine (chez gandi.net) :
mail 10800 IN A x.x.x.x @ 10800 IN MX 10 mail.mondomaine.fr. smtp 10800 IN CNAME mail.mondomaine.fr. imap 10800 IN CNAME mail.mondomaine.fr. pop 10800 IN CNAME mail.mondomaine.fr. webmail 10800 IN CNAME mail.mondomaine.fr.
Il faut un petit moment pour que la propagation DNS se fasse.
Plus tard, on vérifiera que le DNS est bien configuré :
host -t MX mmondomain.fr
ex: openwebtech.fr mail is handled by 10 mail.openwebtech.fr.
Pour information voici une petite illustration du fonctionnement des noms de domaine (commentcamarche.net) :
Pensez également à forwarder les ports suivants vers votre serveur :
- 25 smtp
- 110 pop3
- 143 imap
Nous allons maintenant nous assurer que notre /etc/hosts est bien configuré pour le domaine.
Exemple:
127.0.0.1 localhost.yourdomain.fr localhost 127.0.1.1 mail.yourdomain.fr mail 192.168.1.18 mail.yourdomaine.fr
Vérification:
hostname -d hostname -f
Installation et configuration de postfix/courier-imap/courier-pop
Installation des paquets
apt-get install postfix courier-pop courier-imap
L’installation de courier-pop n’est pas forcément nécéssaire mais dans la mesure où vous voudriez récupérer vos mails avec un téléphone mobile, l’imap n’est pas toujours supporté!
Lors de l’installation de postfix vous devez configurer quelques options de la manière suivante :
- Configuration type du serveur de messagerie : Site Internet
- Nom de courrier : votre nom de domaine (e.g openwebtech.fr)
- Create directories for web-based administration: no
Toutes les éléments n’ont pas été renseignés. Un petit coup de configuration :
dpkg-reconfigure postfix
- Destinataire des courriels de « root » et de « postmaster » : votre login sur le serveur
- Autres destinations pour lesquelles le courrier sera accepté : rajoutez votre nom de domaine dans la liste (e.g openwebtech.fr, mail.openwebtech.fr)
- Forcer des mises à jour synchronisées de la file d’attente des courriels : non (laisser par défaut)
- Réseaux internes : 127.0.0.0/8, 192.168.1.0/24 (Attention à l’adresse de votre réseau local)
- Utiliser procmail pour la distribution locale : non
- Taille maximale des boîtes aux lettres (en octets) : Ici plusieur possibilité soit 0 pour aucune limite ou par exemple la taille exprimée en octet 5Gio (5368709120).
- Caractère d’extension pour les adresse locales : + (laisser par défaut)
- Protocoles internet à utiliser : all
Configuration minimale de postfix
Les paramètres de configuration que nous avons définis via l’assistant sont dans /etc/postfix/main.cf il en reste beaucoup d’autres à configurer.
vi /etc/postfix/main.cf
Voici un exemple de configuration minimale que j’ai essayé de commenter au maximum (en anglais) :
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # domain.tld mydomain= yourdomain.fr myorigin= /etc/mailname #By default this is the fqdn e.g mail.domain.tld myhostname = mail.yourdomain.fr 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 = no alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases #List of delivered domains by the MTA #By default Postfix local MDA looks up recipients in /etc/passwd and /etc/aliases mydestination = yourdomain.fr, mail.yourdomain.fr, localhost.yourdomain.fr, localhost relayhost = # trusted networks from where it is accepted to send e-mails mynetworks = 127.0.0.0/8, 192.168.1.0/24 mailbox_command = # Maximum size for user's maildir, 0 for unlimited mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all #refers to the mail dir format in user's home directory home_mailbox = Maildir/
Anti-Spam, ajout des directives RBL à Postfix
Description de certaines directives :
Afin d’éviter le spam, les RBL (Realtime Blackhole List) sont des listes noires tenues par des sites spécialisés et qui permettre l’exclusion des destinations, ou origines douteuses. L’intérêt de la mise en place de ces règles rbl est limiter considérablement le spam sur le serveur, mais aussi d’optimiser l’utilisation des ressources dues au filtrage. Il vaut mieux filtrer au maximum au niveau de Postfix plûtot que de laisser le travail à spamassasin par exemple qui est gourmand en ressources.
Dans l’exemple ci-dessous, les règles s’effectuent au niveau du format des mails reçus et émis (smtpd_recipient_restrictions / smtpd_sender_restrictions).
L’utilisation de blacklist est restreinte au niveau des mails reçus (smtpd_recipient_restrictions) : reject_rbl_client sbl-xbl.spamhaus.org. Le cheminement d’un message en passant par l’utilisation d’une blacklist est shématisé de la manière suivante :
Voici quelques exemples de listes noires:
- http://www.spamcop.net/
- http://www.njabl.org/
- http://www.sorbs.net/
- http://www.dsbl.org/
- http://bl.csma.biz/
- http://rhs.mailpolice.com/
- http://www.spamhaus.org/
Le détails de toutes les directives Postfix en français est disponible ici : http://postfix.traduc.org/index.php/postconf.5.html .
Dans /etc/postfix/main.cf, il vous faut ajouter :
# reject any email unformatted smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_hostname #Avoid spam: RBL rules + the sorting out on mail format smtpd_sender_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_unauth_pipelining, reject_unknown_client, reject_unknown_hostname, reject_unknown_sender_domain, reject_unverified_sender, permit smtpd_recipient_restrictions = reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, reject_rbl_client sbl-xbl.spamhaus.org, permit sendmail_path = /usr/sbin/sendmail
Nous avons fait le choix d’utiliser les listes xbl et spl de spamhaus.org dont le détails ets le suivant :
SBL sbl.spamhaus.org 127.0.0.2-3 Static UBE sources, verified spam services and ROKSO spammers
XBL xbl.spamhaus.org 127.0.0.4-7 Illegal 3rd party exploits, including proxies, worms and trojan exploits
Configuration d’un utilisateur
Création d’un utilisateur mail :
adduser --shell /bin/false user
Aucun shell : /bin/false
Homedir par défaut : /home/user
Création de sa boite :
maildirmake /home/user/Maildir
L’organisation d’une boite au format maildir différent de mailbox (fichier unique) :
-Maildir
—-cur
—-new
—-tmp
–.sub.maildir
——cur
——new
——tmp
La petite blague c’est de tester l’envoie d’un mail à l’utilisateur nouvellement crée avant d’avoir changé les permissions sur son Maildir :
chown -R user:user /home/user/Maildir
On teste l’envoie d’un mail :
mail -s "test" user@yourdomain.fr ctrl+d
On vérifie si le mail à bien été reçu :
ls /home/user/Maildir/new
Si vous faite un cat pour voir le contenu du mail :
Return-Path: <root@yourdomain.fr>
X-Original-To: user@yourdomain.fr
Delivered-To: you@yourdomain.fr
Received: by mail.yourdomain.fr (Postfix, from userid 0)
id 1A6D31290E0; Sun, 21 Aug 2011 09:59:55 +0200 (CEST)
To: user@yourdomain.fr
Subject: test
Message-Id: <20110821075955.1A6D31290E0@mail.yourdomain.fr>
Date: Sun, 21 Aug 2011 09:59:55 +0200 (CEST)
From: root@yourdomain.fr (root)
test
Installation de roundcube
Téléchargements et installation des paquets
Télécharger roundcube depuis http://roundcube.net/ à la racine de votre serveur web
Décompressez l’archive :
tar -zxvf roundcubemail-0.5.4.tar.gz rm roundcubemail-0.5.4.tar.gz mv roundcubemail-0.5.4 webmail.yourdomain.com
On affecte www-data en tant que propriétaire:
chown -R www-data:www-data webmail.yourdomain.fr/
Configuration de la bdd pour roundcube
Dans phpmyadmin créez une bdd: roundcube en utf8_general_ci
Exécutez le code sql suivant :
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'mdp'; GRANT USAGE ON * . * TO 'roundcube'@'localhost' IDENTIFIED BY 'mdp' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost IDENTIFIED BY 'mdp';
Configurer votre vhost le sous domaine préalablement configuré pour votre webmail : webmail.yourdomain.com
Installation des paquets manquant (php5-intl):
apt-get install php5-intl
Configurez l’option date.timezone dans php.ini :
date.timezone = 'Europe/Paris'
Edit: Il est également possible que vous obteniez l’erreur suivante :
suhosin.session.encrypt: NOT OK(is ’1′, should be ’0′)
Pour la résoudre il suffit simplement d’ajouter les lignes suivantes à votre php.ini et redémarrer php:
[suhosin] suhosin.session.encrypt = Off
Lancez l’installation de roundcube: http://webmail.yourdomain.fr/installer
L’installer check tout les points indispensables. A ce stade tout devrait être à OK!
Installation de roundcube
Lancez l’installation :
- Général configuration : laissez par défaut
- Logging and debugging : idem
- Database setup : complétez avec vos paramètres
- imap settings : votre imap.yourdomain.com, laissez le reste par défaut
- smtp settings : votre smtp.yourdomain.com, laissez le reste par défaut
NB: Nul besoin de s’authentifier au niveau du smtp car le serveur n’acceptera des connexions que depuis les réseaux spécifiés dans « my_networks ».
Display setting and user prefs : language fr_FR et c’est fini !
Les fichiers de configuration sont crée (main.inc.php, db.inc.php) et il reste à les copier dans config/.
On oublie pas de changer les permissions :
chown www-data:www-data db.inc.php chown www-data:www-data main.inc.php
- Continue puis Initialize (pour la bdd).
Testez vos paramètre et tout devrait être OK!
Sécurisation
Assurez vous que dans main.inc.php l’installer soit à false pour ne plus pouvoir le lancer :
$rcmail_config['enable_installer'] = false;
Supprimez le répertoire installer.
L’installation est enfin terminé! Amusez vous bien :p