Sauvegarder ses mails avec Postfix + Amazon EC2 (AWS)

Amazon Web Services permet de déployer des machines virtuelles EC2 et de leur associer des volumes de données pour un coût très raisonnable (à partir de 70 dollars par mois). On peut ainsi déployer une machine dédiée à la sauvegarde externe avec un espace de stockage illimité. Associé à la fonction recipient_bcc de Postfix, on a un dispositif de sauvegarde de mails très simple à lancer (et à administrer).
Ce tutorial est volontairement focalisé sur l’infrastructure : il s’adresse à des administrateurs Linux de niveau intermédiaire ou avancé et qui maîtrisent les risques liés à une modification de serveur de mail.


J’ai récemment mis en place un système de sauvegarde de mails pour un serveur regroupant 1500 adresses e-mail, et en pleine croissance . Le serveur de mails initial est un serveur dédié Debian 4.0 hébergé chez Sivit (très bon hébergeur, au passage). Je souhaitais garder une copie de l’intégralité des e-mails reçus sur ce serveur avec une rétention de un à douze mois (selon le coût).

La plupart des utilisateurs sont en POP3, avec des durées de rétention de 0 à 10 jours sur le serveur, ce qui représente un espace de stockage de 20Go sur le serveur. Je n’avais alors qu’une idée très vague de l’espace disque quotidien nécessaire pour la sauvegarde, et encore moins si l’on devait augmenter le nombre de boîtes ! J’ai décidé d’utiliser le serveur EC2 que nous avions réservé quelques mois auparavant et qui dormait, sous-exploité, pour en faire une solution d’archivage flexible.

La sauvegarde dans le cloud

L’avantage du cloud, c’est qu’il est extensible. Si ma sauvegarde prend, disons, 500Go pour 6 mois, je réserve un volume de 500Go. Dans un an, peut-être que la taille des boîtes aura augmenté : je pourrai créer un volume de 700Go en remplacement de celui de 500Go en quelques clics. Ou alors j’ajoute un volume de 200Go, je crée une photographie (snapshot) mensuelle de mes sauvegardes, et je les intègre au système de fichiers en un tour de main. Le mieux, c’est que je ne paie que ce que je consomme : je n’ai pas besoin de surdimensionner mon serveur dès aujourd’hui pour accueillir le volume de données prévu dans trois ans. Aucun hébergeur classique ne permet de gérer l’espace disque de manière aussi flexible !

Avant de vous lancer dans le cloud, n’hésitez pas à utiliser la calculette d’AWS, qui vous permet de prévoir les coûts selon différents scénarios de charge. Dans notre exemple, on se contentera de :
Amazon EC2 On-Demand Instances : 1 instance Linux, utilisée 100% du temps > On clique sur Add to Bill = 62,22$ par mois (environ 50 euros).
On ajoute un volume de 500Go avec 2 écritures par secondes en moyenne (le nombre moyen de mails entrants, nuit et week-end compris) = TOTAL 122 $ par mois (soit même pas 100 euros).

J’ai beau chercher, je ne trouve pas d’offre comparable ni aussi flexible chez les hébergeurs classiques. A comparer également aux coûts d’infrastructure pour la mise en place d’un tel système de stockage sur le site de l’entreprise, avec les lignes Internet à déployer, etc. Dans mon cas, le calcul a été vite fait.

Sur la fiabilité et la pérennité du système, je n’ai pas d’inquiétude. Depuis un an que le serveur virtuel tourne, il n’a pas connu d’indisponibilité aux heures françaises. Les données sont redondées et si j’ai peur, je fais un snapshot de temps en temps pour conserver plusieurs versions d’historique (attention, un snapshot de 500Go coûte 50 euros par mois).

Configuration

La configuration est la suivante :
– mon serveur de mails Sivit comporte les comptes mail, les alias et les domaines dans une base MySQL
– le serveur de sauvegarde réplique la base MySQL afin de connaître les utilisateurs autorisés et de stocker les e-mails des utilisateurs locaux dans leurs dossiers respectifs
– on monte un volume de 500Go sur le dossier /mnt/maildir du serveur EC2
– on active la fonction recipient_bcc_maps qui renvoie TOUS les mails locaux vers le domaine distant. On réécrit l’adresse du destinataire sur le serveur via une expression régulière
– on réécrit l’adresse à l’arrivée sur le serveur de sauvegarde pour pointer dans le bon dossier d’utilisateur local
– on veut pouvoir « popper » les mails d’un utilisateur pour une restauration : on installera Courier en mode POP3. L’Imap n’est pas souhaitable car le serveur de sauvegarde est dédié aux urgences ponctuelles et non au stockage sur la durée.

Déployer et configurer son serveur EC2

Déployer un serveur EC2, c’est pas (trop) compliqué, mais il faudra parler anglais. Suivez ce tutorial très complet qui explique la réservation d’une machine virtuelle Amazon EC2 (en français).

Je vous laisse ensuite installer Postfix, MySQL, Courier (pour la restauration des mails) et tout le tralala.

Petit détail : si vous avez spécifié un Security Group restrictif (firewall AWS), n’oubliez pas d’ouvrir les ports 25 (SMTP) pour votre serveur de mails (Sivit dans mon cas) et 110 (POP3) pour tout le monde (en cas de restauration).

Mettre en place la réplication MySQL

J’ai utilisé pour ce faire le tutoriel How To Set Up Database Replication In MySQL
Ensuite j’ai copié tous les paramètres de postfix /etc/postfix/main.cf et les fichiers de configuration MySQL, en modifiant le mot de passe.

Réécrire l’adresse à l’émission

Sur le serveur de mail Sivit, on ajoute cette ligne dans le fichier /etc/postfix/main.cf :

recipient_bcc_maps = hash:/etc/postfix/recipient_bcc_maps

J’ai édité le fichier /etc/postfix/recipient_bcc_maps en intégrant l’expression régulière suivante :
/(.*)@(.*)$/ $1-AT-$2@mondomainedesauvegarde.com

A noter que je disposais d’un domaine existant sur le serveur pour la sauvegarde. Il est tout à fait possible de se contenter d’un sous-domaine de votre domaine principal et de le faire pointer vers l’IP de votre serveur AWS via le DNS de votre site, mais c’est un autre sujet.

Réécrire l’adresse à la réception

Sur le serveur de sauvegarde EC2, on va décoder l’expression régulière pour distribuer le mail dans la boîte appropriée. Pour ce faire, on ajoute un fichier de regexp dans la table d’alias virtuels :
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf,regexp:/etc/postfix/virtual_regex
Ce fichier comporte là encore une seule ligne avec l’expression régulière suivante :
/(.*)-AT-(.*)@mondomainedesauvegarde\.com$/ $1@$2
On recharge Postfix sur les deux machines, et zou ! Tous les mails sont envoyés de Sivit vers EC2.

Changer le dossier de stockage

Afin de profiter de la flexibilité des volumes EC2, on va stocker le maildir des utilisateurs sur le volume monté sur /mnt/maildir.
Dans /etc/postfix/main.cf :
virtual_mailbox_base = /mnt/maildir

On pourra créer un volume plus gros et changer le dossier de destination dès qu’on le souhaite.

Configuration de Courier-pop

On reprend là aussi la configuration du serveur de mail, notamment le fichier /etc/courier/authmysqlrc qui gère la liste des utilisateurs locaux, en lui indiquant le dossier des maildirs :
MYSQL_HOME_FIELD        '/mnt/maildir-local'

Régler la durée de rétention

Les dossiers maildir ont l’avantage de générer un fichier par e-mail. On peut donc utiliser des tâches Cron pour effacer régulièrement les e-mails trop anciens.
J’expérimente actuellement avec un simple xargs rm, mais je voudrais être certain de ne pas rendre les dossiers illisibles. Je compléterai ce point quand j’aurai expérimenté plus en détail.

Restauration de données

La restauration des données en cas de crash ou de vol de PC d’un utilisateur est extrèmement simple : si vous avez copié la configuration des comptes depuis le serveur de mails, les logins et mots de passe sont identiques. Il suffit donc d’installer un compte POP sur le poste utilisateur en pointant vers le serveur mondomainedesauvegarde.com.
IMPORTANT : n’oubliez pas de laisser une copie des messages sur le serveur : sinon votre sauvegarde va être « avalée » intégralement par le client e-mail et ne sera plus disponible au prochain crash.

Points à améliorer

J’espère que cette solution pas chère, même si elle est un peu laborieuse à mettre en place, permettra à quelques-uns d’entre vous de faire des économies.
Il reste quelques points à régler, n’hésitez pas à me faire part de vos suggestions :
– j’aimerais bloquer le serveur Courier POP en lecture seule pour ne pas avoir à cocher la case « laisser une copie des messages sur le serveur » sur le poste client.
– j’aimerais pouvoir stocker les données dans des dossiers mensuels, de manière à récupérer en priorité les mails les plus récents sans attendre les vieux mails parfois inutiles. Mais si je sais créer ces dossiers (il suffit de déplacer le dossier maildir à un moment donné vers un dossier séparé et il se recrée tout seul pour le mois suivant), je ne sais pas comment les « popper » simplement.
– la suppression des mails anciens est à valider techniquement

Outil de référencement professionnel - essai gratuit Ce contenu a été publié dans Blog, avec comme mot(s)-clé(s) , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *