Lokaler IMAP Mirror: Unterschied zwischen den Versionen

Aus /usr/space Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:
== Einrichtung ==
== 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.
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/
Die Anleitung folgt großteils https://www.j-dimension.com/setting-up-a-local-imap-cache-with-offlineimap/
Zeile 15: Zeile 17:
Jetzt müssen wir einen lokalen user anlegen unter dem dovecot und offlineimap laufen können, meiner heißt "user":
Jetzt müssen wir einen lokalen user anlegen unter dem dovecot und offlineimap laufen können, meiner heißt "user":


adduser user
  adduser user
sudo usermod -a -G mail user
  sudo usermod -a -G mail user
sudo usermod -a -G mail dovecot
  sudo usermod -a -G mail dovecot
id user ##########die ID brauchen wir später für die user-Datei
  id user ##########die ID brauchen wir später für die user-Datei


/etc/dovecot/conf.d/10-auth.conf
  /etc/dovecot/conf.d/10-auth.conf


Comment this line:
  Comment this line:
# !include auth-system.conf.ext
  # !include auth-system.conf.ext
Uncomment this line:
  Uncomment this line:
!include auth-passwdfile.conf.ext
  !include auth-passwdfile.conf.ext
Adjust these lines:
  Adjust these lines:
auth_mechanisms = plain login digest-md5 cram-md5
  auth_mechanisms = plain login digest-md5 cram-md5
disable_plaintext_auth = no
  disable_plaintext_auth = no


Once finished, Dovecot will authenticate users against a file /etc/dovecot/users
  Once finished, Dovecot will authenticate users against a file /etc/dovecot/users
sudo touch /etc/dovecot/users
  sudo touch /etc/dovecot/users
sudo chown root: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
  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:
  /etc/dovecot/conf.d/10-mail.conf, folgenden Parameter ändern:
mail_location = maildir:/var/mail/%u/Maildir
  mail_location = maildir:/var/mail/%u/Maildir


und die location setzen:
  und die location setzen:
mkdir /var/mail/mail@mypublicserver.org
  mkdir /var/mail/mail@mypublicserver.org
chown -R root:mail /var/mail/mail@mypublicserver.org
  chown -R root:mail /var/mail/mail@mypublicserver.org
sudo chmod -R g+w /var/mail/mail@mypublicserver.org
  sudo chmod -R g+w /var/mail/mail@mypublicserver.org
chmod -R a+rwxt /var/mail/
  chmod -R a+rwxt /var/mail/


service dovecot restart  
  service dovecot restart  


Ab jetzt sollten wir uns am lokalen server schon anmelden können!
Ab jetzt sollten wir uns am lokalen server schon anmelden können!
Zeile 59: Zeile 62:
=== OfflineIMAP ===
=== OfflineIMAP ===
Hier gibts ebenfalls eine Anleitung in obrigem Link, bzw. mehr infos unter https://wiki.archlinux.org/index.php/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:
Die config wird im homedir unseres erstellten users eingetragen:
Zeile 68: Zeile 73:
metadata = ~/.offlineimap.IMAP   
metadata = ~/.offlineimap.IMAP   
accounts = Account1   
accounts = Account1   
maxsyncaccounts = 1   
maxsyncaccounts = 1  <- keine Paralell-Syncs, führt zu Race-Konditionen!
ignore-readonly = no   
ignore-readonly = no   
# ui = Quiet   
# ui = Quiet   
Zeile 75: Zeile 80:
localrepository=LocalIMAP1   
localrepository=LocalIMAP1   
remoterepository=RemoteIMAP1   
remoterepository=RemoteIMAP1   
# autorefresh = 5
# autorefresh = 5 <- Daemon Mode, disable!




Zeile 84: Zeile 89:
remotepass=mysecretpassword   
remotepass=mysecretpassword   
ssl=no   
ssl=no   
# folderfilter = lambda foldername: foldername not in ['Trash']
folderfilter = lambda foldername: foldername not in ['Trash', 'Junk', 'Deleted Items']
maxconnections = 10  
maxconnections = 1  


[Repository RemoteIMAP1]   
[Repository RemoteIMAP1]   
Zeile 94: Zeile 99:
remotepass= mysecretpassword   
remotepass= mysecretpassword   
ssl=yes   
ssl=yes   
maxconnections = 2
maxconnections = 1
# folderfilter = lambda foldername: foldername not in ['Trash']
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
 


once done, just run "offlineimap" as user


=== Cron Job ===
=== Cron Job ===
Stupide kopiert aus dem Howto:  
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:
  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


#!/usr/bin/env bash
  This is the crontab line:
if pgrep offlineimap; then pkill offlineimap; sleep 10s; fi
  */5 * * * * /home/mylocaluser/scripts/offlineimap.sh
offlineimap -o -u quiet
  This will perform a synchronization every 5 minutes. Done!


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:
===Maildir Verwendung===
*/5 * * * * /home/mylocaluser/scripts/offlineimap.sh
Hier der Link zur Doku wie die Mails abgelegt werden:
This will perform a synchronization every 5 minutes. Done!
https://wiki2.dovecot.org/MailboxFormat/Maildir

Aktuelle Version vom 21. November 2019, 22:33 Uhr

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