Archives par mot-clé : iredmail

A+ sous l’bus Google – Partie 6

Avoir franchir le grand pas, il est temps de faire un retour d’expérience sur les 3 ans passés !

3 ans plus tard

Eh bien, mes mails sont toujours auto-hébergés ! J’ai même fermé mon compte GMail.

En fait, je n’ai rien de bien notable à vous faire partager. Ça juste marche !
A part certaines fois où j’ai dû m’occuper de blacklistage sauvage du range d’adresse IP par Microsoft ou un éditeur d’anti-spam pro. Oui maintenant c’est plus simple de ban des /24, « tirons d’abord et envoyons les questions dans /dev/null ».

La machine portant les mails a subit une migration Debian 7 > Debian 8 sans heurs ainsi que plusieurs mises à jour mineures et majeures d’Iredmail (toujours aussi bien documentées au passage).

A part cela, nan vraiment RAS !

A moins que… Continuer la lecture de A+ sous l’bus Google – Partie 6

A+ sous l’bus Google – Partie 5

Suite et dernier post concernant cette migration de Google vers notre solution perso.

Une fois toute l’infrastructure en place, il va nous manquer quelque chose : l’importation de vos données personnelles ; oui, celles que vous voulez protéger ;)

Migration

Les contacts

C’est la partie la plus simple, il suffit d’exporter votre liste de contacts et de l’importer :

Rendez vous dans Gmail et suivez les étapes suivantes :

2014-02-28 15_48_51-Contact Manager - jeremie.pogeant@gmail.com - Gmail

2014-02-28 16_06_28-Contact Manager - jeremie.pogeant@gmail.com - Gmail

 

Le fichier généré peut être ensuite importé votre Baïkal via Roundcube. Dans votre carnet d’adresses, choisissez « Importer » :

2014-02-28 16_11_56-ROFLmail __ Carnet d'adresses

 

Sélectionnez ensuite le fichier d’export généré par Gmail, choisissez le carnet d’adresses pointant sur votre Baïkal et cliquez sur « Importer » :
2014-02-28 17_11_24-ROFLmail __ Importer les contacts

Et voilà, maintenant un peu de patience, le processus peut prendre pas mal de temps si vous avez pas mal de contacts.

Les agendas

Là encore, rien de bien sorcier, il suffit d’exporter ses calendriers au format ICS et de les importer dans le Baïkal via Roundcube.

 Les mails

Bon c’est là que ça se corse un peu…

GMail ne fait rien comme tout le monde et utilise des labels pour faciliter le classement de ses mails. Ce n’est pas une mauvaise idée tant qu’on reste en mode « Web ». En consultant son compte via IMAP on retrouve ses labels sous forme de dossiers où vous pouvez consulter tous les mails appartenant au label correspondant. Là où ça devient « drôle » : un mail peu avoir plusieurs labels ! Un mail va donc se retrouver dans le dossier « All Mail » ainsi que dans tous les dossiers des labels auxquels il est associé. Avec un tel système un mail pourra être dupliqué un certain nombre de fois si vous faites une synchronisation bête et méchante…

La première étape est de se rendre dans les paramètres de son comtpe GMail et d’activer l’accès IMAP via l’onglet correspondant :2014-04-04 16_57_41-Settings - Gmail

Une bonne chose est de faire ensuite le tri de ce que vous voulez rendre disponible via l’IMAP en cochant ou décochant la case suivante (onglet « Label ») :

2014-04-04 16_59_38-Settings - Gmail

Ca peut être une bonne chose d’enlever la corbeille ainsi que le dossier spam et de s’assurer que les « Chats » seront disponibles.

Une fois tout cela de réglé, on va synchroniser tout ça. Et pour cela, il y a imapsync ! Malheureusement l’outil est passé payant, pas grave on peut récupérer les sources sur le Github :

 Il suffit ensuite de faire un test de migration de votre compte GMail vers votre serveur :

Quelques explications :

  • –syncinternaldates : permet de synchroniser la date de réception/émission d’un mail
  • –split[12] : nombre de message que l’on traite entre deux requêtes IMAP
  • –useheader ‘Message-Id’ : on précise le header sur lequel se baser afin d’éviter le freeze du programme en cas de traitement de gros mail
  • –skipsize –allowsizemismatch : permet de s’affranchir des problèmes de taille non concordante d’un mail entre les deux serveurs.
  • –dry : juste une simulation
  • –justfoldersizes permet de vous faire une idée rapide en affichant la taille des dossiers à synchroniser.

Vous pouvez aussi utiliser –debug en cas de souci.

Une fois prêt vous pouvez enlevez les options –dry –justfoldersizes et prendre un café, ça risque de durer longtemps surtout si votre boite mail est bien remplie ou si vous êtes derrière une ligne ADSL.

Avec cette méthode toute votre arborescence sera migré moyennant le souci de duplication de mail évoqué plus haut.
Une autre solution consiste à ne migrer que votre répertoire « All Mail » et de le placer dans un dossier spécifique dans votre nouvelle boite mail. Tant pis pour le classement des mails mais au moins vous éviterez leur duplication pour le moins inutile.

Backup

MX de backup

Parlons un peu du temps de rétention des mails.
Imaginons que pour une raison X ou Y votre serveur mail soit injoignable. Un serveur de mail souhaite vous envoyer un mail mais comme votre serveur n’est pas disponible celui-ci lui reste sur les mains.
La bonne nouvelle, c’est que le serveur ne va pas supprimer tout de suite votre mail, il va réessayer plusieurs fois dans une intervalle de temps qui augmentera au fur et à mesure des essais (c’est le plus souvent exponentiel). Si votre serveur est toujours injoignable au bout de la rétention maximale autorisée, le mail sera renvoyé à l’expéditeur avec un joli message d’erreur lui expliquant le problème.

Ainsi la durée maximale autorisée du downtime avant de perdre des mails ne dépend pas de vous mais de la rétention maximale des serveurs qui souhaitent vous joindre.
Cette valeur vous ne la connaissez pas, elle est en moyenne de 48h mais peut être plus faible ou plus élevée en fonction de l’humeur du sysadmin.

Une bonne idée est donc de vous configurer dans un coin un serveur mail de backup type « Store & Forward ». Comme son nom l’indique celui-ci se contentera de stocker les mails des domaines que vous gérez et les délivrera à votre serveur mail principal quand celui-ci redevient joignable. La bonne nouvelle c’est que c’est maintenant vous qui gérez la rétention maximale :)
Vous pouvez l’installer sur une autre serveur, sur celui d’un pote, ou sur un PC derrière votre ligne ADSL (dans ce cas il vous faudra gérer votre IP dynamique).

Petit exemple de configuration avec postfix /etc/postfix/main.cf :

Un petit /etc/init.d/postfix restart et hop.

Maintenant il faut annoncer notre MX de backup dans les DNS, en s’appliquant sur la configuration vue en partie 2 :

Vous noterez que le MX de backup a un poids plus important que le primaire. Cela indique aux serveur mails d’utiliser le primaire en priorité puis le backup si jamais le primaire ne répond pas.

Petite remarque, les margoulins qui essaient de vous envoyer du spam vont essayer par tous les orifices connus (surtout si votre serveur de mail applique du GreyListing). Il ne faut donc pas « whitelister » automatiquement les mails provenant de votre/vos MX de backup mais les traiter comme n’importe quel mail.

Backup des données

Là c’est pas compliqué, IredMail fourni plusieurs script d’export de la base LDAP et de la base MySQL qui sont lancés normalement en crontab :

Tout est exporté dans les répertoires /var/vmail/backup/ldap et /var/vmail/backup/mysql. Sachant que vos boites mails sont contenues dans /var/vmail/vmail1 c’est une bonne idée de sauvegarder le contenu du répertoire /var/vmail très régulièrement.
Plusieurs choix s’offrent à vous tels qu’un banal scp sur un autre serveur ou à la maison, ou même déployer un vrai service de backup tel que bacula.

Une autre idée est d’utiliser un client mail lourd à la maison tel que Thunderbird. Au moins tous vos mails seront rapatriés et stockés chez vous.

Aller plus loin

Converse.js

Merci à xorriso qui via son commentaire m’a fait découvrir Converse.js. C’est un simple applet de chat compatible XMPP super bien foutu et très ergonomique.
Et il y a même un plugin roundcube : https://github.com/priyadi/roundcube-converse.js-xmpp-plugin.

Voici la configuration, via le fichier config.inc.php, que j’ai adoptée afin d’avoir ma session XMPP en auto-login sur le roundcube :

 

Rainloop

J’en ai parlé quelques fois sur mon shaarli
Rainloop est un webmail en cours de développement très intuitif et bien foutu. Il lui manque encore quelques fonctionnalités (tel que la gestion des filtres Sieve, ou un bon calendrier compatible CalDav) mais c’est un projet à suivre de très très près.
Je ne serais pas surpris de l’utiliser d’ici quelques mois à la place de Roundcube…

En conclusion

Voilà, j’espère que ce tutoriel en cinq parties vous aura permis de vous convaincre de la possibilité de se passer plus ou moins facilement de Google tout en gardant un niveau de service acceptable.
Il y a pas mal de travail à faire pour mettre en place une telle architecture et ce n’est malheureusement pas à la portée du premier venu. Après rien n’empêche de mettre en place ce service pour vous et de le proposer ensuite à votre entourage (famille, amis).

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 :

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 :

 

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 :

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 !

A+ sous l’bus Google – Partie 2

Les articles qui vont suivre ne sont pas des tutos à par entière, disons que c’est plus une marche à suivre. Je vais essayer d’être le plus indicatif possible mais je vais sûrement zapper des choses. Si un truc n’est pas clair, faites le savoir dans les commentaires et j’essaierai de compléter l’article !

 

Le serveur mail

La première chose à faire c’est – sans surprise – installer un serveur de mail. Perso avant de me lancer dans ce projet j’avais une fois touché à Postfix/MySQL avec des virtual mailbox pour faire des simples redirections mails. Autant dire que je partais de loin…

Tout ce que je savais c’est qu’il faut :

  • un MTA,
  • un spamassassin : impossible de faire sans maintenant,
  • un clamav : histoire de faire le tri dans les facture.exe (ou pas),
  • et un dovecot pour l’accès IMAP/POP3.

Voici un schéma qui résume comment tout ça est embranché :

how-postfix-dovecot-amavis-clamav-and-spamassassin-work-postfix-the-bigpicture

  1. Un mail est reçu par Postfix,
  2. Après vérification de l’expéditeur (blacklist, authentification si nécessaire, greylisting,…) il est esnuite envoyé à Amavis pour une analyse de son contenu,
  3. SpamAssasin vérifie via ses filtres si on ne vous demande pas d’augmenter la taille de votre organe reproducteur,
  4. ClamAV jette un coup d’oeil aux pièces jointes,
  5. Le mail est renvoyé à Postfix…
  6. … qui se fait un plaisir de demander à Dovecot de le ranger au bon endroit
  7. Dovecot vérifie l’état du quota de l’utilisateur, et analyse les règles de filtrage de l’utilisateur afin de prendre une décision sur l’action à faire (stockage dans le bon dossier ou renvoi du mail),
  8. L’utilisateur s’authentifie auprès de Dovecot en IMAP ou POP3 afin d’accéder au mail.

Sans réelle connaissance et vu que le temps pressait (rapport à l’affaire Prism) j’ai donc décidé de partir sur une solution clé en main et d’apprendre sur le tas.

Continuer la lecture de A+ sous l’bus Google – Partie 2