Abrufen von E-Mails auf entfernten Servern mit getmail (Debian Etch)
Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>
Getmail ist ein Programm zum Abrufen von E-Mails von entfernten Servern; es ist ziemlich ähnlich wie fetchmail, nur flexibler. Es kann zum Beispiel so konfiguriert werden, die Mails direkt an eine Maildir oder mbox mailbox weiterzuleiten ohne von einem MTA wie Postfix Gebrauch zu machen. Aber selbstverständlich kann es die Mails auch durch einen MTA leiten, wenn Du magst. Getmail kann sogenannte Filter verwenden, wie SpamAssassin und ClamAV um Mails zu überprüfen und Du kannst getmail sogar veranlassen, Mails nach einer bestimmten Anzahl von Tagen auf dem originalen Server zu löschen.
Ich übernehme keine Garantie, dass dies auch bei Dir funktionieren wird!
1 Vorbemerkung
Ich habe getmail auf einem Debian Etch System mit dem lokalen Benutzer falko getestet, der die lokale E-Mail Adresse falko@example.com hat.
2 Installation von getmail
Um getmail zu installieren, müssen wir nur Folgenden Befehl
apt-get install getmail4
als Root-Benutzer ausführen.
3 Konfiguriere getmail
Getmail kann durch Konfigurationsdateien pro Benutzer konfiguriert werden. Dieser eine Benutzer kann getmail dann laufen lassen. Damit getmail automatisch läuft, erstellen wir für diesen Benutzer einen Cron Job.
Ich gehe davon aus, dass Du in diesem Kapitel als falko und nicht als root angemeldet bist!
Getmail sucht nach der Konfigurationsdatei ~/.getmail/getmailrc, also müssen wir zunächst das Verzeichnis ~/.getmail mit der Berechtigung 0700 erstellen:
mkdir -m 0700 ~/.getmail
Dann erstellen wir die ~/.getmail/getmailrc Konfigurationsdatei. Eine getmailrc Datei muss zumindest einen [retriever] Bereich und einen [destination] Bereich haben.
vi ~/.getmail/getmailrc
[retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = falko@someprovider.tld password = secret [destination] type = Maildir path = ~/Maildir/ |
Das obige Beispiel geht davon aus, dass falko ein E-Mail Konto mit dem Benutzernamen falko@someprovider.tld und dem Passwort secret auf dem Server pop.someprovider.tld hat und dass er ein Maildir Konto auf diesem Server hat, mit ~/Maildir/ als sein Maildir Verzeichnis.
Das reicht schon um getmail zu konfigurieren. falko könnnte nun E-Mails von dem entfernten Server abrufen indem er einfach Folgendes laufen lässt
getmail
Natürlich möchte falko diesen Vorgang nicht immer aller paar Minuten manuell starten, also erstellen wir für ihn einen Cron Job. Immer noch als Benutzer falko lassen wir dies laufen
crontab -e
und erstelllen einen Cron Job wie diesen (der getmail jede fünf Minuten starten würde):
*/5 * * * * /usr/bin/getmail &> /dev/null |
Lass uns nun davon ausgehen, dass falko kein Maildir Konto hat, aber ein mbox Konto auf diesem Server (/var/mail/falko). Wir müssen nur den [destination] Bereich in ~/.getmail/getmailrc ändern, z.B. wie folgt:
vi ~/.getmail/getmailrc
[retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = falko@someprovider.tld password = secret [destination] type = Mboxrd path = /var/mail/falko |
Im nächsten Beispiel möchten wir die E-Mails, die wir auf dem entfernten Server abrufen, durch einen MTA wie zum Beispiel Postfix leiten (ich gehe davon aus, dass Postfix bereits installiert ist und funktioniert). Postfix kann dann entscheiden, ob es die Mails zu einer Maildir oder mbox leitet und es kann außerdem einen Spam und Virus Scanner aufrufen, z.B. durch amavisd-new.
vi ~/.getmail/getmailrc
[retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = falko@someprovider.tld password = secret [destination] type = MDA_external path = /usr/sbin/sendmail arguments = ("-bm", "falko@example.com") unixfrom = true |
(Wie Du siehst, teilen wir getmail mit, dass falkos lokale E-Mail Adresse falko@example.com ist.)
3.1 Optionen
Wir können auch einen [options] Bereich ~/.getmail/getmailrc hinzufügen, in dem wir das Standardverhalten von getmail ändern können, z.B. wie folgt:
vi ~/.getmail/getmailrc
[...] [options] verbose = 1 read_all = false delete = true message_log_syslog = true |
Die obigen Optionen veranlassen getmail, Nachrichten über abgerufene Nachrichten zu drucken, nur neue Nachrichten abzufragen, Nachrichten nach dem Abruf auf dem entfernten Server zu löschen und in syslog zu protokollieren.
Wenn Du nur Mails, die älter als 10 Tage sind, löschen möchtest, kannst Du den [options] Bereich wie folgt ändern:
vi ~/.getmail/getmailrc
[...] [options] verbose = 1 read_all = false delete_after = 10 message_log_syslog = true |
Hier erfährst Du mehr über alle verfügbaren Optionen: http://pyropus.ca/software/getmail/configuration.html#conf-options.
4 SpamAssassin In getmail Integrieren
Wenn Du möchtest, dass getmail SpamAssassin aufruft, kannst Du dies wie folgt ausführen:
Zunächst müssen wir SpamAssassin installieren. Als Rootanwender lassen wir Folgendes laufen
apt-get install spamassassin spamc
Dann müssen wir SpamAssassin konfigurieren. Das kann in der Datei /etc/mail/spamassassin/local.cf ausgeführt werden. Eine gültige Datei könnte wie folgt aussehen:
vi /etc/mail/spamassassin/local.cf
rewrite_header Subject *****SPAM***** required_score 5.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status bayes_ignore_header X-getmail-filter-classifier |
(Die Kommentare in /etc/mail/spamassassin/local.cf verraten Dir mehr über die obigen Einstellungen.)
Wenn Du Bayes aktivierst (use_bayes 1), ist es wichtig, dass Du die Zeile
bayes_ignore_header X-getmail-filter-classifier
in /etc/mail/spamassassin/local.cf hinzufügst, sodass Bayes headers, die von getmail hinzugefügt werden, ignoriert.
Letztendlich müssen wir den SpamAssassin daemon freischalten indem wir ENABLED auf 1 in /etc/default/spamassassin stellen:
vi /etc/default/spamassassin
[...] ENABLED=1 [...] |
Dann starten wir den SpamAssassin daemon:
/etc/init.d/spamassassin start
Melde Dich nun wieder als falko in der Kommandozeile an, öffne ~/.getmail/getmailrc und füge den folgenden [filter] Bereich hinzu:
vi ~/.getmail/getmailrc
[...] [filter] type = Filter_external path = /usr/bin/spamc arguments = ("-s 250000", ) |
(Wenn dies nicht Dein erster [filter] Bereich ist, musst Du den ersten [filter] Bereich zu [filter-1] umbenennen, den zweiten zu [filter-2] usw.)
Das war’s. SpamAssassin ist nun in getmail integriert.
5 ClamAV Integrieren
ClamAV ist ein Projekt, das sehr oft neue Versionen veröffentlicht und wenn einmal eine neue Version veröffentlicht wurde, werden alte Versionen Warnungen ausgeben. Daher müssen wir sicherstellen, dass wir die neuste ClamAV Veröffentlichung installieren, indem wir folgende Zeile zu /etc/apt/sources.list inzufügen (als root):
vi /etc/apt/sources.list
[...] deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free [...] |
Danach aktualisieren wir unsere Datenbank:
apt-get update
(- falls Du GPG Warnungen erhältst, kannst Du diese ignorieren -)
und installieren ClamAV:
apt-get install clamav clamav-base clamav-daemon clamav-freshclam
Melde Dich dann wieder als Benutzer falko an und bearbeite ~/.getmail/getmailrc. Wenn Du möchtest, dass getmail Virus-Mails löscht, dann füge folgenden Filter hinzu:
vi ~/.getmail/getmailrc
[...] # Drop infected messages [filter] type = Filter_classifier path = /usr/bin/clamdscan arguments = ("--stdout", "--no-summary", "-") exitcodes_drop = (1, ) |
Wenn Du möchtest, dass getmail infizierte Nachrichten abliefert, füge stattdessen folgenden Filter hinzu:
vi ~/.getmail/getmailrc
[...] # Keep infected messages [filter] type = Filter_classifier path = /usr/bin/clamddscan arguments = ("--stdout", "--no-summary", "-") exitcodes_keep = (0,1) |
Denke daran, was ich im vorherigen Kapitel über mehrere [filter] Bereiche gesagt habe:
Wenn dies nicht Dein erster [filter] Bereich ist, musst Du den ersten [filter] Bereich zu [filter-1] umbenennen, den zweiten zu [filter-2] usw.
Das war die Integration von ClamAV.