getmail und mda_external

Martin Zickler

New Member
Hallo Leute,

ich habe postfix, amavisd-new, clamav, spamass aufgesetzt und läuft prima. Mails werden mit Getmail abgeholt. Nur Folgendes ist mir nicht erklärlich:

Eine Account hole ich über einen Filter direkt in das Postfach ab:
Code:
[retriever]
type = SimpleIMAPRetriever
server = ...
username = ...
password = ...
[options]
no_delivered_to = 0
eliminate_duplicates = 1
verbose = 0
delete = false
message_log = ~/.getmail/log
[filter]
type = Filter_external
path = /usr/bin/spamc
[destination]
type = Maildir
path = ~/Maildir/
Und der andere Account soll über Postfix gehen, denn dieser hat ja die Filter eigentlich. Also so:
Code:
[retriever]
type = SimpleIMAPRetriever
server = ...
username = ...
password = ...
[options]
no_delivered_to = 1
eliminate_duplicates = 1
verbose = 0
delete = false
message_log = ~/.getmail/log
[destination]
type = MDA_external
path = /usr/sbin/sendmail
arguments = ("-i","....@meinedomain.de")
Im ersten Fall kann man im Header die Einträge finden:
Received: from mailfilter (localhost [127.0.0.1])
Also wird alles durch Amavis und Spamass etc. geführt.

Im zweiten Fall passiert das nicht. Es wird ordentlich versendet aber nicht gescannt (kein X-Spam-Flag).

Hat jemand eine Erklärung und wie kann ich es ändern?

Tschö
 
Last edited by a moderator:
Anscheinend ja nicht. :)
Genau dem bin ich auf der Spur.
Wo und wie hast Du die Filter bei Postfix eingebaut?
In der master.cf
Code:
smtp      inet  n       -       -       -       100       smtpd
    -o smtpd_use_tls=yes
    -o smtpd_enforce_tls=yes
    -o content_filter=smtp-amavis:[127.0.0.1]:10024
smtp-amavis unix -      -       -       -       2         smtp
    -o smtp_bind_address=127.0.0.1
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
127.0.0.1:10025 inet    n       -       n       -       -       smtpd
    -o content_filter=
    #-o local_recipient_maps=
    #-o relay_recipient_maps=
    -o smtpd_delay_reject=no
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o mynetworks=127.0.0.0/8
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Steht im Maillog irgendwelche Aufrufe von SpamAssassin?
Im ersten Fall, also wenn Getmail mit Filter direkt in ein Postfach abholt, schaltet sich spamd ein:
Jun 5 11:12:42 localhost spamd[3171]: spamd: connection from localhost [127.0.0.1] at port 2867 ...
Im zweiten Fall nicht!
Wenn ich eine Mail im eigenen Netzwerk verschicke, erhält die Mail auch einen Spam-Check-Eintrag. Nur wenn ich per Getmail vom Profider abhole und die Mail in Postfix einschleuse, dann will Amavisd davon nichts wissen!

Ich habe keine Erklärung und das macht mich Wahnsinnig!
 
Last edited by a moderator:
Jupp, ist klar warum es nicht geht.
Amavis ist als Content-Filter beim smtpd drin. Dieser wird aber nur aufgerufen, wenn ein Connect auf dem SMTP-Port rein kommt.
Da Du die Injection per sendmail machst, ist smtpd nicht involviert.

3 Lösungen hätte ich anzubieten:
1. Auch für diese Mails den Filter zu konfigurieren
2. Einen Maildropper dazwischen schalten, der vorher Amavis/Spamc aufruft.
3. Ein Script als MDA_external einsetzen, welches die Mail über einen Connect auf 127.0.0.1:25 einliefert.

PS: Nutze bitte CODE-Tags (der Button mit "#").

huschi.
 
Jupp, ist klar warum es nicht geht.
Das ist erfreulich, weil: Ich knobel schon eine Weile daran rum.
Amavis ist als Content-Filter beim smtpd drin. Dieser wird aber nur aufgerufen, wenn ein Connect auf dem SMTP-Port rein kommt.
Da Du die Injection per sendmail machst, ist smtpd nicht involviert.
Ah ...
<vor die Stirn schlag>Aua</vor die Stirn schlag>
An Alles habe ich gedacht, nur nicht daran.

[...]
2. Einen Maildropper dazwischen schalten, der vorher Amavis/Spamc aufruft.
Welchen würdest Du für ein Debian-System empfehlen?

PS: Nutze bitte CODE-Tags (der Button mit "#").
Mach ich in der Zukunft!

Herzlichen Dank für die Hilfe
 
[...]
3. Ein Script als MDA_external einsetzen, welches die Mail über einen Connect auf 127.0.0.1:25 einliefert.
[...]

Hallo Huschi,

ich möchte doch noch mal die dritte Version testen.
Darum die Frage: Wie sende ich die Mail gezielt auf einen Port? Wie sieht dieser Befehl aus?

Danke
 
Ich vergaß zu erwähnen, daß das die umständlichste und schlechteste Methode ist.
Denn a) brauchst Du ein eigenen Script dafür, welches den Mail-Body vom Mail-Header trennt (inkl. aller MIME-Strukturen) und zum anderen gehen alle bis dahin ermittelten Informationen im Header verloren.

Ergo: Absolut nicht zu empfehlen.

Allerdings ist mir noch eine vierte Methode eingefallen:
Bau ein Wrapper-Script, welches statt sendmail aufgerufen wird. Darin übergibst Du die Mail erstmal spamc und dann sendmail. Das ganze kann so aussehen:
Code:
#/bin/sh
/usr/bin/spamc | /usr/sbin/sendmail "$@"
Evtl. schluckt sogar getmail diese eine Zeile. Wäre zu testen...
ClamAV ist leider nicht so einfach mit einzubinden, da dort die Email nicht reingepiped wird.

huschi.
 
Hallo Huschi,
Ich vergaß zu erwähnen, daß das die umständlichste und schlechteste Methode ist.
[...]
Ergo: Absolut nicht zu empfehlen.
Okay, das scheue ich auch!

Allerdings ist mir noch eine vierte Methode eingefallen:
Code:
#/bin/sh
/usr/bin/spamc | /usr/sbin/sendmail "$@"

Das werde ich mal versuchen (heute abend, muss weg).
Allerdings wollte ich die Prüfung mit clamav unbedingt haben! Da bleibt dann wohl doch nur ein mda.

Tschö
 
Schön, daß ich auch mal wieder was lernen darf. :)

Ich ergänze mal den Thread mit der vollständigen Lösung:

(Darstellung der Mailqueue's siehe Peer Heinlein's Postfix-Buch auf Seite 47.)
Dort sieht man, daß sendmail in die Queue "maildrop" einliefert, welche vom Postfix-Programm "pickup" an "cleanup" weitergeleitet werden. "cleanup" ist hier als zentrale Verteilungsmaschine zu sehen. Im Vergleich zu oben liefert "smtpd" direkt an "cleanup".
Da "pickup" ein vollständiges Postfix-Programm ist, versteht es auch alle üblichen Parameter. Also auch den content_filter.

Daraus bildet sich folgende Lösung:
in der master.cf den Eintrag von pickup wie folgt erweitern:
Code:
pickup    fifo  n       -       -       60      1       pickup [b]-o content_filter=smtp-amavis:[127.0.0.1]:10024[/b]
(Vorsicht bei dem Eintrag für "chroot" (zweites "-"). Es kann bei Euch von o.g. Beispiel abweichen; belast es auf jedenfall so wie es war!)

Ein Postfix-Reload reicht aus um die neue Einstellung zu aktivieren.

huschi.
 
Nachtrag:
Bei dieser Lösung wird übrigens jede per sendmail eingelieferte Email durch amavisd geschleust.
Da PHP meist über sendmail verschickt, werden also auch alle Emails von PHP-Scripten (etc.) durch amavisd gecheckt. Egal ob sie nur local zugestellt oder nach Extern versand werden.

huschi.
 
Back
Top