31.
August
2010
Nach dem gestrigen Beitrag wie man Postfix installiert und E-Mails über einen Smarthost versenden kann, geht es heute mit dem eigenen IMAP-Server und dem Abrufen von bestehenden E-Mailkonten weiter.
Der IMAP-Server wird die auf dem System liegenden Mails für einen Client zur Verfügung stellen, ein anderes Programm (fetchmail
) läd derweil die E-Mails von den Servern und sortiert sie über procmail
dem Postfach zu. Damit alles schön automatisch abläuft gehört natürlich auch noch ein entsprechender Eintrag in der crontab
dazu.
Nach dem Überblick was auf dieser Seite zu finden ist nun aber gleich weiter mit dovecot
als IMAP-Server.
Anstatt mich wieder mit Courier zu plagen bin ich den Tipps gefolgt, welche dovecot
als IMAP-Server empfehlen. Leider sind viele Anleitungen nicht mehr ganz aktuell und das zur Installation benannte Paket »dovecot« führt nur zu einer Fehlermeldung:
Paket dovecot ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es veraltet
ist oder nur aus einer anderen Quelle verfügbar ist.
Doch die folgenden Pakete ersetzen es:
dovecot-common
E: Paket dovecot hat keinen Installationskandidaten
Immerhin wird man darauf hingewiesen, wie der korrekte Paketname für die Installation lautet. Da der Server IMAP zur Verfügung stellen soll, wird das dafür benötigte Paket gleich in einem Rutsch installiert:
apt-get install dovecot-common dovecot-imapd
Die folgenden Schritte basieren auf der englischsprachigen Anleitung Set Up a Debian or Ubuntu Machine as a Maildrop und sind nur im Detail abgewandelt.
Nach der Installation von dovecot
muss die Konfiguration durch Änderung in der Konfigurationsdatei /etc/dovecot/dovecot.conf
auf IMAP umgestellt werden. Der entsprechende Block sieht wie folgt aus:
# Protocols we want to be serving: imap imaps pop3 pop3s managesieve
# If you only want to use dovecot-auth, you can set this to "none".
#protocols = imap imaps
Da ich eine sichere Verbindung mittels IMAP über SSL installieren wollte, gab ich imaps
als einzig gültiges Protokoll an:
protocols = imaps
Damit IMAP über SSL funktioniert, muss noch ein entsprechendes Zertifikat erstellt werden. Den Aufruf habe ich von der bereits verlinkten Anleitung übernommen:
openssl req -new -x509 -nodes -out /etc/ssl/certs/dovecot.pem
-keyout /etc/ssl/private/dovecot.pem -days 5000
Der Aufruf ist natürlich in einer Zeile zu schreiben und wurde hier nur wegen der beschränkten Breite umbrochen.
Der Aufruf verlangt ein paar Angaben, welche für die Erstellung des Zertifikats notwendig sind. So muss beispielsweise der Name eingegeben werden. Bei »common name« sollte der Hostname (mitsamt Domain sofern existent) angegeben werden. Die geforderte E-Mailadresse sollte ebenfalls gültig sein.
Die Angabe das Zertifikat sei für 5'000 Tage gültig sorgt dafür, dass das Zertifikat erst nach über 13 Jahren ungültig wird. Bis dahin wird der Mailserver vermutlich schon einige Jahre lang nicht mehr laufen.
Sofern dovecot
noch nicht läuft kann es durch die Eingabe dovecot
gestartet werden.
Ob dovecot
läuft und wie gewünscht auch per IMAPS über den Port 993 erreichbar ist, kann über eine Verbindung mittels openssl
überprüft werden:
openssl s_client -connect localhost:993
Nach einigen Informationen zum Zertifikat meldet sich dovecot
und wartet auf eine Eingabe:
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE AUTH=PLAIN
] Dovecot ready.
Durch die Abfrage zu was dovecot
in der installierten Version fähig ist meldet sich der Server entsprechend zurück:
1 CAPABILITY
Sollte eine ähnliche Rückgabe wie bei mir zur Folge haben:
* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISP
LAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE U
IDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHI
N CONTEXT=SEARCH AUTH=PLAIN
1 OK Capability completed.
Nachdem alles wie gewünscht funktioniert kann die Verbindung zum Server beendet werden:
2 LOGOUT
Sollte der Server nicht nur lokal sondern auch von anderen Rechnern im Netzwerk genutzt werden können, ist der Port 993 bei den Firewall-Regeln entsprechend freizugeben.
Bereits jetzt sollte der IMAP-Server über einen beliebigen Client mit einem gültigen Benutzernamen des Linuxsystems aufgerufen und sich mit den Zugangsdaten eingeloggt werden können.
Zunächst die Variante, bei welcher fetchmail
einfach an der Kommandozeile aufgerufen wird. Weiter unten auf der Seite erläutere ich auch die Variante fetchmail
als Daemon im Hintergrund laufen zu lassen.
Die E-Mails werden von Mailservern per POP3 heruntergeladen und sollen anschließend in Verzeichnisse sortiert werden. Auch die Überprüfung auf Viren und Spam ist möglich. fetchmail
übergibt dabei die E-Mails an procmail
, welche die Verteilung übernimmt. Zunächst jedoch nur wie fetchmail
eingerichtet werden kann.
fetchmail -kv -m "/usr/bin/procmail -d %T"
Wenn alles läuft wie gewünscht kann die Option -k
weggelassen werden:
fetchmail -v -m "/usr/bin/procmail -d %T"
Die Option -k
steht für »keep« und wird in der Anleitung mit »Don’t delete seen messages from server« beschrieben. Erhalten bleibt -v
, da die Ausgabe weiterhin »verbose« stattfinden soll.
Wird aus dem -kv
ein -v
, werden E-Mails auf dem Server gelöscht sobald sie heruntergeladen wurden.
In manchen Anleitungen ist die Option -K
angegeben. Mit versalem »K« wird fetchmail
dazu »gezwungen« bereits heruntergeladene E-Mails löschen. Da dies auch ohne diese Option der Fall ist, habe ich kein -K
im Aufruf. Dies sei nur am Rande erwähnt. Der Vollständigkeit halber noch die Dokumentation der beiden Optionen:
-k | --keep
(Keyword: keep) Keep retrieved messages on the remote mailserver. Normally,
messages are deleted from the folder on the mailserver after they have been
retrieved. Specifying the keep option causes retrieved messages to remain
in your folder on the mailserver. This option does not work with ETRN or ODMR.
-K | --nokeep
(Keyword: nokeep) Delete retrieved messages from the remote mailserver. This
option forces retrieved mail to be deleted. It may be useful if you have
specified a default of keep in your .fetchmailrc. This option is forced on
with ETRN and ODMR.
Einige Anleitungen geben an, dass man den Abruf seiner Postfächer in der Datei /etc/fetchmailrc
angeben soll. Dies macht meiner Meinung nach jedoch wenig Sinn, da ich als Benutzer die Angaben über meine E-Mailaccounts in meinem Verzeichnis haben sollte.
Daher ist bei mir die eben genannte leer beziehungsweise nicht vorhanden. Alle Angaben für fetchmail
befinden sich bei mir in der ~/.fetchmailrc
.
Die Zugangsdaten für den Abruf der E-Mails werden in dieser Datei samt Passwort im Klartext eingegeben. Daher sollten nach dem Erzeugen der Datei die Leserechte entsprechend angepasst werden.
Der Aufbau eines Aufrufs ist sehr simpel:
poll SERVER with protocol POP3 user "USERNAME" there with password "PASSWORD" options ssl
Dabei sind natürlich die Angaben entsprechend zu ersetzen: »SERVER« bezeichnet die Adresse des Mailservers, von welchem die E-Mails abgerufen werden sollen. »POP3« das Protokoll, über welches die Verbindung zum eben genannten Server aufgenommen werden soll. »USERNAME« und »PASSWORT« entsprechen den Zugangsdaten zum Account auf diesem Mailserver. Weiterhin können noch optionen angegeben werden, beispielsweise »ssl«.
Je nach Anleitung und persönlichem Geschmack wird der Aufruf mal in einer Zeile geschrieben, mal in Blöcken oder auch jeder einzelne Punkt in einer Zeile. fetchmail
arbeitet alle »Schreibweisen« gleich ab, es ist eher als »Freiheit des Administrators« zu sehen wie die Aufrufe geschrieben werden. Dies sei am Rande erwähnt, da die diversen Anleitungen für fetchmail
häufig unterschiedlichste Schreibweisen verwenden.
Wenn fetchmail
als Daemon im Hintergrund ausgeführt werden soll, unterscheidet sich die Konfiguration ein wenig. Ich gehe weiter unten auf dieser Seite darauf ein.
Wenn alle Einträge vorgenommen wurden, müssen noch die Zugriffsrechte der Datei geändert werden. Ansonsten quittiert fetchmail
den Versuch gestartet zu werden mit einer Fehlermeldung:
Datei /home/amy/.fetchmailrc darf nicht mehr Zugriffrechte haben als -rwx--x-- (0710).
Die entsprechenden Rechte sind schnell gesetzt:
chmod 710 ~/.fetchmailrc
Theoretisch könne bereits jetzt ein Testaufruf erfolgen. Jedoch sollte zunächst auch ein Blick auf die Konfiguration von procmail
geworfen werden.
Bei procmail
werden zwei Konfigurationsdateien berücksichtigt. Zunächst die globale Konfigurationsdatei /etc/procmailrc
, weiterhin die jeweilige ~/.procmailrc
in den Verzeichnissen der Benutzer.
Die globale Konfigurationsdatei kann wie folgt übernommen werden:
# file: /etc/procmailrc
# system-wide settings for procmail
SHELL="/bin/bash"
SENDMAIL="/usr/sbin/sendmail -oi -t"
LOGFILE="/var/log/procmail.log"
DEFAULT="$HOME/Maildir/"
MAILDIR="$HOME/Maildir/"
Manche Anleitungen setzen bereits in diese globale Konfigurationdatei die Zustellung der einzelnen Benutzer.
Wie schon bei fetchmail
liegt bei mir die Konfigurationsdatei für procmail
im Benutzerverzeichnis und ist nicht mit der globalen Konfigurationsdatei »vermischt«. Die Datei ~/.procmailrc
kann beispielsweise wie folgt aussehen:
DEFAULT="$HOME/Maildir/"
MAILDIR="$HOME/Maildir/" # Dieses Verzeichnis muss als Maildir existieren
LOGFILE="$HOME/.procmaillog" # Ort der Protokolldatei für procmail
#DELIVER="/usr/lib/dovecot/deliver" # Auskommentierte Definition für deliver (obsolet)
LOGABSTRACT=no
VERBOSE=off
:0 # Alles was an *gaskutsche.de geschickt wird, landet
* ^TO.*gaskutsche.de # in ~/Maildir/.gaskutsche/ (ebenfalls ein Maildir)
.gaskutsche/
:0 # Alles was von *@ebay.de geschickt wurde, landet
* ^From.*@ebay.de # in ~/Maildir/.gaskutsche/ (ebenfalls ein Maildir)
.ebay/
procmail
ist so konfiguriert, dass alle eingehenden E-Mails mit den beiden Regeln überprüft werden. Wird die E-Mail an »irgendwas«gaskutsche.de geschickt, so wird sie in das entsprechende Verzeichnis verschoben und landet nicht im globalen Posteingang. Gleiches trifft auf E-Mails zu, welche »irgendwas«@ebay.de als Absender haben. Diese werden in den angegebenen Ordner verschoben.
Da sonst keine weiteren Definitionen vorhanden sind, landen alle übrigen Mails im globalen Posteingang.
Diese beiden Beispiele für Mailfilterung sollen nur einen kleinen Eindruck vermitteln, was procmail außer der Zustellung in den globalen Posteingang vermag. Filterung nach Spam, Viren sowie umfangreichere Sortierung von eingehenden Mails sind durch den großen Funktionsumfang realisierbar.
Wichtig ist, dass die jeweiligen Verzeichnisse bereits bestehen, ansonsten gibt es ein Problem bei der Zustellung. procmail
legt keine Verzeichnisse an wenn sie nicht existieren sollten. E-Mails werden in diesem Fall nicht zugestellt.
Ich verwende für meinen Posteingang das sogenannte Maildir-Format. E-Mails werden in einem Verzeichnis als einzelne Dateien abgelegt. Alternativ könnte auch das Mbox-Format verwendet werden. Dort werden E-Mails in einer großen Datei zusammengefasst.
Um ein Verzeichnis für die Zustellung im Maildir-Format zu erstellen ist folgender Aufruf notwendig:
maildirmake ~/Maildir/.ebay/
Sollte maildirmake
noch nicht auf dem System installiert sein muss es noch installiert werden. maildirmake
ist in unterschiedlichen Paketen vorhanden. Ich habe es aus dem Paket von maildrop
verwendet:
sudo apt-get install maildrop
fetchmail
und procmail
sind konfiguriert, nun kann der erste Test mittels einem Aufruf erfolgen:
fetchmail -kv -m "/usr/bin/procmail -d %T"
Dies ist der oben bereits genannte Aufruf bei welchem heruntergeladene E-Mails auf dem Server belassen werden. Sollte etwas bei der Konfiguration von fetchmail
und/oder procmail
nicht passen, gehen so keine E-Mails verloren.
Wenn alles funktioniert wäre es natürlich vorteilhaft, wenn die E-Mails automatisch alle fünf Minuten abgefragt werden. Man möchte ja nicht wie früher im Mailclient auf den »E-Mails abrufen«-Knopf drücken beziehungsweise die Zeile wieder und wieder eingeben. Um dies zu bewerkstelligen kommen zwei Wege in Frage: entweder man lässt fetchmail als Daemon laufen oder man greift auf cron
zurück.
In der Konfigurationsdatei /etc/default/fetchmail
wird angegeben ob fetchmail
im Hintergrund als Daemon laufen soll oder nicht. Standardmäßig ist fetchmail
so eingerichtet, dass es nicht im Hintergrund läuft. Um dies zu ändern muss folgende Zeile entsprechend auf den Wert yes
gesetzt werden:
# Declare here if we want to start fetchmail. 'yes' or 'no'
START_DAEMON=yes
Die weiteren Angaben welche Server von fetchmail
abgefragt werden sollen und in welchem Intervall dies geschehen soll wird in der Datei /etc/fetchmailrc
angegeben:
# /etc/fetchmailrc for system-wide daemon mode
# This file must be chmod 0600, owner fetchmail
set daemon 300 # alle 5 Minutes Mails abrufen
set syslog # log über syslog
set postmaster root # postmaster auf root setzen
Neben den allgemeinen Angaben muss jener Bereich, welchen ich weiter oben in der Anleitung in die ~/home/.fetchmailrc
geschrieben habe, in die /etc/fetchmailrc
übernommen werden. Dabei müssen jedoch die Aufrufe um den Zusatz is USERNAME here
ergänzt werden. Ansonsten kann fetchmail
die abgerufenen E-Mails keinem anderen Benutzer korrekt zuweisen.
Der oben bereits erklärte Aufruf, diesmal in mehreren Zeilen umbrochen, würde dann wie folgt aussehen:
poll SERVER
with protocol POP3
user "USERNAME" there
with password "PASSWORD"
is USERNAME here
options ssl
Nachdem die Konfiguration soweit fertiggestellt wurde müssen noch die Schreibrechte angepasst und die Konfigurationsdatei dem Benutzer fetchmail
gehören:
chmod 600 /etc/fetchmailrc
chown fetchmail /etc/fetchmailrc
Anschließend kann fetchmail
gestartet werden. Das Programm wird nun im Hintergrund als Daemon laufen.
/etc/init.d/fetchmail start
Die Datei /etc/crontab
beinhaltet Befehle, welche zu bestimmten Zeitpunkten von cron
automatisch ausgeführt werden sollen. Ein Eintrag für das Abrufen der E-Mails alle fünf Minuten würde dafür sorgen, dass der Mailserver stets relativ aktuell ist.
Mein Beispiel ruft eine Datei auf, in welcher der Aufruf von fetchmail
zuvor gespeichert wurde. In ~/.fetchmail-aufruf
befindet sich der oben bereits genannte Aufruf (welcher die E-Mails nach dem Herunterladen vom Server dort löscht):
fetchmail -v -m "/usr/bin/procmail -d %T"
Die Datei muss natürlich ausführbar sein, also die entsprechenden Rechte besitzen.
In /etc/crontab
befindet sich demnach nur noch der Aufruf zu dieser ausführbaren Datei:
# m h dom mon dow user command
0-59/5 * * * * USERNAME /home/USERNAME/.fetchmail-aufruf > /dev/null 2>&1
Natürlich werden in /etc/crontab
bereits einige andere Zeilen stehen. Damit es verständlicher wird, sind die Spalten benannt.
Die erste Position gibt die Minuten an wann der Aufruf erfolgen soll. Die Angabe 0-59/5
besagt, dass alle fünf Minuten der Aufruf erfolgen soll.
Die folgenden Positionen (Stunde, Tag, Monat und Wochentag) sind mit einem *
versehen. Dies hat zur Folge, dass der Befehl unabhängig von diesen Werten ausgeführt wird. Somit ist einzig und allein die Bedingung »alle fünf Minuten« ausschlaggebend.
Der Aufruf soll nicht als root
stattfinden, sondern als jener Benutzer, welcher die E-Mails auch zugestellt bekommt.
In diesem Beispiel sind somit »USERNAME« bei Aufruf und im Pfad zur ausführbaren Datei identisch.
Damit cron
nicht alle fünf Minuten eine E-Mail abschickt das der Aufruf erfolgreich war, muss noch die Weiterleitung > /dev/null 2>&1
hinzugefügt werden. Diese bewirkt, dass Ausgaben des Aufrufs in das »Datennirvana« nach /dev/null
umgeleitet werden.
Das war es nun auch schon. Das Abrufen von E-Mails ist mittels fetchmail
und procmail
geregelt und wird dank dem Eintrag in /etc/crontab
alle fünf Minuten vollzogen. Über den bereits eingerichteten IMAP-Server dovecot
können die E-Mails nun mit einem beliebigen IMAP-fähigen Client abgerufen werden.
dovecot
wiki.ubuntuusers.de/dovecot – ausführliche deutschsprachige Installationsanleitung für dovecot
.
www.webmonkey.com/2010/02/set_up_a_debian_or_ubuntu_machine_as_a_maildrop/ – englischsprachige Installations- und Konfigurationsanleitung für dovecot
und fetchmail
als lokalen MDA (Mail Delivery Agent) mit IMAP.
fetchmail
www.tuxhausen.de/fetchmail.html – deutschsprachige Anleitung für fetchmail
mit einfachen Beispielen für die Konfiguration.
wiki.ubuntuusers.de/Fetchmail – deutschsprachige Anleitung für fetchmail
, welche etwas mehr in die Tiefe geht und auch auch eine GUI zur Konfiguration behandelt.
www.howtoforge.de/howto/linux/abrufen-von-e-mails-auf-entfernten-servern-mit-fetchmail-debian-etch – deutschsprachige Anleitung wie fetchmail
entweder als Daemon oder über cron
E-Mails abrufen kann.
www.webmonkey.com/2010/02/set_up_a_debian_or_ubuntu_machine_as_a_maildrop/ – englischsprachige Installations- und Konfigurationsanleitung für dovecot
und fetchmail
als lokalen MDA (Mail Delivery Agent) mit IMAP.
procmail
wiki.ubuntuusers.de/mutt – Informationen zum textbasierten MUA mutt
mit einem kurzen Teilbereich über procmail
.
wiki.dovecot.org/procmail – Grundlegende Konfiguration von procmail
über die Datei /etc/procmailrc
.
www.freebsd.org/doc/de/books/handbook/mail-procmail.html – deutschsprachige Anleitung welche sich mit dem Filtern von E-Mails mittels procmail
auseinandersetzt.
www.uibk.ac.at/zid/systeme/mail/procmail/extend_procmail.html – umfangreiche englischsprachige Anleitung mit vielen Beispielen zur Filterung mittels procmail
.
crontab
wiki.ubuntuusers.de/cron – umfangreiche deutschsprachige Anleitung mit vielen Beispielen wie cron
beziehungsweise /etc/crontab
für die regelmäßige Ausführung von Programmen und Skripten verwendet werden kann.
X_FISH