Inhaltsverzeichnis

Hat man daheim einen Homeserver im Einsatz, möchte man meistens auch einen Mailserver betreiben. Dies hat nämlich mehrere Vorteile:

  • Abruf aller Mailkonten in einem definierten Zeitintervall.
  • Prüfen der Mails auf Spam (und Viren).
  • Sortieren der Mails in Postfächer (ein oder mehrere User) und/oder darin enthaltenen Ordnern.
  • Zugriff auf seine Mails über IMAP und/oder Webinterface.
  • Zentrale Ablage aller erhaltenen Mails.

Ein solches Szenario habe ich auf einem Ubuntu Server 11.10 umgesetzt, auf anderen Linuxsystemen sollte dies grundsätzlich genauso möglich sein (mit anderen Programm-Pfaden etc.).

Zum Einsatz kommen dabei folgenden Programme:

  • fetchmail zum Abholen unserer eMails von diversen Konten über POP3 oder IMAP.
  • procmail zum Sortieren der erhaltenen Mails und zur Weiterleitung an Spamassassin und/oder ClamAV (ein Virenscan mittels ClamAV wurde von mir noch nicht eingesetzt).
  • spamassassin zum scannen der Mail auf Spam.
  • cyrus als IMAP-Server mit den Mailkonten.

Installation der nötigen Programme

 

Als erstes müssen wir natürlich die benötigten Programme installieren. Dies erfolgt mit nachfolgendem Befehlen:

Cyrus (und die dazugehörigen Pakete) installieren:

sudo apt-get install cyrus-imapd-2.2 cyrus-admin-2.2 sasl2-bin

Procmail:

sudo apt-get install procmail

Fetchmail:

sudo apt-get install fetchmail

Spamassassin:

sudo apt-get install spamassassin

 

Einrichten und Konfiguration der obigen Programme

 

Fetchmail

Als erstes wollen wir Fetchmail richtig konfigurieren, damit unsere Mails von den diversen eMail-Accounts abgeholt werden können. Bevor wir Fetchmail entsprechend einrichten, sollten wir uns darüber Gedanken machen, ob alle Accounts im selben Intervall geprüft werden sollen, oder ob verschiedene Zeitintervalle von Nöten sind. Ich prüfe alle Accounts alle 5 Minuten, außer Web.de, da dieser Dienst den Mailabruf per POP3 auf 15-Minuten-Intervalle limitiert (zumindest bei der Freemailer-Variante).

Wir erstellen uns also in /etc/ eine eine Datei mit dem Namen fetchmailrc in der wir die Account aufnehmen werden, die alle 5 Minuten geprüft werden sollen.

sudo nano /etc/fetchmailrc

Der Inhalt dieser Datei muss wie folgt aussehen:

poll "pop3.server.tld"
protocol pop3
user "username"
pass "password"
ssl
mda /usr/bin/procmail

Für jeden Account den wir prüfen wollen, brauchen wir einen solchen Block. Dabei schreibt man hinter „poll“ den Server, den man abrufen will und hinter protocol“, die Art des Mailservers, in unserem Fall pop3. In der Zeile „user“ setzen wir den Benutzernamen, mit dem wir uns anmelden wollen und in der Zeile „pass“ das dazugehörige Passwort. „ssl“ gibt an, dass wir eine gesicherte Verbindung zum Mailserver aufbauen wollen – wenn der Mailanbieter dies anbietet. Nach dem Abruf der Mails, wollen wir diese zum Sortieren an Procmail weiterleiten, dies definieren wir mit der letzten Zeile „mda“.

Für die Accounts, die wir in einem anderen Intervall prüfen wollen, hat es sich bewährt eine weitere fetchmailrc zu ertellen, z.B. fetchmailrc2.

Wer noch mehr zur Konfiguration von Fetchmail wissen will oder, wie man den Daemon für den Intervallabruf benutzt, dem sei der Artikel auf ubuntuusers.de empfohlen: Fetchmail.

Damit Fetchmail unsere Mails auch im richtigen Rhythmus abholt, richten wir einen entsprechenden Cronjob ein. Dazu führen wir nachfolgenden Befehl aus und wählen „nano“ als Editor.

sudo crontab -e

Wurde die crontab geöffnet fügen wir folgende Zeilen ein:

SHELL=/bin/sh
# PATH variable for cron
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11

*/5 * * * *     fetchmail -f /etc/fetchmailrc  > /dev/null 2>&1
*/16 * * * *    fetchmail -f /etc/fetchmailrc2 > /dev/null 2>&1

Die letzten zwei Zeilen führen unsere beiden fetchmailrcs aus. Die erste definiert, dass die fetchmailrc alle 5 Minuten ausgeführt und die zweite, dass fetchmailrc2 alle 16 Minuten ausgeführt wird.

Weiter Informationen findet man wiederum auf ubuntuusers.de: Cron.

 

Spamassassin

Spamassassin ist ein Perl-basiertes Programm, das im Stande ist Mails auf Spam zu prüfen und entsprechend zu markieren. Anhand bestimmter Kriterien bewertet Spamassassin die Wahrscheinlichkeit, dass eine Mail tatsächlich Spam ist. Dies geschieht zum einen mit statischen Tests (sind typische Phrasen enthalten? Wird HTML benutzt?) und zum anderen mit dynamischen Test nach dem bayesschen Prinzip. Bei der dynamischen Klassifizierung lernt Spamassassin dazu und gleicht seine Datenbank mit im Internet verfügbaren DBs ab. Wer mehr über Spamassassin erfahren will, dem sei das O’Reilly OpenBook mit dem Titel Mit Open Source-Tools Spam & Viren bekämpfen“  zu empfehlen.

Wir öffnen zur Konfiguration von Spamassassin die Datei local.cf:

sudo nano /etc/spamassassin/local.cf

Wir editieren folgende Zeilen bzw. entfernen die Kommentare:

rewrite_header Subject ****SPAM****
required_score 4.0

Mehr muss man eigentlich nicht anpassen, Spamassassin ist standardmäßig schon ausreichend konfiguriert. Die erste Zeile legt fest, was in den Header einer als Spam identifizierten Mail geschrieben wird und die zweite definiert, ab welchem „Score“ eine Mails als Spam klassifiziert wird.

 

Cyrus

Als nächstes machen wir uns daran den IMAP-Server einzurichten. Für detailliertere Informationen möchte ich wiederum auf ubuntuusers.de verweisen. Zuerst müssen wir Cyrus über die Datei /etc/imapd.conf konfigurieren.

Wir öffnen die /etc/imapd.conf mit einem Editor:

sudo nano /etc/imapd.conf

Jetzt passen wir folgende Zeilen an:

  • Kommentarzeichen # vor der Zeile admin: cyrus entfernen.
  • Kommentarzeichen # vor der Zeile sasl_mech_list: PLAIN entfernen.
  • Anpassen der Zeile zu: sasl_pwcheck_method: saslauthd
  • Die Zeile #sasl_auto_transition: no auskommentieren.

Nach unseren Anpassungen müssen die Zeilen vie folgt aussehen:

admins: cyrus
sasl_mech_list: PLAIN
sasl_pwcheck_method: saslauthd
#sasl_auto_transition: no

Nach dieser Konfiguration muss Cyrus komplett neu gestartet werden.

Als nächstes richten wir die Authentifizierungsmethode ein, mit der sich User am Mail-Server anmelden. Diese Authentifizierung erfolgt mittels Simple Authentication and Security Layer (SASL). Die User des Linuxsystems werden sich mit ihrem regulären Passwort am Mailserver anmelden können. Die Authentifizierung erfolgt dabei über den saslauthd-Dämon und nicht direkt über Cyrus. Dieser Dämon überprüft die zugehörigen Passwort direkt über die shadow-Passwortdatei des Systems.

Für diesen Zweck müssen wir die Datei /etc/default/saslauthd öffnen und entsprechend editieren:

sudo nano /etc/default/saslauthd

Wir passen die nachfolgenden Zeilen wie abgebildet an:

START=yes
MECHANISMS="shadow"

Abschließend muss Cyrus und der saslauthd-Dämon neu gestartet werden (unter Umständen empfiehlt sich ein kompletter Neustart des Systems):

sudo /etc/init.d/saslauthd restart
sudo /etc/init.d/cyrus2.2 restart

 

Nun können wir uns an das Einrichten der Postfächer machen. Als erstes verpassen wir dem Benutzer cyrus, der Bereits bei der Installation angelegt wurde ein Passwort:

sudo passwd cyrus

Danach melden wir uns an die Adminkonsole mit nachfolgendem Befehl an und werden mit einer Eingabeaufforderung entsprechend „begrüßt“.

sudo cyradm --user cyrus --server localhost
IMAP Password:
localhost>

Nun wollen wir ein Postfach anlegen:

cm user.testbenutzer

Absolut wichtig ist es, dass vor dem Benutzernamen „testbenutzer“ immer das Präfix user. steht! Ebenfalls muss der Benutzer im Linuxsystem als User mit dazugehörigem Passwort angelegt sein!

Wir haben erfolgreich ein Postfach für den Benutzer „testbenutzer“ angelegt und können uns bereit mit einem Mailclient auf den Server verbinden und Ordner anlegen oder Mails in das Postfach kopieren.

Für eine Fehlersuche sollte man die Logdateien bemühen, in die saslauthd bzw. Cyrus ihre Einträge hinterlegen:

  • Saslauthd: /etc/var/log/auth.log
  • Cyrus: /etc/var/log/mail.err

 

Procmail

Nun haben wir einen betriebsbereiten Mailserver und ein System mit dem wir die Mails abholen und auf Spam prüfen, jedoch wollen wir natürlich die Mails entsprechend sortieren und in die Ordner des Postfaches verteilen lassen. Diese Aufgabe erledigen wir mit Procmail. Procmail ist ein sehr mächtiges Tool für diese Aufgabe und kann auf unterschiedlichster Weise eingerichtet werden. Die Sortier- und Filterregeln legen wir in der Datei /etc/procmailrc fest.

Ein Seite mit interessanten Beispielen für das Erstellen von Regeln findet man z.B. hier oder man bemüht Google ;-)

Nachfolgend ist meine procmailrc aufgeführt, wie ich sie konfiguriert habe:

:#Konfiguration der Mailsortierung
#########################################
# Variablen setzen
DELIVER_SPAM="/usr/sbin/cyrdeliver -e -a testbenutzer -m user.testbenutzer.Spam"
DELIVER="/usr/sbin/cyrdeliver -e -a testbenutzer -m user.testbenutzer"
DELIVER2="/usr/sbin/cyrdeliver -e -a testbenutzer -m user.testbenutzer.Mailanbieter1"
DELIVER3="/usr/sbin/cyrdeliver -e -a testbenutzer -m user.testbenutzer.Mailanbieter2"
DELIVER4="/usr/sbin/cyrdeliver -e -a testbenutzer -m user.testbenutzer.Mailanbieter3"
LOGFILE=/var/log/procmail.testbenutzer
VERBOSE=on

## Die Regel leitet alle Mails, die kleiner als 250kb sind an SPAMASSASSIN weiter
:0fw  spamassassin.lock
* < 256000
| spamassassin
##
## Alle Mails, die von Spamassassin den Spam-Status: Yes
## bekommen haben, werden in ein separates Verzeichnis sortiert
:0 w  spamassassin.lock2
* ^X-Spam-Status: Yes
| $DELIVER_SPAM
###
:0 w
* ^TO_.*testbenutzer@mailanbieter1.de
| $DELIVER2
###
:0 w
* ^TO_.*testbenutzer@mailanbieter2.de
| $DELIVER3
###
:0 w
* ^TO_.*testbenutzer@mailanbieter3.de
| $DELIVER4
###
:0 w
| $DELIVER
~

Nachfolgend eine kurze Erläuterung des obigen Inhalts abseits der Kommentare:

  • Mit den Deliver-Variablen werden Befehle definiert, wie weiter unten die Mails sortiert werden sollen. Cyrdeliver ist sozusagen der „Zustelldienst“, der die Nachrichten in die richtigen Ordner definierter User einsortiert. „user.testbenutzer.Spam“ beschreibt dabei das Postfach, wie wir bereits oben festgestellt haben über „user.testbenutzer„, alles was nach dem zweiten Punkt folgt, ist der Ordnername, der im Postfach existieren muss. In diesem Fall heisst der Order „Spam„. Für jeden Ordner im Postfach, in den wir einsortieren wollen, wurde eine eigene Deliver-Variable definiert.
  • Die Anweisung * ^TO_.*testbenutzer@mailanbieter1.de gibt Procmail die Anweisung, wie er mit Mails verfahren soll, die als Empfänger testbenutzer@mailanbieter1.de haben. Ich habe mein System so konfiguriert, dass die Order so heißen wie die Mailanbieter, von denen ich meine Mails abhole.
  • Die letzte Deliver-Anweisung gilt für alle Mails, die in keines der obigen Muster fällt und wird direkt in das Postfach gespeichert.

SSL Verschlüsselung einrichten

Ein funktionierendes Mailsystem haben wir hiermit erfolgreich eingerichtet. Ich will jedoch meine Mails von Unterwegs nur ungern unverschlüsselt abholen/lesen, also wollen wir im abschließenden Schritt Cyrus SSL bzw. TLS beibringen.

Vorweg sei angemerkt, dass wir ein eigenes Zertifikat erstellen werden, dies jedoch den Nachteil mit sich bringt, dass unser Mail-Client zwangsläufig einen Zertifikatsfehler bringen wird. Dies kommt daher, dass unser privates Zertifikat von keiner offiziellen Stelle kommt, wie z.B. VeriSign. Da wir unserem eigenen Server jedoch in der Regel vertrauen können, können wir die Meldung ohne weiteres quittieren bzw. dauerhaft ausblenden (abhängig vom Mail-Client versteht sich).

Als erstes müssen wir OpenSSL installieren, falls noch nicht geschehen:

sudo apt-get install openssl

Unsere Zertifikate wollen wir im Ordner /etc/certs ablegen und erstellen diesen also:

sudo mkdir /etc/certs

Danach wechseln wir in der Verzeichnis und legen die Zertifikate an:

cd /etc/certs

openssl req -new -nodes -out req.pem -keyout key.pem
openssl rsa -in key.pem -out new.key.pem
openssl x509 -in req.pem -out ca-cert -req \
-signkey new.key.pem -days 999

cp new.key.pem /etc/certs/key.pem
rm new.key.pem
cat ca-cert >> /etc/certs/cert.pem
rm ca-cert

Dieser Zertifikate müssen wir jetzt in Cyrus einbinden, dazu editieren wir die Datei /etc/imapd.conf und fügen folgende Zeilen ein bzw. entfernen die Kommentare:

# SSL/TLS Options
#
tls_ca_file: /etc/certs/cert.pem
# File containing the global certificate used for ALL services (imap, pop3,
# lmtp, sieve)
tls_cert_file: /etc/certs/cert.pem

# File containing the private key belonging to the global server certificate.
tls_key_file: /etc/certs/key.pem

# Path to directory with certificates of CAs.
tls_ca_path: /etc/certs/

Abschließen müssen wir noch die /etc/cyrus.conf anpassen, um imaps zu aktiveren, damit wir uns verschlüsselt verbinden können. Dafür fürgen wir nachfolgende Zeile unter „SERVICES“ ein bzw. entfernen das Kommentarzeichen vor der Zeile.

imaps           cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100

 

Ausblick

User Mailserver mit verschlüsseltem Zugriff ist also einsatzbereit und fertig konfiguriert. Nun fehlen für mehr Komfort nur noch eine Weboberfläche, um auf die Mails zugreifen zu können und eine Möglichkeit Mails sicher zu versenden, ohne als Spammer gebrandmarkt zu werden (kommt erst gar nicht auf die Idee von einem Server mit dynamischer IP-Adresse Mails zu verschicken!)

Wie man dies realisiert, wird der Inhalt eines weiteren HowTos auf dieser Seite hier werden, seit gespannt!

Natürlich freue ich mich wie immer über konstruktive Kommentare, wie man das ein oder andere noch verbessern oder sicherer machen könnte. Wer Fehler findet bitte melden und wer einfach nur Fragen hat, ebenso ;-)

Autor

Hi! Ich bin Andreas und betreibe diese Seite, auf der ich über Themen rund um IT-Technik, Reisen und Fotografie schreibe. Dir gefallen meine Artikel und du möchtest mir einen virtuellen Kaffee ausgeben? Gerne! PayPal.me/imraz0r

5 Kommentare

  1. Pingback: Erweiterung des Mailservers mit Roundcube und Postfix | Imrazor.de

  2. habe es bisher nach der Anleitung hier eingerichtet – nach einer Fehlerausgabe habe ich die Einstellung von fetchmail mithilfe der GUI fetchmailconf ausgeführt und die entstandene Konfigurationsdatei in die fetchmailrc kopiert. Problem behoben.

  3. Hi,

    wollte nur noch sagen, dass die fetchmailrc bei mir noch einen CHMOD 600 benötigt hat, sonst hat er keine Mails geholt…

  4. Hallo, gibt von dieser Anleitung vielleicht auch eine neue Version für Debian 12 oder Ubuntu 20.04 LTS ?
    Habe versucht das auf ein Debian 12 System zu setzen, aber naja. da gibts wohl bisschen was, was geändert wurde…

    • Sorry, ich nutze seit vielen Jahren keinen eigenen Mailserver mehr, weswegen ich mit einer aktuellen Anleitung leider nicht dienen kann.

Einen Kommentar schreiben

Pin It