Dienstag, 13. August 2013

fetchmail + POP3/IMAP + SSL/TLS + CERTCK (Debian Wheezy)

Im folgenden möchte ich beschreiben wie man fetchmail so einrichtet, das die E-Mails über eine gesicherte Verbindung (SSL-Verschlüsselung) abgeholt werden. Fetchmail soll ausserdem die Zertifikate prüfen um Man-In-The-Middle Attacks zu verhindern. Obwohl ich diese Installation und Konfiguration auf einen Debian Wheezy System ausgeführt habe sollte diese auch problemlos auf anderen Linux Derivaten/Versionen funktionieren.
Fetchmail soll in dieser Konfiguration die empfangenen E-Mails an procmail übergeben. Procmail realisiert eine einfache Filterung und übergibt die E-Mails dann an cyrus IMAP.

Installation der Packete

Als erstes Installieren wir die benötigten Packete/bzw. stellen sicher das diese bereits installiert sind (z.B. openssl).
apt-get install fetchmail procmail openssl
Nun beginnen wir damit procmail zu konfigurieren. Wir erstellen uns eine einfache Konfiguration welche E-Mails für nur einen Nutzer entgeben nimmt und diese direkt an cyrus übergibt. Später kann die procmail Konfiguration um E-Mail Filter/weitere Nutzer erweitert  werden. Wir erstellen und editieren daher die Datei /etc/procmailrc wie folgt.
DELIVER="/usr/sbin/cyrdeliver"
LOGFILE="/var/log/procmail.robert"
VERBOSE=on

:0w
| $DELIVER -a -q robert robert
Wir haben nun einen procmail Filter erstellt welcher alle eingehenden E-Mails an die Mailbox robert auf den cyrus IMAP Server via cyrdeliver ausliefert. Als nächstes konfigurieren wir den fetchmail Daemon.

Konfiguration fetchmail Daemon

Als erstes teilen wir fetchmail mit das dieser als Daemon/Service laufen soll. Wir editieren dazu die Datei /etc/default/fetchmail und ändern das START_DAEMON flag von no auf yes.
START_DAEMON=yes
Um fetchmail Scripte zu debuggen kann man in dieser Datei unter Options beispielsweise das verbose Flag setzen. Sobald die Scripte laufen sollte man die Optionen aber wieder löschen/auskommentieren.
OPTIONS=-v
Nun erstellen wir uns die Fetchmail Konfigurationsdatei. Wir legen dazu eine zentrale Konfigurationdatei unter /etc/fetchmailrc an. Wichtig ist auch das wir die Datei entsprechend schützen da hier später u.a. die Passwörter für unsere Postfächer stehen.
touch /etc/fetchmailrc
chmod 0600 /etc/fetchmailrc
chown fetchmail. /etc/fetchmailrc
Wir konfigurieren nun ein POP3 GMX Postfach. Als Beispiel soll die E-Mail Adresse example@gmx.de mit Passwort "secret" dienen. Die E-Mails sollen über POP3s (POP3 over SSL) abgeholt werden. Wir editieren die /etc/fetchmailrc wie folgt.
set daemon 300
set syslog
set postmaster root
poll pop.gmx.de with protocol POP3
       user 'example@gmx.de' there with password 'secret'
       mda '/usr/bin/procmail' options
       keep
       ssl sslcertck sslcertpath /etc/ssl/certs
       sslfingerprint ""
In den ersten drei Zeilen definieren wir den Poll Intervall (Abfrage der E-Mails aller 300 Sekunden, wir logen nach /var/log/syslog und definieren den postmaster.
Weiterhin haben wir jetzt ein gmx POP3 Postfach mit den Nutzer 'example@gmx.de' definiert. Die abgerufenen E-Mails werden alle an procmail übergeben. Für Testzwecke haben wir die Option keep angegeben. Diese Option verhindert das löschen der E-Mails von den POP3 Server, diese Option können wir später (sobald alles funktioniert) durch fetchall ersetzen. Die folgenden Optionen (ssl, sslcertck, sslcertpath und sslfingerprint) teilen fetchmail mit das SSL zu verwenden ist und das ausserdem die Zertifikate zu prüfen sind. Im folgenden werden wir nun noch den Eintrag für den sslfingerprint bestimmen.

Fetchmail sslfingerprint bestimmen

Wir werden nun für das gmx.de Postfach den md5 sslfingerprint bestimmen. Wir verwenden hierzu die openssl Tools.
root@xx:~# openssl s_client -connect pop.gmx.de:995 | openssl x509 -md5 -fingerprint
MD5 Fingerprint=3D:0C:9A:45:53:86:0B:5B:C8:65:0A:63:9D:EF:F3:C9
-----BEGIN CERTIFICATE-----
MIIEoDCCA4igAwIBAgIQQpEipkhuiS++nRBu
...
...
N+wf54qfy6f6vHW18AA1W3cshTXO6FmC805IA2lstqYjX9nc
-----END CERTIFICATE-----
Wir verbinden uns hierzu mit den SSL-Client von openssl mit den POP3 Server von gmx.de. Wichtig, wir verbinden uns auf Port 995 (Pop3s). Die Ausgabe des ersten openssl aufrufes "pipen" wir als Eingabe in den 2.Aufruf, in welchen wir jetzt den md5 fingerprint des Server Zertifikates extrahieren. Wir erhalten dann eine Ausgabe mit den Fingerprint und den Zertifikat. Wir kopieren den so erhaltenen fingerprint nun in unsere fetchmailrc.
poll pop.gmx.de with protocol POP3
       user 'example@gmx.de' there with password 'secret'
       mda '/usr/bin/procmail' options
       keep
       ssl sslcertck sslcertpath /etc/ssl/certs
       sslfingerprint "3D:0C:9A:45:53:86:0B:5B:C8:65:0A:63:9D:EF:F3:C9"
Nun können wir unseren Daemon testen...
service fetchmail start

tail -f /var/log/syslog

Referenzen

  • http://blog.busstra.net/?p=648
  •  http://www.chambreuil.com/2008/01/19/fetchmail-procmail-cyrus-sasl-ldap-roundcube-getlive
  • http://email.about.com/od/gmxmailtips/f/GMX_Mail_IMAP_Server_Settings.htm
  • http://www.madboa.com/geek/openssl/
  • http://www.gagravarr.org/writing/openssl-certs/others.shtml#ca-openssl

Keine Kommentare:

Kommentar veröffentlichen