Lokaler IMAP Mirror

Aus /usr/space Wiki
Wechseln zu: Navigation, Suche

Linksammlung zum erstellen eines lokalen IMAP-Mirrors. Ziel ist die Synchronisation des Hauptmailservers im Netz mit einem lokalen Spiegel. Dadurch können einerseits Clients auch ohne Internetverbindung im lokalen Netzwerk auf die Daten zugreifen was die Arbeit wesentlich performanter macht, andererseits können einfache Filesystem-Snapshots durch die Ablage im lokalen Dateisystem durchgeführt werden. Weitere Anwendungsmöglichkeit wäre die automatisierte Bearbeitung/Sortierung von Mails ohne das IMAP-Protokoll nutzen zu müssen.

Einrichtung

Als Server kommt Ubuntu 19.10 als virtueller Container auf einem Proxmox Host. dovecot-imapd spielt lokaler IMAP-Server, offlieneimap synct mit dem Remote-Server.

ACHTUNG! offlineimap ist relativ RAM-hungrig, 512mb reichen bei mir nicht und führen zu kills. Ich empfehle mindestens 1gig!

Die Anleitung folgt großteils https://www.j-dimension.com/setting-up-a-local-imap-cache-with-offlineimap/

Pakete zu installieren:

 apt-get install dovecot-imapd offlineimap 

Dovecot

In Dovecot wird die lokale Benutzer-Authentifikation deaktiviert, dafür virtuelle User aus einem Textfile aktiviert und das Mailbox-Format geändert. Es folgen kopierte Bash-Befehle:

Jetzt müssen wir einen lokalen user anlegen unter dem dovecot und offlineimap laufen können, meiner heißt "user":

 adduser user
 sudo usermod -a -G mail user
 sudo usermod -a -G mail dovecot
 id user ##########die ID brauchen wir später für die user-Datei
 /etc/dovecot/conf.d/10-auth.conf
 Comment this line:
 # !include auth-system.conf.ext
 Uncomment this line:
 !include auth-passwdfile.conf.ext
 Adjust these lines:
 auth_mechanisms = plain login digest-md5 cram-md5
 disable_plaintext_auth = no
 Once finished, Dovecot will authenticate users against a file /etc/dovecot/users
 sudo touch /etc/dovecot/users
 sudo chown root:dovecot users
 
 Syntax vom user file: <mailbox>:{PLAIN}<password>:<userid>:<groupid>::/var/mail/<mailbox> ########  hier brauchen wir die user und group id von oben!
 mail@mypublicserver.org:{PLAIN}mysecretpassword:1000:1000::/var/mail/mail@mypublicserver.org
 /etc/dovecot/conf.d/10-mail.conf, folgenden Parameter ändern:
 mail_location = maildir:/var/mail/%u/Maildir
 und die location setzen:
 mkdir /var/mail/mail@mypublicserver.org
 chown -R root:mail /var/mail/mail@mypublicserver.org
 sudo chmod -R g+w /var/mail/mail@mypublicserver.org
 chmod -R a+rwxt /var/mail/
 service dovecot restart 

Ab jetzt sollten wir uns am lokalen server schon anmelden können!

SSL aktivieren https://wiki.dovecot.org/SSL/DovecotConfiguration#Dovecot_SSL_configuration nano /conf.d/10-ssl.conf ssl=required ssl_cert = </etc/dovecot/private/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.key


OfflineIMAP

Hier gibts ebenfalls eine Anleitung in obrigem Link, bzw. mehr infos unter https://wiki.archlinux.org/index.php/OfflineIMAP

Vorteil bei dieser Config, wir verbinden uns auch auf den lokalen Server per IMAP, müssen uns damit nicht ums Dateisystem sorgen machen.

Die config wird im homedir unseres erstellten users eingetragen:

touch /home/user/.offlineimaprc

folgendes Template für das file: [general] metadata = ~/.offlineimap.IMAP accounts = Account1 maxsyncaccounts = 1 <- keine Paralell-Syncs, führt zu Race-Konditionen! ignore-readonly = no

  1. ui = Quiet

[Account Account1] localrepository=LocalIMAP1 remoterepository=RemoteIMAP1

  1. autorefresh = 5 <- Daemon Mode, disable!


[Repository LocalIMAP1] type = IMAP remotehost=localhost remoteuser=mail@mypublicserver.org remotepass=mysecretpassword ssl=no folderfilter = lambda foldername: foldername not in ['Trash', 'Junk', 'Deleted Items'] maxconnections = 1

[Repository RemoteIMAP1] sslcacertfile = /etc/ssl/certs/ca-certificates.crt type=IMAP remotehost= imap.mypublicserver.org remoteuser= mail@mypublicserver.org remotepass= mysecretpassword ssl=yes maxconnections = 1 folderfilter = lambda foldername: foldername not in ['Trash', 'Junk', 'Deleted Items']


Wenn das SSL Zertifikat ungültig ist hilft es den Fingerprint einzufügen: openssl s_client -connect $SERVER:$PORT -showcerts | openssl x509 -fingerprint diesen in die config rein: cert_fingerprint = ke:yk:ey:ke:y.....

Möglicherweise wäre es nicht schlecht beim ersten Versuch dem remote-server ein "readonly=yes" zu geben...

soweit so gut, wir können nun einen Probelauf machen: sudo -u user offlineimap --dry-run ACHTUNG! Der wirft Fehler sofern die Ordnerstruktur nicht gleich ist, dank dem dry-run werden die nicht angelegt! Der richtige Sync hat problemlos funktioniert


Cron Job

Stupide kopiert aus dem Howto:

 OfflineIMAP has a daemon mode that can run in the background. However, I found it to be too unstable / unreliable. I therefore use a script that runs as a cron job:
 #!/usr/bin/env bash 
 if pgrep offlineimap; then pkill offlineimap; sleep 10s; fi 
 offlineimap -o -u quiet
 Make the script executable and add it to the users crontab:
 chmod a+x /home/mylocaluser/scripts/offlineimap.sh
 crontab -e
 This is the crontab line:
 */5 * * * * /home/mylocaluser/scripts/offlineimap.sh
 This will perform a synchronization every 5 minutes. Done!


Maildir Verwendung

Hier der Link zur Doku wie die Mails abgelegt werden: https://wiki2.dovecot.org/MailboxFormat/Maildir