Ubuntu 14.04 - Mailserver - Fetchmail
Fetchmail dient dazu entfernte Postfächer auf Mails zu prüfen und diese abzuholen und an ein lokales Postfach weiterzugeben.
Installiert wird fetchmail mit
sudo apt-get install fetchmail
Es gibt eine globale Konfigurationsdatei /etc/fetchmailrc und benutzerspezifische Dateien unter ~/.fetchmailrc.
Da ich ja virtuelle Benutzer habe, kann ich nur die globale Konfigurationsdatei verwenden. Zunächst werden ein paar generelle Einstellungen getätigt:
sudo nano /etc/fetchmailrc
In die Datei kommt folgender Inhalt:
# Name des administrativen Empfängers
set postmaster "postmaster@meinedomain.de"
# Direkte Fehlermeldungen an den Sender (default)
set bouncemail
# Keine Bounces an spam-blocked mail (default)
set no spambounce
# Errorlogging über syslog(3)
set syslog set properties ""
# Alle 300 Sekunden (5 min) ausführen
set daemon 300
set properties ""
Mails abholen
Um nun Mails von dem Benutzer account@provider.de mit dem Passwort geheim von einem externen Provider mit dem Mailserver pop.provider.de über eine verschlüsselte Verbindung über den IMAPS-Port abzuholen und den lokalen Postfächern zuzuweisen benötigt man eine solche Konfiguration:
poll pop.provider.de with proto POP3/IMAP
user 'account@provider.de there' with password 'geheim'
is 'me@meinedomain.de' here
keep ssl
Option | Funktion |
---|---|
poll | Entfernter Mailserver von dem E-Mails abgeholt werden sollen |
user | Benutzername des E-Mail Kontos auf dem entfernten Server |
password | Passwort des E-Mail Kontos auf dem entfernten Server |
is xxx here | Lokales Postfach in das die Mails zugestellt werden sollen |
ssl | Verwende SSL-verschlüsselte Verbindung um die Mail abzuholen (Port 993) |
sslcertck | Prüfung der Zertifikats mittels lokal vorliegender, vertrauenswürdiger Zertifikate |
sslcertpath | Pfad in dem die vertrauenswürdigen Zertifikate liegen |
sslproto | SSL Protokoll für die Verbindung (SSL2/SSL3/SSL23/TLS1) |
keep | Löscht die abgerufenen E-Mails nicht vom Server |
nokeep | Gegenteil von keep. Löscht die Mails nach dem Abruf. |
fetchall | Es werden alle E-Mails abgerufen, auch alle die schon geholt wurden. |
limit | E-Mails, die größer sind, als die Angabe, werden nicht heruntergeladen |
interval | Wenn das Skript abgearbeitet wird, wird nach dem n-ten mal dieser Eintrag gültig |
Fetchmail als Daemon
Um Fetchmail im Hintergrund als Daemon laufen zu lassen muss man die Datei /etc/default/fetchmail bearbeiten:
sudo nano /etc/default/fetchmail
Hier muss der Eintrag START_DAEMON auf yes gesetzt werden
# Declare here if we want to start fetchmail. 'yes' or 'no'
START_DAEMON=no
Danach kann man den fetchmail Dienst starten
sudo service fetchmail start
Self Signed SSL Zertifikat
Benutzt der Quell-Server ein selbst-signiertes SSL Zertifikat muss man ein paar weitere Optionen hinzufügen.
Zuerst holt man sich das Zertifikat vom Quell-Server:
echo "quit" | openssl s_client -starttls imap -connect localhost:imap
Aus der Ausgabe kopiert man sich jetzt die Zertifikate heraus und speichert sie z.B. nach /var/lib/fetchmail/.certs/. Dabei muss für jedes Zertifikat das der Server liefert eine eigene Datei angelegt werden. Liefert der Server also ein Server Zertifikat und ein CA Zertifikat, muss man zwei Dateien anlegen:
sudo mkdir /etc/ssl/fetchmail
sudo nano /etc/ssl/fetchmail/imap.mydomain.de.pem
sudo nano /etc/ssl/fetchmail/myca.pem
Als nächstes müssen die Zertifikate gehashed werden:
cd /etc/ssl/
c_rehash fetchmail
dann die fetchmailrc ergänzen:
poll pop.provider.de with proto IMAP
user 'account@provider.de there' with password 'geheim'
is 'me@mydomain.de' here
ssl sslcertck sslcertpath /etc/ssl/fetchmail sslproto ssl23
Jetzt sollte das selbstsignierte Zertifikat ordnungsgemäß funktionieren.
MD5 Fingerprint
Ich habe noch eine Variante gefunden bei der man den MD5 Fingerprint benutzt. Hab den Ansatz nicht weiter verfolgt, da die andere Version funktioniert. Musste aber ne Weile suchen wie man den MD5 Fingerprint bekommt. Also, für alle die, die wissen wollen wie man den MD5 Fingerprint bekommt:
echo "quit" | openssl s_client -connect imap.meinedomain.com:993 | sed -n /BEGIN/,/END/p | openssl x509 -noout -fingerprint
Oder falls man das Serverzertifikat schon gespeichert hat mit
openssl x509 -in my-srv-cert.pem -noout -fingerprint
Dieser kommt als weitere Option zum poll - Eintrag:
sslfingerprint '4A:5E:2F:7E:57:12:0A:85:66:9D:11:24:0E:9E:36:1A'
TLS verwenden
Die Verwendung des SSL-Ports 993 für IMAP ist ja inzwischen deprecated. Stattdessen soll man den Port 143 mit TLS verwenden was ebenfalls zu einer SSL-verschlüsselten Verbindung führt. Um Mails von einem Server mit TLS abzuholen benötigt man eine solche Konfiguration:
poll www.provider.de with proto IMAP
user 'account@meinedomain.de' there with password 'geheim'
is 'me@meinedomain.de' here
nokeep fetchall
sslcertck sslcertpath "/etc/ssl/fetchmail"
sslproto TLS1
Wobei die öffentlichen Server Zertifikate im Verzeichnis /etc/ssl/fetchmail zur Verifizierung liegen müssen.