Fetchmail und das Server Zertifikat

Fetchmail holt von einem Server E-Mails ab und übergibt diese an z.B. postfix. Das ist eine praktische Variante einen internen Mailserver zu betreiben ohne das Sicherheitsrisiko von ausserhalb erreichbar zu sein.
Damit beim Abholen niemand mitliest wird die Verbindung per SSL gesichert.
Beispielkonfiguration:


poll pop.server.de uidl with proto POP3
  user "user@server.de" there with password "xyz" is localuser
  keep ssl sslfingerprint "A1:B2:C3:D4:E5:F6:18:29:3A:4B:5C:6D:7E:8F:91:A2"

Der MD5 Fingerprint kann sich auf dem Server ändern. Fetchmail korrigiert das nicht selbsttätig. Mit einem Skript lässt sich das beheben.


#! /bin/bash
# prueft, ob der md5 Fingerprint in der Datei fetchmailrc uebereinstimmt 
# mit dem Fingerprint auf dem Server
# Falls nein, dann wird versucht den neuen Fingerprint in der 
# fetchmailrc auszutauschen

FMRC=/etc/fetchmailrc
LOGFILE=/home/user/log/fingerprint.log
DATE=`date +%Y-%m-%d" "%H:%M:%S`
LOGMSG=$DATE
SUBJECT="Fingerprintpruefung Fetchmail"

#zuerst den aktuellen md5 Fingerprint aus der Datei holen
#Ich setze voraus, dass nicht mehrere unterschiedliche Fingerprints vorhanden sind
function get_fetchmailFingerprint
{
  while read line; do
    local fp=`echo "$line" | grep -oE '([A-F0-9]{2}:){15}[A-F0-9]{2}'`
    if [ "$fp" != "" ]; then
      break
    fi
  done < $FMRC
  echo $fp
}

FMFP=`get_fetchmailFingerprint`
if [ "$FMFP" = "" ]; then
  LOGMSG+=" Konnte den Fingerprint aus fetchmailrc nicht ermitteln. Kein Vergleich mit dem Server-Fingerprint"
  echo $LOGMSG >> $LOGFILE
  echo $LOGMSG | /bin/mail -s "$SUBJECT" "mail@admin.de"
  exit 1
fi

#Fingerprint vom Server holen (unnoetige Ausgaben verwerfen)
SERVERFP=`echo -n | openssl s_client -connect pop.server.de:995 2>/dev/null | openssl x509 -fingerprint -noout -md5 | cut -f2 -d'='`
if [ "$SERVERFP" = "" ]; then
  LOGMSG+=" Konnte den Fingerprint vom Server nicht ermitteln. Kein Vergleich mit dem Fetchmail-Fingerprint"
  echo $LOGMSG >> $LOGFILE
  echo $LOGMSG | /bin/mail -s "$SUBJECT" "mail@admin.de"
  exit 1
fi

LOGMSG+=" Server-Fingerprint: "$SERVERFP" - Fetchmail-Fingerprint: "$FMFP
if [ "$FMFP" = "$SERVERFP" ]; then
  LOGMSG+=" - stimmen ueberein."
  echo $LOGMSG >> $LOGFILE
  exit 0
fi

# An dieser Stelle sind die Fingerprints unterschiedlich -> in der Datei austauschen
# sed -i 's/A1:B1/A2:B2/g' fetchmailrc # ersetzt A1:B1 durch A2:B2 in allen Vorkommen
sed -i 's/"'$FMFP'"/"'$SERVERFP'"/g' $FMRC

# Kontrolle
FMFP=`get_fetchmailFingerprint`
if [ "$FMFP" != "$SERVERFP" ]; then
  LOGMSG+=" - FEHLER beim Rueckschreiben des Fingerprints. DRINGEND manuell erledigen!"
else
  # fetchmail muss die Konfigurationsaenderung mitgeteilt werden
  systemctl restart fetchmail
  LOGMSG+=" - Die Fingerprints wurden erneuert."
fi
echo $LOGMSG >> $LOGFILE
echo $LOGMSG | /bin/mail -s "$SUBJECT" "mail@admin.de"

exit 0

Mit einem Cronjob wird das Skript regelmäßig aufgerufen und es gibt keine lange Unterbrechung des E-Mail Eingangs.
Getestet auf openSUSE Linux 42.1

Ein Gedanke zu „Fetchmail und das Server Zertifikat“

  1. I truly wanted to post a brief comment to be able to thank you for some of the lovely pointers you are sharing at this site. My incredibly long internet search has at the end of the day been honored with excellent facts and techniques to share with my good friends. I ‘d express that most of us site visitors are really lucky to exist in a wonderful site with so many special people with insightful tips and hints. I feel rather blessed to have come across your site and look forward to so many more entertaining moments reading here. Thanks a lot once more for all the details.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *