Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Sonntag
08
Juni 2014

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.