Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.
Bonjour à tous,
Aujourd’hui, on va voir comment réaliser une sauvegarde hors-ligne (et en différentiel) de vos emails ProtonMail de façon automatique sur un serveur Debian 10 sans avoir à passer par le bridge protonmail.
Il est important de noter que vos emails seront déchiffrés une fois sorti de ProtonMail, il est donc important de bien sécuriser ce serveur (idéalement mettez-le chez vous, sur une vm ou un raspberry par exemple).
Installation des prérequis
Nous allons utiliser Hydroxide pour servir de pont IMAP avec ProtonMail et un script Python pour le backup mail.
Il va donc falloir installer Python et Go (1.13 minimum) sur votre serveur :
echo "deb http://deb.debian.org/debian buster-backports main" >> /etc/apt/sources.list apt update && apt install git python3 -y apt install golang-go/buster-backports golang-src/buster-backports
Ensuite, installez Hydroxide :
cd /opt && git clone https://github.com/emersion/hydroxide.git && cd hydroxide go build ./cmd/hydroxide chmod +x hydroxide
Maintenant, téléchargez le script de backup IMAP :
cd /opt wget https://raw.githubusercontent.com/rcarmo/imapbackup/master/imapbackup.py chmod +x imapbackup.py
Configuration du pont IMAP et de la sauvegarde
Lancez l’authentification sur Hydroxide :
/opt/hydroxide/hydroxide auth machin@protonmail.com
Ensuite, rentrez votre mot de passe et votre code de double authentification.
Un mot de passe « Bridge password » vous sera communiqué, gardez-le pour la suite :
Lancez maintenant le serveur IMAP intégré à Hydroxide en background :
/opt/hydroxide/hydroxide imap &
Créez maintenant un dossier qui contiendra vos sauvegardes et allez dedans :
mkdir /root/mailbck cd /root/mailbck
Ici, lancez un backup de vos emails :
python2.7 /opt/imapbackup.py -s 127.0.0.1:1143 -u machin@protonmail.ch -p BRIDGE_PASSWORD -t 300 -f "INBOX, Sent, ..."
Remplacez évidemment l’adresse email et le mot de passe avec celui qui vous a été fourni juste avant.
L’option -t sert à définir le timeout (dans mon cas j’ai un dossier avec 40000 emails qui nécessite cela) et l’option -f sert à définir les dossiers spécifiques que vous souhaitez récupérer (je ne sauvegarde ni les spams, ni les drafts, ni certains dossiers avec des notifications automatiques).
La sauvegarde devrait se faire comme ceci :
Automatisation de la sauvegarde
Créez un script dans votre dossier personnel :
nano /root/backup-email.sh
Remplissez-le comme ceci (en adaptant votre commande de sauvegarde avec ce que vous aurez retenu avant) :
date /opt/hydroxide/hydroxide imap & cd /root/mailbck python2.7 /opt/imapbackup.py -s 127.0.0.1:1143 -u machin@protonmail.ch -p BRIDGE_PASSWORD -t 900 -f "INBOX, Sent, Starred, Archive, TAP, Time4VPS, Résiliation, OldEmails, BJM"
Sauvegardez et rendez-le exécutable :
chmod +x /root/backup-email.sh
Lancez-le pour un test :
/root/backup-email.sh
Lorsque c’est tout bon, ouvrez votre cron :
crontab -e
Ajoutez la ligne suivante (pour moi, une sauvegarde toutes les 6h) :
0 */6 * * * /root/backup-email.sh > /var/log/backup-email.last.log
Attendez et vérifiez votre log, idéalement, faites-le vous parvenir par email ou autre moyen afin d’avoir un œil dessus en continu (ce que je vous recommande fortement si vous avez la 2FA, les tokens d’authentification expirent rapidement) 🙂
Si votre token expire, relancez une authentification sur Hydroxide :
/opt/hydroxide/hydroxide auth machin@protonmail.com
Ensuite, modifiez votre mot de passe dans le script de backup.
Bonus : Intégration avec Ansible
Pour piloter tout cela avec Ansible, je ne me suis pas claqué un neurone, voici mon playbook : https://raw.githubusercontent.com/stylersnico/own-ansible-update-tools/master/ansible/playbooks/backup-email.yml
Liens externes et remerciements
- Hydroxide : https://github.com/emersion/hydroxide
- ImapBackup : https://github.com/rcarmo/imapbackup