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.

Das könnte dich auch interessieren …