Lokaler IMAP Mirror
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
- ui = Quiet
[Account Account1] localrepository=LocalIMAP1 remoterepository=RemoteIMAP1
- 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