Postfix : Mise en place d’un backup MX, vos mails toujours disponibles!
Le but de cet article, adressé à toutes les personnes auto-hébergeant leur messagerie, est d’assurer une continuité du service mail en cas de panne ou d’indisponibilité de son serveur.
Nous allons donc voir dans ce billet comment mettre en place un backup MX avec l’aide du serveur d’un copain ou d’un second serveur.
Hypothèses
- Vous disposez d’un serveur de mail et d’une adresse perso@mydomain.tld => MX primaire
- Vous disposez d’un accès sur une autre machine (ici le compte backup) et d‘une adresse mail secondaire (e.g sur le serveur d’un copain libriste) => MX secondaire
Lors de la mise en place de votre serveur, vous devriez normalement avoir configuré un champs MX sur zone dns en lui affectant une priorité. Ce chiffre normalement le plus bas possible pour une priorité haute, nous allons nous en servir.
Mise en oeuvre
Le principe est le suivant: En cas de panne de notre serveur (MX primaire) les mails ne peuvent normalement pas être acheminés correctement vers notre adresse perso@mydomain.tld.
C’est pourquoi nous allons définir un nouvel enregistrement MX dans la zone dns du domaine de notre serveur primaire. Ce MX secondaire doit avoir un chiffre de priorité plus élévée que le primaire. Lorsque le primaire sera inaccéssible c’est le secondaire qui sera utilisé comme MTA. Les mails qui nous sont adressés seront alors acheminés vers le serveur de backup (MX secondaire).
Cependant plusieurs question ?
- Q1: Comment les mails adressé à perso@mydomain.tld vont me parvenir ?
- Q2: Comment les récupérer ?
Réponse à Q1: les mails vont en faire être acheminé sur vers le MTA de secours qui les livrera sur une adresse secondaire (backup@MyFriendSaveMe.tld) à laquelle nous avons accès.
Réponse à Q2: Il suffit de mettre en cron « une tâche getmail » qui se chargera de rapatrier régulèrement vos mail sur votre desktop
Configuration de la zone dns et de postfix
Au niveau du primaire
Nous allons à présent configurer la zone dns de notre serveur primaire afin qu’en cas de panne du serveur mail, le MX secondaire prenne le relai.
Configuration initiale
source ttl type priority destination
@ 300 in MX 1 mail.mydomain.tld.
Pour que la bascule puisse s’opérer en cas de panne du primaire, ajoutez le MX secondaire sur le serveur comme suit:
@ 300 in MX 40 mail.MyFriendSaveMe.tld.
ATTENTION: Ne pas oubliez le point à la fin de l’enregistrement.
Au niveau du secondaire
Le postfix installé sur le serveur servant de MX secondaire, ne doit normalement pas être configuré pour accepter des mails qui ne lui sont pas adressés.
Il faut autoriser le domaine mydomain.tld à être délivré sur le secondaire.
Pour cela créez le fichier /etc/postfix/virtual/domains :
mydomain.tld
Editez /etc/postix/main.cf en renseignant mydestination avec les noms de domaine à gerer.
mydestination = mydomain.tld, mail.mydomain.tld, localhost, /etc/postfix/virtual/domains
Vous le savez, la création d’une boite sur un serveur passe en général par la création d’un compte utilisateur sur le serveur, mais…
- Q3: Comment faire pour que les mails qui me sont destinés (webmaster@mydomain.tld) ne finissent pas dans la boite de mon collègue (webmaster@MyFriendSaveMe.tld) ?
Réponse à Q3: Vous y avez pensé, postfix le fait pour vous ! il est nécéssaire d’utiliser des utilisateur virtuels de postfix.
Il faut à présent « mapper » avec un compte local (backup@MyFriendSaveMe.tld), la/les adresses à backuper.
Creez le fichier /etc/postfix/virtual/addresses dans lequel on renseigne les domaines, les addresses, et la boite qui viendra acceuillir.
mydomaine.tld DOMAIN webmaster@mydomain.tld useraccount(ici backup)
Pour que les modifications soient prises en compte, il faut mettre à jour la db de postfix.
postmap /etc/postfix/virtual/addresses
/etc/init.d/postfix reload
Création (ou pas) du compte de backup
Sur le primaire (ou son desktop…)
Nous allons mettre en place getmail4 qui par l’intermédiaire d’une tâche cron se chargera de vérifier tout les 5 minutes si un mail n’a pas été acheminé sur le serveur secondaire suite à une coupure du primaire.
Si le compte qui doit acceuillir les différentes boite (backup) n’est pas crée .
adduser --shell /bin/false backup
cd /home/backup/
maildirmake Maildir
Procédons à l’installation de getmail4.
apt-get install getmail4
Créez le répertoire de configuration de getmail.
cd /home/backup/ && mkdir .getmail chown user:user .getmail chmod 700 .getmail
Créez le fichier de configuration de getmail pour l’utilisateur « backup »:
vi .getmail/.getmailrc[retriever] type = SimplePOP3Retriever server = mail.MyFriendSaveMe.tld username = backup password = XXXXXXXX [destination] type = Maildir path = ~webmaster/Maildir/chmod 600 .getmailrc
Ajout de la tâche cron qui vérifie et rappatrie les éventuels messages toutes les 5 minutes .
su - backup -s /bin/bash crontab -e
# m h dom mon dow command */5 * * * * /usr/bin/getmail -ad > /dev/null 2>&1
Pour tester éteignez le postfix du serveur primaire, et envoyez un mail à perso@domain.tld, depuis un compte mail externe.
Le mail devrait être acheminé vers le serveur secondaire (backup MX). En fonction de la tâche cron getmail4, vous devriez pouvoir rapatrier sur le primaire ou votre desktop le mail envoyé (le primaire étant éteint) vers votre adresse perso@domain.tld!
msg 1/1 (1996 bytes) delivered, deleted
1 messages (1996 bytes) retrieved, 0 skipped
A noter que getmail4 récupère les mails d’un server distant en se connectant en pop. Vous devez donc avoir courier-pop ou un équivalent d’installé sur le serveur secondaire en plus du courier-imap.
Ainsi vous ne perdrez plus de mail et bénéficierez d’une disponibilité de 100% de votre mail.
Merci à nordbeastie.org pour sa contribution!
English version soon on nordbeastie.org!