test Blue mind 3 + DKIM + SPF sur debian (kimsufi OVH)

Oupsss… Quelques erreurs dans la partie DKIM, je bosse dessus en ce moment…

Ré-écriture de l’article en cours (modifs/fix DKIM) et anti-spam et … d’ici le 6 7-8 Avril 2014… Voir commentaires

Petit test de la solution mail/groupware blue mind (3.0.2) avec ajout de DKIM et de SPF sur une debian (7, 64b), le tout installé sur un petit kimsufi d’OVH. Bref, une solution mail et quelques outils collaboratif pour pas trop cher.

Le contexte

Le support des emails m’a toujours emmerdé, c’est un métier l’email et j’ai pas envie de me prendre la tête avec ça. J’ai plus envie de passer par gmail (même leur solution pro), marre de me taper du postfixAdmin, de devoir mettre les mains dans le cambouis (ssh + config soft + …), j’apprécie moyen les solutions type ispconfig et consorts et, pour tout dire, j’ai envie de monter une petite infra dédiée à la gestion des emails, un truc multi-domaine, HA et avec une interface d’administration qui va bien. Dans ma quête de ce saint graal, j’ai fait le tour rapidement des différentes solutions que je connaissais de nom ou de réputation et je me suis souvenu du petit dernier, blue mind. Donc petit kimsufi, petit debian, la musique qui va bien dans le HD380Pro et roule ma poule ;)

Pour le serveur, j’ai fait léger, Core(TM)2 Duo CPU E8400 @ 3.00GHz, 4Go de ram, 2 x 1000 GB sata. Là dessus, une Debian 7 Stable fraichement installée et pour les partitions, 25Go pour le /, 500Mo pour le swap et le reste pour /var, le tout en raid 1.

Pourquoi blue mind ?

Blue mind s’appuie sur des solutions open source et ayant fait leurs preuves Postfix, cyrus IMAP, Roundcube, Apache, Tomcat, nginx, HornetQ et PostgreSQL. Les mecs derrière ont l’air de se bouger, les quelques retours que j’ai eu sont bons, ça correspond à peu prés à mes besoins, à choisir je préfère une solution dédiée plutôt qu’une solution qui fait tout à la fois, en général moins de problèmes et de meilleures performances. Et en plus, il est français \o/

Installation de blue mind

Y a qu’à respecter les pré-requis et à suivre la procédure. ça prend moins de 10 minutes pour l’installation (via ssh) et moins de 5 minutes pour la configuration (via l’interface web).

Attention à bien noter les 3 différents couples d’email/mot de passe en fin d’installation. Je n’ai pas trouvé de procédure en cas de mot de passe perdu :/

Petit constat

Bon l’interface d’administration merdouille sous opera, merdouille sous firefox, mais ça tourne sous chrome. L’interface est simple et pas trop vilaine, ça ferra largement l’affaire. Test du webmail, c’est pas sexy, mais ça tourne. Test depuis thunderbird, ça tourne. Bon jusque là, c’est plutôt pas mal… J’ajoute un domaine, des comptes pour tester rapidement, ça tourne… Je m’envoie un mail sur une de mes boites gmail, et là, boum, direct en spam. Pas de panique, je check différents services pour voir si l’IP de mon tout nouveau serveur de test n’as pas était blacklisté suite à d’éventuels abus de son ancien occupant (c’est un truc que je vous conseille de faire quand vous utilisez une nouvelle ip (serveur, failover…)), pas de blacklistage. Bon, va falloir ajouter DKIM et SPF pour limiter les mises en spams intempestives. Je consulte donc la doc, rien, nada, que dalle sur le sujet oO, je check le forum officiel et je trouve différents topics expliquant qu’il faut se le taper à la main et au passage je trouve une info vitale : pas d’antivirus ni d’antispam fournit avec bluemind :/

Reste plus qu’à se relever les manches…

Et à installer le nécessaire. Pour l’instant je vais me limiter à SPF et DKIM. Je verrai plus tard pour l’antivirus et l’antispam.

DKIM

Bon pour commencer, on va s’occuper de DKIM. Je vous préviens de suite, c’est basé à 99% sur le tuto disponible là.

On installe le nécessaire :
apt-get install opendkim opendkim-tools

Pour info, je stocke tout dans /var, libre à vous d’adapter pour stocker dans /etc :
mkdir -p /var/dkim

On génère et stocke les clés :
opendkim-genkey -D /var/dkim/ -d votreDomaine.tld -s mail
Maintenant, dans /var/dkim, il doit y avoir deux fichiers : « mail.private » et « mail.txt ».

On va rendre l’utilisateur « opendkim » propriétaire du dossier :
chown opendkim:opendkim -R /var/dkim

Comme je cherche à gérer de multiples domaines, il faut organiser un peu le stockage des clés en fonction du domaine, on va partir sur ce schémas : « /var/dkim/keys/<domaine.tld>/ », mais plutôt que de se coltiner la création de dossier, la génération des clés (…), on va utiliser un petit script sh
nano /var/dkim/add-domain.sh
Et on claque dedans :
[sourcecode language= »bash »]#! /bin/bash

selector=mail
repertoire=/var/dkim
domaines=("domain1.tld" "domain2.tld")

for ix in ${!domaines[*]}
do
mkdir -p $repertoire/keys/${domaines[$ix]}
opendkim-genkey -D $repertoire/keys/${domaines[$ix]} -r -d ${domaines[$ix]} -s $selector
chown opendkim:opendkim $repertoire/keys/${domaines[$ix]}/$selector.private
echo "$selector._domainkey.${domaines[$ix]} ${domaines[$ix]}:$selector:$repertoire/keys/${domaines[$ix]}/$selector.private" >> $repertoire/KeyTable
echo "${domaines[$ix]} $selector._domainkey.${domaines[$ix]}" >> $repertoire/SigningTable
echo "${domaines[$ix]}" >> $repertoire/TrustedHosts
done[/sourcecode]
Pour ajouter un domaine, il suffit de le rajouter dans la variable domaines en respectant les "" et en respectant les espaces entre chaque domaine, puis de lancer le script :
sh /var/dkim/add-domain.sh.
Un petit coup d’œil dans /var/dkim/keys pour vérifier que ça a bien fait son boulot.
Si j’adopte cette solution (blue mind…), je tâcherai de faire un script un peu plus propre qui se lance par cron (ou autre solution).

Maintenant on va modifié la config de DKIM pour qu’il prenne en compte les clés.
nano /etc/opendkim.conf
Pour ajouter à la fin du fichier (n’oublier pas de préciser le domaine) :
UserID opendkim:opendkim
Domain votreDomaine.net
KeyFile /var/dkim/mail.private
Selector mail
AutoRestart yes
DNSTimeout 5
# multi domaine
KeyTable /var/dkim/KeyTable
SigningTable /var/dkim/SigningTable
ExternalIgnoreList /var/dkim/TrustedHosts
InternalHosts /var/dkim/TrustedHosts

Pour que postfix et DKIM puissent communiquer :
nano /etc/default/opendkim
Pour ajouter à la fin du fichier :
SOCKET="inet:8891:localhost"

Reste à configurer postfix en éditant :
nano /etc/postfix/main.cf
Pour ajouter à la fin :
# DKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Et on redémarre postfix et DKIM
service opendkim restart
service postfix restart

Reste plus qu’à ajouter un champs « TXT » contenant la clé DKIM dans la config DNS de votre domaine pour que ça tourne, soit vous éditez directement le fichier de la zone DNS qui va bien et vous y ajouter le contenu de nano /var/dkim/keys/steen.io/mail.txt, soit vous passez par une interface qui le fait pour vous :
Type du champ : TXT
Nom du champ : mail._domainkey.
Donnée : v=DKIM1; k=rsa; p=La clé qui va bien
« La clé qui va bien » se trouve dans nano /var/dkim/keys/steen.io/mail.txt

un petit restart de votre DNS et ça devrait rouler.

Reste à tester en utilisant http://www.appmaildev.com/fr/domainkeys/, il suffit de lire vite fait pour comprendre le fonctionnement du schmilblick, plus simplement : vous cliquez sur le petit bouton « Prochaine étape », d’envoyer un mail à l’adresse indiquée, d’attendre la réponse (par mail) et de regarder ce que ça vous raconte, si vous avez le droit à :
============================================================
DKIM result: pass
============================================================

c’est que votre configuration est bonne ;). Comme vous l’aurez remarqué ce petit service vérifie aussi la validité SPF. Autre service qui tourne bien, auth-results [chez] verifier.port25.com, ce service vérifie 2 ou 3 petites choses en plus.

SPF

Maintenant on va installer SPF. Là encore, la procédure n’est pas le fruit de mon cerveau, j’ai utilisé le petit tuto disponible là.

apt-get install postfix-policyd-spf-perl

Maintenant, nous allons mettre en place le filtre dans postfix :
nano /etc/postfix/master.cf
pour y ajouter :
policy unix - n n - - spawn
user=nobody argv=/usr/sbin/postfix-policyd-spf-perl

Il faut aussi modifier le main.cf de postfix :
nano /etc/postfix/main.cf

trouvez la variable smtpd_recipient_restrictions pour y ajouter
check_policy_service unix:private/policy
sur mon serveur test, ça donne :
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,check_policy_service unix:private/policy

On redémarre postfix :
/etc/init.d/postfix restart

Reste à modifier le DNS des domaines pour y ajouter un changer « TXT » ou « SPF » ou les deux :
TXT "v=spf1 a mx ptr mx:<domaine.tld> ip4:10.0.0.0/8 ip4:127.0.0.0/8 ip4:<ip du serveur> ~all"
SPF "v=spf1 a mx ptr mx:<domaine.tld> ip4:10.0.0.0/8 ip4:127.0.0.0/8 ip4:<ip du serveur> ~all"

Bien sûr n’oubliez pas de remplacer <domaine.tld> par votre MX (j’utilise en général mail.<domaine.tld>) et de remplacer <ip du serveur> par l’IP du serveur émettant les mails. N’oubliez pas -aussi- de redémarrer votre service DNS.

Maintenant il reste à tester que le SPF soit bien mis en place, vous pouvez utiliser http://www.mxtoolbox.com/spf.aspx ou envoyer un petit mail à auth-results [chez] verifier.port25.com .

Wala, fini!

Du moins pour la partie SPF et DKIM, je le rappelle, blue mind ne fournit pas de service anti-spam et anti-virus, à vous de mettre ça en place. Pareil pour la sécurisation de votre serveur… Pour le support de ce petit tuto, le mail n’est pas mon cœur de métier, mais posez quand même vos questions/problèmes/…, dés fois que, moi ou un autre visiteur, ayons une réponse.

Mes conclusions

Blue mind à l’air de bien tourner, installation et configuration assez simple. Dommage qu’il faille se taper à la main l’installation de DKIM, SPF, anti virus et anti spam, mais au moins, ça nous laisse le choix des outils. Pour la mise en spam des mails envoyés, il faut considérer que le domaine et l’IP utilisés ont moins de 48 heures, mais avec DKIM et SPF ça passe sur gmail et je me retrouve en spam chez hotmail/outlook/live (micro$oft rules :/). Il faut que je test un peu plus : montée en charge, la synchro avec les appareils mobiles, les agendas, l’installation d’anti-spam, d’anti-virus, il faut que je test un autre format d’infrastructure pour faire de la haute disponibilité… bref, encore pas mal de boulot mais je pense que ça va le faire ;).

N.B. J’ai oublié de préciser que blue mind propose une API, je n’ai pas fais le tour, mais potentiellement ça peut apporter pas mal de choses à certains de mes projets.