Archives mensuelles : février 2014

A+ sous l’bus Google – Partie 4

Ah quel plaisir d’avoir ses contacts et calendrier(s) synchronisés sur son téléphone et son webmail !
Un nouveau numéro de téléphone à noter ? Une simple édition du contact dans votre webmail et son numéro apparaîtra dans votre téléphone.
L’intégration de ce genre de services dans la vie de tous les jours la rend plus facile.

Cela dit, Google n’a pas le monopole du plaisir, des solutions existent et nous allons les mettre en place :)

Le choix du serveur

Tout d’abord choisissons un protocole libre et ouvert…
Bon, dans ce domaine, il n’y a pas trop le choix : on va utiliser les extensions CalDAV et CardDAV de WebDAV.
Il faut donc dans un premier temps trouver un serveur parlant couramment ces deux protocoles. A l’heure où j’écris ces lignes, seulement quelques serveurs implémentes ces protocoles de façon sérieuse et facile à mettre en place, voici ma courte sélection :

J’ai rapidement éliminé OwnCloud, il faudrait l’utiliser quotidiennement pour que cela vaille le coup, et ce n’est pas le cas pour moi.
J’ai ensuite testé les autres candidats en gardant à l’esprit qu’il faudra mettre les mains dans le cambouis ! Eh oui, si on reprend mon « cahier des charges » de la partie 1, je souhaite une authentification unique au niveau des différents services ! Le serveur doit donc pouvoir s’y plier d’une façon ou d’une autre.

Baïkal est rapidement sorti du lot, à vrai dire j’ai été conquis par son côté minimaliste (faire une chose et une seule, mais la faire correctement), et le fait d’avoir pu, simplement grâce à deux patchs, réaliser la partie authentification.
Pis Baïkal ça sonne russe, et le lac portant ce nom est magnifique :)

Je vais expliquer dans la suite comment procéder. Cela dit, rien ne vous empêche d’utiliser un autre serveur Cal/CardDAV.

Où l’on parle de Baikal

A l’époque où j’ai commencé à titiller la chose, Baïkal (en version 2.4) avait besoin de deux patchs pour s’intégrer dans ma solution :

  • Un patch pour le support des adresses mail comme nom d’utilisateur, or le problème est réglé depuis la sortie de la version 2.5.
  • Un patch pour ajouter le support de l’authentification IMAP. Il fallait configurer en dur dans le fichier php le serveur IMAP sur lequel baser l’authentification. C’était sale mais ça fonctionnait bien.

Avant d’écrire cet article, je me suis promené sur le Git de Baïkal et quelle ne fut pas ma surprise de voir ce pull request : enfin, un support d’authentification externe LDAP/MAIL propre et intégré à l’interface \o/
Voyez plutôt :

Ah si regardez ça si c'est pas propre :)

success_kid

Pour vous faciliter la vie, et en attendant que le pull-request soit accepté et déployé dans une hypothétique nouvelle version, je vous ai préparé un git avec une version de Baïkal 2.7 déjà patchée.

Pour le déployer chez vous :

git clone https://wtf.roflcopter.fr/git/pogo/baikal.git

Il suffit ensuite d’installer et configurer Baikal en suivant le guide officiel.

Pour le type d’authentification, choisissez « Mail » en StartTLS et entrez l’IP ou le nom de votre serveur mail. Vous pouvez, si vous le désirer, utiliser le LDAP d’iRedMail au lieu de l’authentification IMAP, à vous de voir :)

Vous n’aurez normalement pas besoin de créer d’utilisateur dans Baïkal, lors d’une première connexion authentifiée, il sera créé automatiquement.

Pour le débug de l’authentification il y a même une doc avec la liste des commandes à entrer et l’interprétation des erreurs.

Baïkal n’offre que la partie serveur Card/CalDAV, il faut donc maintenant s’occuper de la partie client.

MyRouncube

J’expliquait dans la première partie que je voulais une interface où les mails, contacts et calendriers sont intégrés. Ayant fait le choix d’utiliser Roundcube je suis parti en quête de plugins.
Voilà le résultat : le quasi néantcorbeau3ce8
Un plugin carddav plus maintenu depuis 2 ans (fonctionnel cependant), mais rien de sérieux pour le calendrier.

Pourtant un nom revient souvent dans mes recherches : MyRoundcube.

MyRoundcube propose une bonne liste de plugins offrant au webmail une dimension un peu plus « pro ». Certains sont payant, d’autres gratuits. Le hic : les plugins qui nous intéressent ici sont payant.
Ils existent dans une version « light », mais les fonctionnalités intéressantes (support CalDAV pour le calendrier, intégration automatique des contacts, …) font partie des versions payantes.

Installer le plugin calendar_plus coûte 8 crédits (soit 8€), les mises à jour majeures sont payantes : entre 4€ et 1€ (depuis 9 mois, il n’y en a eu qu’une, les autres mises à jour ont été considérées comme des « bug fix », donc gratuites).
Le plugin carddav_plus  coûte 6 crédits (soit 6€) avec des mises à jour entre 3€ et 1€.
La liste des tarifs est disponible ici.

J’avoue avoir pas mal hésité, mais en voyant le nombre de téléchargement, un support plutôt réactif et un maintient constant des plugins, je me suis décidé de leur laisser une chance.

Personnellement j’ai préféré prendre le pluging carddav chez eux, mais pour limiter les frais, vous pouvez très bien ne prendre que le calendrier et utiliser plugin carddav cité plus haut.

Pour l’installation et le téléchargement des plugins, il faut forcément passer par leur « plugin_manager » qui va prendre la main sur la gestion des plugins au sein de Roundcube. Pour les explications et la documentation d’installation c’est par ici que ça se passe.

Pour les différentes URL (CalDAV et CardDAV) à renseigner lors de la configuration de ces plugins, je vous conseille de faire un tour sur l’article très complet d’Idleman.
Il vous servira aussi pour configurer la synchronisation de votre téléphone.

Synchronisons !

Votre webmail est maintenant complet, quoi de mieux que de retrouver tout ça sur votre téléphone ?

Pour synchroniser ses mails, vous pouvez utiliser le client mail fourni de base avec d’Android, ou K-9.
K-9 est plus complet, et est hautement configurable (parfois limite trop).

Pour la synchronisation (dans les deux sens) des contacts et des calendriers, deux choix s’offrent à vous :

  • Davdroid : une seule application pour tout synchroniser, mais payante (2.99 €)
  • Le couple Caldav-Sync (2.59 €) & CardDAV-Sync free.
    Attention à ne pas confondre avec Caldav Sync Free Beta qui n’est pas du même auteur et qui – pour le moment – ne propose que la synchronisation dans un seul sens.
    Pour supporter et encourager le développeur, je vous invite grandement à installer la version payante de CardDAV-Sync une fois la version gratuite prise en main.

Avec ces applications, vos contacts et calendriers seront intégrés dans votre Android tout comme avec votre compte Google.

Quelques réflexions…

J’ai vraiment été surpris du peu d’implémentation sérieuses (et maintenus) de CalDAV/CardDAV, je vous invite à faire un tour sur la page Wiki dédiée, vous verrez que ce n’est pas folichon… Est-ce un manque d’intérêt de la part de la communauté ?

Peut-être est-ce dû à la complexité du protocole, vu les nombreux RFC gravitant autour, ça peut en rebuter plus d’un…
Heureusement une librairie PHP existe : SabreDav.
Owncloud et Baïkal (entres autres) se reposent dessus. J’espère que dans le futur on verra plus de projets basés dessus :)

 

Au prochain épisode : on migrera vos données Google vers votre installation et se penchera sur le côté « backup » de la chose.

A+ sous l’bus Google – Partie 3

Et voici la troisième partie de ce tutoriel ! Aujourd’hui on va parler de XMPP et améliorer notre spamassassin :)

XMPP sans ta mère

Partir de Google, cela signifie partir aussi de Gtalk et surtout d’Hangout.

Comme annoncé lors de la sortie de Hangout, celui-ci ne supportera plus XMPP… Encore une preuve du renfermement de ces géants du web… un repli sur soit même entraînant ses utilisateurs dans de bien belles prisons dorées (même remarque pour Microsoft – Skype, Facebook, Twitter, …).
Utilisons donc un protocole respectueux des principes d’Internet : XMPP.

XMPP, c’est un peu le « SMTP » de la messagerie instantanée. C’est un protocole décentralisé et son fonctionnement ressemblent à celui du mail.
Un client XMPP ne va pas directement parler à un autre client, il va passer par son serveur d’appartenance, qui va : soit établir une session sur le serveur distant et transmettre le message, soit transmettre le message au client s’il appartient au même serveur.

Il y a donc deux types de connexion possible en XMPP : c2s (client to serveur) et s2s (server to server).

Comme une adresse XMPP est de la même forme qu’une adresse mail, il est possible de n’utiliser qu’une seule et même adresse pour les protocoles XMPP et SMTP (tout comme les adresses en @gmail, @hotmail, etc)… On ne va pas de gêner² :)

Ejabberd

Ejabberd, c’est un serveur XMPP. Il est plutôt facile à configurer et – bonne nouvelle – un tuto existe (backup ici) pour l’intégrer avec le LDAP d’IredMail.

Suivez-le, il est assez simple, et tout est bien expliqué, même pour l’éventuel séance de debugging.

Une fois que votre Ejabberd est prêt, vous pouvez commander à l’utiliser avec n’importe quel client compatible XMPP tel que Pidgin ou Xabber sur Android.

DNS

Eh oui, une fois n’est pas coutume, il va falloir faire un peu de configuration DNS.

Vous avez vu dans la partie 2, les records MX spécifiques au mail ainsi que les records TXT (pour le SPF ou le DKIM). Ici on va avoir besoin de records SRV pour annoncer votre serveur XMPP ainsi que ses ports d’écoute. XMPP comporte deux types de connections : C2S (Client to Client) et S2S (Server to Server), il va donc falloir deux records, la nomenclature est la suivante :

_service._proto.name TTL class SRV priority weight port target

Pas d’affolement ça va bien se passer, décomposons tranquillement :)

  • _service => défini le type de connection (S2S ou C2S)
  • _proto => tcp ou udp
  • name => votre domaine XMPP
  • TTL class SRV priority => ici rien de nouveau par rapport à un record « classique »
  • weight => permet d’ajouter un poids entre record avec une priorité égale (pourquoi pas..)
  • port => le port d’écoute de votre serveur correspondant au type de connexion
  • target => soit l’IP, soit le DNS de votre serveur XMPP

Voilà, rien de méchant. Pour un exemple pratique voici la configuration chez roflcopter.fr :

_xmpp-client._tcp.roflcopter.fr 120 IN SRV 0 100 5222 xmpp.roflcopter.fr
_xmpp-server._tcp.roflcopter.fr 120 IN SRV 0 100 5269 xmpp.roflcopter.fr

 

Plus d’info sur la configuration DNS spécifique à XMPP ici.

Jappix

Un client lourd c’est pratique sur son PC perso, par contre quand on est en déplacement ou que l’on a pas son PC sous la main, un client web peut dépanner.

Le client web XMPP le plus abouti à ce jour est Jappix ! Il propose une belle interface, il est plutôt réactif et facile à mettre en place. Vous pouvez le tester ici : https://jappix.com/ Si vous voulez le tester avec votre domaine, assurez vous que vous avez bien suivi la partie sur les DNS et que la configuration s’est bien propagée.

Il est possible (et même recommandé) d’en installer une instance chez vous. La doc d’installation est plutôt complète : https://github.com/jappix/jappix/wiki Vous retrouverez dans les différents points la configuration à appliquer sur votre serveur ejabberd.

 

Et voilà ! Vous avez maintenant de quoi chatter avec vos amis ;)

 

Enlarge your spamassassin

Si vous avez commencé à utiliser votre nouvelle messagerie et rendu votre mail plus ou moins publique un riche héritier africain a déjà dû vous contacter :)
Pour peu que ce soit bien écrit (aussi bien au niveau du contenu qu’au niveau du contenant), et que le mail utilisé ne soit pas encore publié dans une myriade de blacklist votre spamassassin n’y aura vu que du feu ! Résultat, le mail tombe comme un cheveu dans votre Inbox.

De rage, vous vous empressez de classer ce vilain mail dans le dossier Spam, en espérant que ça lui serve de leçon ! Le lendemain : rebelote ! Le margoulin réitère et son mail trône dans votre belle Inbox…
Mais il n’apprend donc jamais rien ce spamassasin ?
Eh bien non ! Un mail classé comme spam, n’aura que seul effet de le classer dans le dossier « spam ». Spamassassin n’en saura jamais rien et n’apprendra pas de ses erreurs…

Il existe cependant une solution : les filtres bayésiens. Grace à cela, spamassassin va se baser sur des « tokens », une occurrence de mots ou de courtes phrases identifiés comme pouvant faire parti du contenu d’un spam.

Et double cerises sur le gâteau, il existe un plugin pour Roundcube qui automatise l’apprentissage quand on classe un mail comme spam ET un tuto (backup ici) pour le mettre en place sur Iredmail !

Petit conseil, une fois le tuto suivi et l’apprentissage validé (voir fin du tuto), passez à la moulinette vos anciens mails de spam via la commande suivante :

sa-learn --showdots --spam /var/vmail/vmail1/<path_de_votre_maildir>/Maildir/.Junk/
.....................................................................................................................................................
Learned tokens from 67 message(s) (149 message(s) examined)

Les filtres bayésiens de reposent essentiellement sur des probas. Plus vous les nourrirez et plus ils seront efficace ! De plus, la base est partagée, donc tous vos utilisateurs participeront à l’élimination du spam sur votre serveur mail :)
Attention cependant de ne pas classer en spam n’importe quoi !

Pour poussez la lutte encore plus loin, vous pouvez aussi utiliser des services collaboratifs externes comme le combo Razor et Pyzor (backup ici). Ils s’installent assez facilement.

 

Voilà, maintenant vous avez votre propre service XMPP, les outils pour y accéder et votre spamassassin a gagné des muscles.

La suite au prochain épisode, au programme : Caldav / Carddav !