Da ich jetzt schon von mehreren Leuten gefragt wurde, wie ich hier Zuhause meinen (sehr gut funktionierenden) E-Mail Server aufgesetzt habe, möchte ich das mal in meinem Blog als kleines How-to beschreiben.
Ich setzte auf meinem Server Ubuntu in der Version 6.06 ein. Das How-to ist also darauf angepasst. Wer aber ein wenig Ahnung von Linux im Allgemeinen hat, wird diese Methode ohne Probleme auch auf jede andere Distri portiert bekommen.
Wunschvorstellung
Zunächst mal unser globales Ziel, dass wir mit dem lokalen Server erreichen möchten: Mit der Zeit sammeln sich einige verschiedenste E-Mail Postfächer an, die man entweder per POP3 oder IMAP abfragt und in seinem Client verwaltet. Wir wollen nun, dass unser Server alle E-Mail Konten in einem regelmäßigen Zeitraum abfragt (zB 5 Min.), herunterläd, auf Viren und Spam prüft und dann in einem zentralen Konto sammelt. Wir wollen dann mit unserem Client per IMAP diese eine Konto abfragen, in dem die Mails bereits nach Spam gefiltert, virengescannt und vorsortiert auf uns warten. Dieses IMAP Konto können wir dann natürlich mittels DynDNS von überall auf der Welt abfragen. Entweder direkt über unseren Client auf dem Laptop oder auch Webmaillösungen wie Squirrelmail oder RoundCube.
Abgrenzungen
Ich werde in diesem Artikel nur auf das empfangen und sortieren der Mails eingehen. Versenden von E-Mails über den eigenen Server kommt, wenn es sich um einen lokalen Server im Keller handelt, selten in Frage, da kaum ein seriöser ISP E-Mails von dynamischen IP-Adressen annimmt. Freemailer schon gar nicht. Zum Versenden von Mails greifen wir also auf den alt hergebrachten SMTP unseres ISP zu.
Voraussetzunegn und Programme
Wir werden für unsere Wunschvorstellung die folgenden Programme verwenden
- fetchmail zum Sammeln der E-Mails aller Konten
- procmail zum sortieren der Mails und weitergabe an den Spamfilter
- spamassassin als den ultimativen Spamfilter
- ClamAV zum Filtern nach Viren
- Cyrus als IMAP Server zum Abrufen der Mails
Auf gehts
Endlich gehts los. Zunächst einmal müssen wir alle Programme samt Abhängigkeiten installierensudo apt-get install fetchmail procmail spamassassin cyrus22-imapd cyrus22-admin clamav clamav-freshclam clamav-daemon sasl2-bin Wenn ich mich recht erinnere, sind einige Programme in universe, so zB cyrus22-admin. Diese sollten also entsprechend aktiviert werden. Achtung: Auf einer Ubuntu 6.10 Version ist der Cyrus-Daemon in der konfiguration, die wir brauchen verbuggt. Man muss dort zuerst einen Patch einspielen und dann die *.debs neu bauen, damit das funktioniert. Wie das geht, ist hier sehr gut zusammengefasst.
Jetzt geht es an die Konfiguration der einzelnen Programme
fetchmail
In der datei .fetchmailrc die wir optimalerweise in unserem Homeverzeichnis oder in /root/ ablegen sieht so aus:poll "pop3.server.tld" protocol pop3
user "{username}"
pass "{password}"
mda /usr/bin/procmail
Die Konfiguration im Einzelnen: in der ersten Zeile definieren wir den Server und das Protokoll mit dem wir unsere E-Mails abrufen möchten. In der zweiten und dritten Zeile setzen wir Benutzername und Passwort unseres Kontos, das wir abfragen. Die Vierte Zeile bestimmt unseren MDA, der die Mails entgegen nimmt und sortiert. Wir haben uns ja bereits für procmail entschieden und so geben wir den Pfad dort an. Um mehrere Konten abzurufen, muss dieser Block einfach beliebig oft mit den entpsrechenden Daten wiederholt werden.
Spamassassin
Selten hat mich ein Programm so beeindruckt wie Spamassassin! Spamassassin ist ein Perl-basierter Spamfilter des Apache Projekts, der – ich möchte behaupten – hervorragend funktioniert. Ich habe ihn seit gut einem Jahr "im Dienst" und kann eine Trefferquote von 98,42% verbuchen. So genannte "positive false", also Mails die fälschlicherweise als Spam eingestuft wurden, hatte ich in dieser Zeit sagenhafte 3 Stück. Halte ich für sehr gut ;o). Großartig konfiguriert habe ich den Spamassassin dabei nicht. die Datei /etc/spamassassin/local.cf sieht bei mir wie folgt aus:rewrite_header Subject [SPAM] Die Direktive "rewrite_header Subject" bewirkt, das Mails die als Spam identifiziert wurden, im Subject verändert werden, in dem ein [SPAM] davor geschrieben wird. Das ermöglicht das Clientseitige filtern mittels einer Regel oder ähnlichem. Die Anweisung "required_score 4.0" sagt, dass mindestens 4 "Spampunkte" erreicht werden müssen, damit eine Mail als Spam eingestuft wird. Die 4 ist nach meiner Erfahrung ein sehr guter Wert. Die meisten Spammails, die bei mir eintrudeln liegen zwischen 15 und 30 Punkten.
required_score 4.0
ClamAV
Normalerweise ist ein Virenscanner auf Linux eine recht unnötige Sache, die eigentlich nur Ressourcen verbraucht. Da wir hier aber höchstwahrscheinlich mit Heterogenen Netzwerken zu tun haben werden (also mit Windows Clients) wird die Sache schon wieder interessant. Konfigurieren lässt sich der Virenscanner durch den Befehl sudo dpkg-reconfigure clamav-base Die Einstellungen bleiben dabei soweit eigene Entscheidung, wichtig wäre nur noch, dass das Mail-Scanning eingeschaltet wird. Alternativ kann man auch in der Datei /etc/clamav/clamd.conf rumdoktern. Nach der Konfiguration sollte der Daemon bereits laufen. Das Startscript liegt dann unter /etc/init.d/clamav-daemon. Für die Automatische Aktualisierung der Virendefinitionen empfehle ich folgenden Befehl "freshclam -d" Dieser schaut regelmäßig nach Definitionsupdates.
Cyrus IMAP-Server
Die einrichtung des Cyrus zusammen mit dem saslauthd ist etwas kompliziertern (vor allem Umfangreicher). Ich erlaube mir daher einfach auf den sehr guten Wiki Artikel von Ubuntuusers zu verweisen, in dem der Schritt "Einrichten von Cyrus" abgearbeitet werden muss. Die Einrichtung von postfix kommt bei uns nicht zum Einsatz, die kann also getrost weggelassen werden.
Nachdem wir ein Benutzerkonto mittels diesen Befehlen hier angelegt habensudo cyradm --user cyrus --server localhostKönnen wir uns schon Tetsweise über unseren E-Mail Client auf den Server verbinden, Ordner anlegen und auch schon E-Mails von anderen Konten hin und her kopieren. Wichtig ist, dass der zu verbindende User auch im Linux System als Benutzer mit Passwort angelegt ist.
cm user.karl
Procmail
Procmail übernimmt die Sortierung unserer E-Mails. Diese können wir entweder über eine lokale .procmailrc Datei im Home Verzeichnis des Benutzers machen oder über eine globale /etc/procmailrc. Die Datei sieht bei mir so aus:#Konfiguration der MailsortierungDer Teil $DELIVER -e -a tiberian -m user.tiberian muss natürlich durch den eigenen Benutzer und die eigene Mailbox ersetzt werden.
#########################################
# Variablen setzen
DELIVER="/usr/sbin/cyrdeliver"
LOGFILE=/var/log/procmail.tiberian
VERBOSE=on
## Diese Regel leitet ALLE empfangenden Mails zusätzlich in die Datei "savemails" weiter. Das ist zum Testen eine gute Sache, da dann keine Mails verloren gehen, Wenn alles funktioniert, diesen Teil unbedingt auskommentieren.
:0 c
savemails
## Die Regel leitet alle Mails, die kleiner als 250kb sind an SPAMASSASSIN weiter
:0fw: spamassassin.lock
* < 256000
| spamassassin
## Alle Mails ab 15 Spampunkten werden in ein separates Verzeichnis sortiert
## Man könnte diese auch direkt löschen.
:0: spamassassin.lock2
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
| $DELIVER -e -a tiberian -m user.tiberian.Junk
## Schlussendlich alle Mails an tiberians Mailbox übergeben.
:0 w
| $DELIVER -e -a tiberian -m user.tiberian
~
Erster Testlauf
Jetzt haben wir alle Programme passend konfiguriert, sodass wir einen Testlauf starten können. Wir brauchen nichts weiter tun, als den Fetchmail anzuweisen, unsere E-Mails abzuholen. Alles andere läuft von dann an automatisch. Fetchmail starten wir zum Testen mit diesen Parametern: sudo fetchmail -kv(Alle die jetzt schreien "Hilfe, fetchmail als root? Is doch scheiße!": ich komme später noch darauf zurück). Der Parameter -k steht für Keep. Unsere E-Mails werden also erstmal auf dem POP3 Server belassen und nicht nach dem Abholen gelöscht. -v steht für Verbose, wir sehen also, was genau grade passiert. Wenn alles geklappt hat, landen die E-Mails nach einigen Sekunden im Cyrus IMAP verzeichnis und wir können sie in unserem Client lesen. Wenn nicht, ist irgendwas schiefgelaufen.
Debugging
Alle eingesetzten Programme schreiben logfiles, sodass wir das Problem schnell eingrenzen können. Fehler im Fetchmail sehen wir direkt beim aufruf mit -v. Cyrus schreibt Fehler nach /var/log/mail.err oder /var/log/mail.info. Falls etwas mit der Authentifizierung am IMAP Server fehlschlägt, schreibt sasl nach /var/log/auth.log. Procmail hatten wir ja in der procmailrc nach /var/log/procmail.tiberian geloggt. So können wir jeden Schritt nachvollziehen, wo die Mails hängengeblieben sind. Nicht zu vergessen ist auch, dass die Mails a) noch immer auf dem Servers unserers ISP sind (da -k) und b) das alle abgeholten E-Mails auch noch in die datei "savemails" kopiert wurden. Verloren geht also nichts. Wenn alles läuft, kann man den fetchmail mit dem Befehlsudo fetchmail -d 400 Als Daemon in den Hintergrund laden, der dann alle 400 Sekunden nach neuen E-Mails schaut.
Warum fetchmail als root?
Fetchmail meldet zum Start zu Recht, dass die Ausführung mit Root-Rechten wenig sinnvoll ist. Denn das ist sie in der Tat nicht. Allerdings ist es so, dass zur Weitergabe der Mails von Procmail an den Cyrus (über cyrdeliver) zwangsläufig rootrechte benötigt. Ich habe es bisher nicht geschafft, das ganze über einen normalen User abzuwickeln. Falls da jemand was weiß, wär ich für einen Kommentar dankbar.
Natürlich könnt Ihr auch die Kommentare für Fragen, Vorschläge und Kritik nutzen. Ich freue mich


