Mailserver auf Debian mit IMAP, Smarthost und Filter
[options] verbose = 0 delete = true # true= mails werden auf Server gelöscht; false= Mails werden nicht gelöscht read_all = false # true= alle Mails werden abgeholt; false= nur neue Mails werden abgeholt message_log = ~/.getmail/mailbox1.log # Fehler beim Abholen werden in die Logdatei mailbox1 geschrieben [retriever] type = SimplePOP3Retriever server = mail.ihrprovider.de # Die Adresse des Mailservers des Providers username = username # Der Username des Mailservers password = passwort # Passwort, Achtung, steht im Klartext hier [destination] type = MDA_external # Das sagt aus, dass ein externes Programm die Mails übernimmt path = /usr/bin/procmail # Procmail nimmt alles in die Hand arguments = ("-dpostfach1", ) # Der Nutzer postfach1 bekommt die Mails überstellt
Wenn Sie mehrere externe Mailboxen besitzen, legen Sie für jede Mailbox eine eigene Konfigurationsdatei an. Benennen Sie jede eindeutig, damit Sie diese später auseinanderhalten können. Zudem legen Sie in jeder Datei fest, welcher Nutzer die Mails bekommen soll. Das wird im Bereich »arguments = ("-dxyz", )« festgelegt. xyz ist der jeweilige Nutzer, der die Mails bekommen soll.
Damit nur getmail die Datei lesen darf, ändern Sie die Zugriffsrechte wie folgt
cd /home/getmail chown getmail:getmail -R .getmail chmod 640 .getmail/*
Im Grunde haben wir nun unseren kleinen Daemon schon fertig, der später regelmäßig all unsere Mailboxen nach neuen E-Mails abklappert. Falls ein Firewall aktiv ist, muss Port 110 nach außen offen sein.
Installation und Konfiguration von Procmail
Procmail bekommt ja nun alle Mails und verteilt sie nach entsprechenden Schemata in die einzelnen Postfächer der Mailnutzer. Es kann sein, dass procmail schon auf dem System vorhanden ist. Falls nicht, wird es als Root mit apt-get install procmail installiert. Dann in das Verzeichnis des Users postfach1 wechseln und eine Konfigurationsdatei mit dem Namen .procmailrc und folgendem Inhalt anlegen:
MAILDIR=$HOME/mail # Hier kommen die Mails rein LOGFILE=$HOME/log/procmail.log # Fehlermeldungen werden hier gespeichert VERBOSE=on :0 * ^TO_.*beispiel.de # Mails, deren Empfänger auf beispiel.de endet, .test/ # landen in INBOX.test :0 * ^From: .*spammer@domain.com # Mails von einer bestimmten Adresse werden /dev/null # gelöscht :0 * ^TO_.*test2@beispiel.de # alle Mails an eine bestimmte Adresse werden .test2/ # in die INBOX.test2 einsortiert :0 ./ # Alles andere an direkten Posteingang
Zudem benötigen wir zwei neue Verzeichnisse:
mkdir mail mkdir log
Folgendes ist hier wichtig: Hinten müssen die Kommentare wieder entfernt werden, sonst werden diese in die Suchkriterien mit einbezogen und es wird nichts gefunden. Den Ordner ./ auf jeden Fall anlegen! Alternativ vielleicht auch .INBOX.mismatches nennen. Denn wenn einmal etwas nicht in den Regeln zutreffen sollte, dann landet die Mail immer hier. Dann kann man in der Logdatei nachsehen, warum die Mail nicht zugeordnet wurde, und die Regeln in .procmailrc anpassen.
Das ^ am Anfang einer Regel bedeutet, dass das Wort am Zeilenanfang gesucht wird. Ein To oder From im Header steht immer vorne. Mit einem .* vor einem Suchbegriff kann man mögliche zusätzliche Leerzeichen mit einschließen und vermeidet, dass bei zusätzlichen Leerzeichen nichts gefunden wird.
Erster Test
Um nun zu überprüfen, ob die ersten Regeln funktionieren und auch von der Mailbox abgerufen werden kann, musst man sich als User getmail einloggen. Hierfür müssen wir unsere Sperre in der Datei /etc/passwd rückgängig machen. In der Zeile des Benutzers getmail ändern wir /bin/false wieder auf /bin/bash ab. Jetzt funktioniert die Anmeldung:
su getmail
Ändern Sie zum Testen auch in der Getmail-Konfiguration delete = true auf delete = false, da Sie garantiert öfter testen müssen.
Führen Sie nun den Abruf aus:
getmail -v --rcfile ~/.getmail/mailbox1.conf
Wenn Sie mehrere Boxen abrufen, dann einfach diese zusätzlich anhängen:
getmail -v --rcfile ~/.getmail/mailbox1.conf --rcfile ~/.getmail/mailbox2.conf
Wenn alles gut läuft, bekommen Sie eine entsprechende Meldung:
getmail -v --rcfile ~/.getmail/mailbox1.conf getmail version 4.7.8 Copyright (C) 1998-2007 Charles Cazabon. Licensed under the GNU GPL version 2. SimplePOP3Retriever:blah@mail.beispiel.de:110: msg 1/14 (2428090 bytes) delivered msg 2/14 (3415 bytes) delivered msg 3/14 (3253 bytes) delivered msg 4/14 (2940 bytes) delivered msg 5/14 (4124 bytes) delivered msg 6/14 (3687 bytes) delivered msg 7/14 (4498 bytes) delivered msg 8/14 (5705 bytes) delivered msg 9/14 (5377 bytes) delivered msg 10/14 (3863 bytes) delivered msg 11/14 (4275 bytes) delivered msg 12/14 (5422 bytes) delivered msg 13/14 (3715 bytes) delivered msg 14/14 (4015 bytes) delivered 14 messages (2482379 bytes) retrieved, 0 skipped
Loggen Sie sich wieder aus:
exit
Gehen Sie in das Home-Verzeichnis des Postfach1 und sehen Sie unter mail nach, ob dort Mails unter new liegen. Wenn diese im Spam-Ordner gelandet sind, dann stimmt etwas mit der procmail-Regel nicht. Zum erneuten Test löschen Sie alle Verzeichnisse unter mail und wiederholen das solange, bis die Mails korrekt einsortiert werden. Es wird sicherlich hin und wieder Mails geben, die nicht sauber einsortiert werden. Für diese Gelegenheit müssen Sie dann die Regeln entsprechend anpassen.
Nun werden wir den Mailabruf automatisieren. Dazu öffnen wir, noch als User getmail angemeldet, die Crontab mit
crontab -e
Dort fügen wir den Getmail-Aufruf ein:
*/5 * * * * /usr/bin/getmail -v --rcfile ~/.getmail/mailbox1.conf \ --rcfile ~/.getmail/mailbox2.conf > /dev/null 2>&1
Das ruft den Prozess nun alle fünf Minuten auf. D.h. alle fünf Minuten werden die externen Mailboxen auf neue E-Mails überprüft und an procmail übergeben, das filtert und in die Mailboxen verteilt.
Wenn alles glatt läuft, dann melden Sie sich als getmail ab und sperren wieder den Zugang für diesen Benutzer. In /etc/passwd setzen wir die Shell dieses Benutzers wieder auf /bin/false.

