immerda:OfflineIMAP

Aus immerda
Zur Navigation springen Zur Suche springen


Setup

  • OfflineIMAP kümmert sich um die Synchronisation zwischen Immerda und dem lokalen Verzeichnis.
    • Verbindung über TOR.
    • Passwort verschlüsselt abgespeichert (im aktuellen Beispiel in pass).
  • Dovecot kümmert sich um die Auslieferung des lokalen Verzeichnisses an dein E-Mail Program.

OfflineIMAP

Konfiguration

Normalerweise wird eine OfflineIMAP Konfiguration in der Datei ~/.offlineimaprc erstellt.

[general]
accounts = alice
pythonfile = ~/.offlineimap.py

[Account alice]
localrepository = alice-local
remoterepository = alice-remote

[Repository alice-local]
type = Maildir
localfolders = /var/mail/alice@immerda.ch/Maildir
nametrans = lambda name: re.sub('^\.', , name)

[Repository alice-remote]
cert_fingerprint = 2991ea70a0fa0d8cabf26050e69be43ec080fd0f
type = IMAP
keepalive = 300
starttls = no
ssl = yes
remotehost = ysp4gfuhnmj6b4mb.onion
remoteport = 993
remoteuser = alice@immerda.ch
remotepasseval = mailpasswd("email/immerda.ch/alice@immerda.ch")
folderfilter = lambda folder: not re.search('^(|INBOX\.(Trash\..*|spam))$', folder)
nametrans = lambda name: '.' + name

In dieser Konfiguration sind folgende Punkte zu beachten / anzupassen:

  • Es gibt immer zwei Repositories pro Account, eines lokal und eines remote (hier alice-local und alice-remote genannt).
  • Die E-Mail Adresse alice@immerda.ch muss durch deine eigene E-Mail Adresse ersetzt werden.
  • Das Passwort wird mithilfe des Scriptes ~/.offlineimap.py ausgelesen, das kann in deinem Setup anders sein.
    • remotepasseval gibt die Funktion an, mit welcher das Passwort ausgelesen wird.
    • email/immerda.ch/alice@immerda.ch ist der Password Store Pfad.
  • Diverse Ordner werden nicht synchronisiert ('^(|INBOX\.(Trash\..*|spam))$'):
    • INBOX.Trash.* (gelöschte Ordner)
    • INBOX.spam ("spam" / "Junk" / "junk", es braucht nicht alle)
    • "" (das sollte immer vorhanden sein)
  • Der cert_fingerprint ist der Fingerprint des Zertifikates von Immerda. Dieses kann von Zeit zu Zeit ändern.

Synchronisation

Um die Synchronisation immer wieder zu triggern, kannst du systemd verwenden. Du kannst dafür einen User Service erstellen (~/.local/share/systemd/user/offlineimap.service).

[Unit]
Description=OfflineIMAP Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/torsocks /usr/bin/offlineimap -c "${HOME}/.offlineimaprc"

[Install]
WantedBy=default.target

Einen entsprechenden Timer (~/.local/share/systemd/user/offlineimap.timer) startet dabei den Service immer wieder.

[Timer]
OnUnitInactiveSec=300s
Unit=offlineimap.service

Password Store

Das Passwort wird in diesem Beispiel in pass abgelegt. Das ist ein Passwort Manager, welcher deine Passwörter mithilfe von deinem GPG Key verschlüsselt.

Im aktuellen Beispiel sollte eine Passwort Datei in etwa wie folgt aussehen:

kei-k3ohf9foukoodeaV3zooshah^jet
login: alice@immerda.ch
offlineimap: Eis9teir^aeghee4ieseiMiphohofahN

Das erste ist dein Hauptpasswort, welches du brauchst um dich bei https://users.immerda.ch/ einzuloggen (dein Hauptpasswort). Das Passwort, welches OfflineIMAP verwendet, ist ein App Passwort. App Passwörter können über https://users.immerda.ch/app_passwords erstellt werden.

Das Script, welches die Passwörter ausliest, ist in diesem Beispiel unter ~/.offlineimap.py abgelegt:

#!/usr/bin/env python3

import subprocess
import sys


def mailpasswd(secret):
    proc = subprocess.Popen(
        ['pass', secret],
        stdout=subprocess.PIPE,
    )
    output = proc.communicate()[0].decode("utf-8").splitlines()
    retcode = proc.wait()
    if retcode != 0:
        return 
    line = [l for l in output if l.startswith('offlineimap: ')][0]
    password = line.split(": ", 1)[1]
    return password


if __name__ == '__main__':
    print(sys.argv[1])
    print(mailpasswd(sys.argv[1]))

Dovecot

Users

Pro Account muss ein User im Dovecot erstellt werden. Dazu solltest du eine Datei /etc/dovecot/users anlegen. Die Passwörter können mithilfe von doveadm pw -s SHA512-CRYPT erstellt werden. Dabei sollte das Passwort, welches auch OfflineIMAP nutzt, verwendet werden.

# user:password:uid:gid:(gecos):home:(shell):extra_fields
alice@immerda.ch:{SHA512-CRYPT}$6$Odd6jdsJirKzaT.u$zAWlZlgcGo0U1H21k6LfViAkl82.gM3F8ovbCGs54DEjuCP0bUNXZY69nvf1o.8IzsbcuBIL.3NY1Jug7jUtq/:1000:1000::/home/alice::

Authentication

Die Konfiguration /etc/dovecot/local.conf in etwa wie folgt aussehen:

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
}
mail_location = maildir:/var/mail/%u/Maildir:INBOX=/var/mail/%u/Maildir/.INBOX

Dovecot wird nach einem Neustart die E-Mails, welche von OfflineIMAP gesynct werden, an dein lokales E-Mail Program ausliefern.

Lokales E-Mail Program

Dein lokales E-Mail Program muss so umgestellt werden, dass es nicht mehr direkt von imap.immerda.ch, sondern neu von deinem lokalen Dovecot die E-Mails abholt.

IMAP-Server : localhost
Port        : 143 (STARTTLS (TLS Verschlüsselung) muss aktiviert sein, ohne Verschlüsselung funktioniert kein Zugriff!)
              oder 993 (SSL Verschlüsselung)
Benutzername: Dein Benutzername inkl. Domain, z.B. alice@immerda.ch
Password    : Dein Passwort

Der Postausgangsserver bleibt nach wie vor derselbe.