Table of Contents

IMAPS Proxy mit Perdition

Ich hatte die Herausforderung, IMAP Mailboxen, die auf einem Server hinter der Firewall liegen und lokal bzw. über Webmail erreichbar waren auch nativ über IMAPS im Internet anzubieten. Ich sträubte mich gegen das stupide Port-Forwarding des IMAP Ports vom externen Interface der Firewall auf den Mailserver und entschied mich für den Einsatz eines IMAP Proxies – die Wahl fiel auf Perdition. Der Proxy rüstet auch die fehlende Verschlüsselung nach.

Ausgangslage:

Folgendes Kochrezept brachte bei mir den Erfolg:

  1. Perdition-IMAP/POP3/Sieve-Proxy auf Proxy Host installieren
    # aptitude install perdition
  2. Perdition einstweilen stoppen
    # /etc/init.d/perdition stop
  3. Nicht benötigte Dienste deaktivieren, korrekte Library für Regular Expressions Mapping aktivieren:
    # grep -v ^# /etc/default/perdition | grep -v ^$
    RUN_PERDITION=yes
    POP3=no
    POP3_FLAGS=
    POP3S=no
    POP3S_FLAGS=
    IMAP4=no
    IMAP4_FLAGS=
    IMAP4S=yes
    IMAP4S_FLAGS="-M /usr/lib/libperditiondb_posix_regex.so.0"
    MANAGESIEVE=no
    MANAGESIEVE_FLAGS=
  4. Perdition dazu bringen, outgoing PLAIN IMAP zu sprechen – dazu in /etc/perdition/perdition.conf
    ssl_mode ssl_listen

    eintragen.

  5. Zertifikat erzeugen und installieren
    # cd /tmp
    # openssl req -new -x509 -newkey rsa:2048 -nodes -out perdition.crt.pem -keyout perdition.key.pem -days 730
    # mv perdition.*.pem /etc/perdition/
  6. Generische Mapping-Table erstellen (alle Mailboxen auf dem gleichen IMAP-Host):
    # grep -v ^# /etc/perdition/popmap.re | grep -v ^$
    .*: 172.16.1.9:143
  7. Kosmetik: Timing Problem beim Start von Perdition beheben – in /etc/init.d/perdition im IMAP4S Block zwischen “start-stop-daemon” und dem “if [ ! -e /var/run/perdition.imaps/perdition.imaps.pid ]; then” ein “sleep 2” einfügen – evtl. braucht start-stop-daemon zu lange um beim Start sein PID File zu erzeugen der ganze Block sieht dann so aus:
    if [ "$IMAP4S" = "yes" ]; then
       start-stop-daemon --start --verbose \
         --pidfile /var/run/perdition.imaps/perdition.imaps.pid \
         --exec /usr/sbin/perdition.imaps -- $FLAGS $IMAP4S_FLAGS
       sleep 2
       if [ ! -e /var/run/perdition.imaps/perdition.imaps.pid ]; then
         echo "Unable to start IMAP4S Daemon (maybe another process is listening to the same port?)"
       fi
    fi
  8. Perdition starten
    # /etc/init.d/perdition start
    Starting /usr/sbin/perdition.imaps...

Abschließend