Lokale Kopie des imap-Postfachs mit ssh-Tunnel, offlineimap und dovecot

Auch “offline” eMail lesen

…und zwar unabhängig vom verwendeten MUA (Mail User Agent) oder zu neu-deutsch Mailprogramm.

Verschiedene Mailprogramme bieten zwar oft die Möglichkeit eine offline Kopie es imap-Postfachs anzulegen, doch machen sie dies exklusiv für sich selbst, so dass man, wenn man den MUA wechselt oder mit mehrere parallel verwendet (z.B. KMail, alpine und Thunderbird) n Kopien auf seinem Laptop/ Netbook hat…

Da wollte ich Abhilfe schaffen. Genügen Resourcen für einen imap-Server hat mittlerweile jedes aktuelle Netbook: 1GB RAM, 120Gb Platte sind ja schon Minimum und es geht auch mit weniger. imap “spricht” jedes ernst zu nehmende Mailprogramm, so dass das wohl das optimale “Shared Medium” für eMails ist.

dovecot als lokaler imap-Server

Ich habe mich mit dovecot für einen modernen imap-Server entschieden. Er ist leicht zu konfigurieren und in jeder halbwegs aktuellen Linux-Distribution als Paket verfügbar.

Also dovecot-Paket(e) für dovecot-imap mittels distributionsspezifischem Tool (apt, zypper, yum…) installieren. Dann für den lokalen Gebrauch wie folgt minimal konfigurieren, indem man

/etc/dovecot/dovecot.conf

wie folgt modifiziert bzw. ergänzt:

protocols = imap
# oder wer auch an localhost mit SSL arbeiten möchte:
#protocols = imap imaps

listen = localhost
# ..oder auskommentieren, wenn man die gleichen Probleme wie ich mit KMail hat
# s.a. hier mein Blog-Artikel...
# With listen = localhost KMail can't access the imap-server...
#listen = localhost

disable_plaintext_auth = no

# Ich traue den localhost-Verbindungen ohne SSL
ssl=no

mail_location = maildir:~/Maildir

mail_privileged_group = mail

protocol imap {
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
protocol managesieve {
}
auth default {
  mechanisms = plain
 passdb pam {
  }
  userdb passwd {
  }
  user = root
  !include_try /etc/dovecot/auth.d/*.auth
}
dict {
}
plugin {
}
!include_try /etc/dovecot/conf.d/*.conf

offlineimap konfigurieren

offlineimap synchronisiert entweder ein imap-Postfach eines Servers mit einem lokalen Maildir Store oder zwei imap-Postfächer, was wir hier machen wollen.

Lokal haben wir unseren dovecot und den Remote imap-Server binden wir gleich per SSH-Tunnel an. Also die

~/.offlineimaprc

wie folgt sinngemäß mit eigenen Login-Namen etc. erstellen bzw. ergänzen/ modifizieren:

[general]
metadata = ~/.offlineimap.IMAP
accounts = MyImap
maxsyncaccounts = 1
ignore-readonly = no
ui = Blinkenlights

[Account MyImap]
localrepository = LocalMyImap
remoterepository = RemoteMyImap
autorefresh = 60

[Repository LocalMyImap]
type = IMAP
remotehost = localhost
remoteport = 143
maxconnections = 5
remoteuser = mylocallogin
remotepass = SuperGeheim
holdconnectionopen = yes
keepalive = 60

[Repository RemoteMyImap]
type = IMAP
remotehost = localhost
remoteport = 10143
remoteuser = myremotelogin
remotepass = NochGeheimer
maxconnections = 5
holdconnectionopen = yes
keepalive = 60

So wird offlineimap alle 60 Minuten mit fünf Threads parallel die imap-Postfächer LocalMyImap und RemoteMyImap synchronisieren und dies über das Blinkenlights Interface schön darstellen.

ssh-Tunnel für imap

Jetzt muss noch der Remote imap-Server an Port 10143 von localhost verfügbar gemacht werden, wo offlineimap ihn erreichen möchte. – Selbstverständlich ist hier Voraussetzung, dass man Shell-Zugriff per SSH auf seinen imap-Server hat. Sonst muss mal die offlineimp-Konfiguration als Remote-Server auf einen externen Server umstellen (und dann natürlich SSL nicht vergessen)…

Ein einfaches

sudo ssh -f -N -L 10143:localhost:143 remoteuser@imap.remoteserver.tld

macht dies, indem es als User “remoteuser” auf den Server imap.remoteserver.tld verbindet (hier natürlich passenden User und Server einsetzen).

Ich hole mir hier auch noch gleich meinen SMTP-Server durch den SSH-Tunnel auf Port 10025 und nutze autossh (schönes Tool). Also:

sudo autossh -f -N -L 10143:localhost:143 remoteuser@imap.remoteserver.tld -L 10025:localhost:25 remoteuser@smtp.remoteserver.tld

..zwei Fliegen mit einer Klappe.

Ideen für Änderungen…

Ohne Tunnel

Eine mögliche Änderung habe ich oben schon erwähnt: Mit offlimeimap läßt sich natürlich auch mit einem entfernten imap-Server synchronisieren (wenn man z.B. keinen SSH-Tunnel hat oder haben möchte). Dazu einfach in

[Repository RemoteMyImap]

remotehost etc. passend ändern:

remotehost = localhost

und mit

ssl = yes

für Sicherheit sorgen.

…oder mit automatischem SSH-Tunnel

Oder man möchte einen SSH-Tunnel, den offlineimap selber aufbaut, weil man dies nicht “per Pfote” machen möchte. Hier gibt es folgende Optionen in der .offlineimaprc in der :

[Repository RemoteMyImap]

preauthtunnel = ssh -q imap.server.tld

# With on server side ~/.ssh/authorized_keys:
command="/usr/bin/imapd ~/Maildir" ssh-rsa xxxxxxxx(key)

Für Details verweise ich auf die Ergebnisse einer Suche bei der Lieblingssuchmaschine…