Wie arbeiten Exim4 und Spamassassin zusammen?

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Antworten
Plenz
Beiträge: 86
Registriert: 05.04.2009 11:33:17

Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von Plenz » 19.02.2019 00:08:19

Für die Konfiguration gibt es zahlreiche Anleitungen und Beschreibungen zu finden. Aber nirgendwo habe ich gesehen, wie die Sache jetzt genau funktioniert.

Früher (wenn ich das richtig verstanden habe) lief das so:
- Exim leitete eingehende E-Mails an Spamassassin weiter (transport_filter = /usr/bin/spamc)
- Spamassassin fügte die Headerzeile "spam-scanned" hinzu und schickte die E-Mail wieder an Exim
- Exim stellte fest, dass die E-Mail bereits gescannt ist und verarbeitete sie je nach Spam-Punkten

Aber jetzt gibt es nur noch eine Zeile:
- spamd_address = 127.0.0.1 783

Was passiert da genau?

Hintergrund meiner Frage ist, dass ich gerade von Squeeze auf Stretch umstelle. Inzwischen läuft bei mir (fast) alles, auch mein selbstgebasteltes Filter-Plugin funktioniert schon wieder, aber die Befehle zum Einfügen von zusätzlichen Header-Zeilen ( $pms->set_tag () ) sind wirkungslos.

Irgend etwas scheint da anders zu laufen als früher. Leider sind längst nicht alle Anleitungen auf dem neuesten Stand. Man muss ja schon froh sein, wenn irgendwo "dieser Text enthält zum Teil überholte Informationen" steht.

Plenz
Beiträge: 86
Registriert: 05.04.2009 11:33:17

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von Plenz » 20.02.2019 00:24:38

Wenn ich diese Seite https://www.exim.org/exim-html-current/ ... _time.html richtig verstehe, kann man überhaupt keine eigenen Headerzeilen mehr einfügen, denn es gibt nur noch die aufgelisteten fünf Variablen, über die Spamassassin den Exim über zusätzliche Headerzeilen informiert.

Ich müsste eigene Headerzeilen also an die Variable $spam_report dranhängen.

Sehe ich das so richtig, oder gibt es doch noch einen anderen Weg?

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von bluestar » 20.02.2019 08:28:55

Du hast viele Fragen formuliert, lass mich mal mit Antworten und möglichen Lösungen beginnen:

Deinen "früheren" Weg kannst du nach wie vor weiterhin problemlos einsetzen:
Plenz hat geschrieben: ↑ zum Beitrag ↑
19.02.2019 00:08:19
Früher (wenn ich das richtig verstanden habe) lief das so:
- Exim leitete eingehende E-Mails an Spamassassin weiter (transport_filter = /usr/bin/spamc)
- Spamassassin fügte die Headerzeile "spam-scanned" hinzu und schickte die E-Mail wieder an Exim
- Exim stellte fest, dass die E-Mail bereits gescannt ist und verarbeitete sie je nach Spam-Punkten
Plenz hat geschrieben: ↑ zum Beitrag ↑
19.02.2019 00:08:19
Aber jetzt gibt es nur noch eine Zeile:
- spamd_address = 127.0.0.1 783
Darüber hast du die Möglichkeit, wenn du sie nutzen möchtest, den Spam-Erkennung innerhalb des SMTP-Dialoges (DATA-Phase) zu nutzen, den Weg gibt es übrigens auch schon in Jessie (Exim 4.84).

Letztendlich musst du entscheiden, an welcher Stelle du Spamassassin für dich einsetzt, beide Varianten sind möglich, beide Varianten haben Ihre Vor- und Nachteile.

Plenz
Beiträge: 86
Registriert: 05.04.2009 11:33:17

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von Plenz » 20.02.2019 08:44:30

Danke für deine Antwort. Mir geht es hauptsächlich darum, mein eigenes Plugin eigene Headerzeilen hinzufügen zu lassen, das wäre meine wichtigste Frage. Wenn das mit der alten Methode einfacher ist als mit der neuen Methode, dann werde ich es so machen wie früher.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von bluestar » 20.02.2019 11:16:37

Ich würde einfach die alte Methode weiter verwenden.

Plenz
Beiträge: 86
Registriert: 05.04.2009 11:33:17

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von Plenz » 21.02.2019 00:48:04

Danke für die Ermutigung :THX:

Es klappt leider nur teilweise. Die zusätzlichen Headerzeilen von meinem Plugin werden jetzt einwandfrei hinzugefügt. Aber die entscheidende Zeile mit "spam-scanned" wird NICHT eingebaut. Die Folge ist, dass die E-Mail wieder und wieder gescannt wird, bis Exim dank eines weisen Programmierers das Drama abbricht, wenn der Header zu viele Received-Zeilen enthält.

Da mein alter Server noch läuft, kann ich alle möglichen Einstellungen vergleichen, aber ich finde keine Unterschiede.

Die oberste Received-Zeile sollte so lauten:
Received: from mail by <SERVERNAME> with spam-scanned (Exim 4.80 #2 (Debian))
aber sie lautet jetzt:
Received: from mail by <SERVERNAME> with local-bsmtp (Exim 4.89)

Hast du trotz kaputter Kristallkugel eine spontane Idee?

Ich könnte natürlich auch mein Plugin eine Headerzeile mit "spam-scanned" einfügen lassen, aber wirklich sauber wäre das nicht...

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von bluestar » 21.02.2019 10:37:24

Plenz hat geschrieben: ↑ zum Beitrag ↑
21.02.2019 00:48:04
Hast du trotz kaputter Kristallkugel eine spontane Idee?
Kannst du deine Exim4.conf posten? Dann kann ich da mal einen Blick drauf werfen.

Plenz
Beiträge: 86
Registriert: 05.04.2009 11:33:17

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von Plenz » 21.02.2019 23:29:02

Herzlichen Dank für dein Angebot :THX:
Die Datei ist jedoch zu groß, um hier hochgeladen zu werden. Ich beschränke mich erst mal auf zwei Ausschnitte:

Code: Alles auswählen

#####################################################
### router/110_exim4-config_spamassassin_check
#####################################################

### router/110_exim4-config_spamassassin_check
#################################

# SpamAssassin
spamcheck_director:
  driver = accept
  condition = "${if and { {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}} {!eq {$received_protocol}{local}} } {1}{0}}"
  retry_use_local_part
  transport = spamcheck
  no_verify
    # do not use this director when verifying a local-part at SMTP-time
    # When to scan a message :
    #   -   it isn't already flagged as spam
    #   -   it isn't already scanned
    #   -   it didn't originate locally (as long as I don't harbor spammers :-))

spamkill_director:
  driver = accept
  check_local_user
  condition = "${if def:h_X-Spam-Flag: {1}{0}}"
  transport = spamkill
  no_verify

newsletter_director:
  driver = accept
  check_local_user
  condition = "${if eq {$h_X-Spam-Paul-Marker:} {NEWSLETTER}}"
  transport = markernewsletter
  no_verify

facebook_director:
  driver = accept
  check_local_user
  condition = "${if eq {$h_X-Spam-Paul-Marker:} {FACEBOOK}}"
  transport = markerfacebook
  no_verify

#####################################################
### end router/110_exim4-config_spamassassin_check
#####################################################
 

Code: Alles auswählen

#####################################################
### transport/20_exim4-config_spamsassassin
#####################################################

spamcheck:
  driver = pipe
  envelope_to_add
  batch_max = 100
  command = /usr/sbin/exim4 -oMr spam-scanned -bS
  current_directory = "/tmp"
  group = mail
  home_directory = "/tmp"
  log_output
  message_prefix = 
  message_suffix = 
  return_fail_output
  no_return_path_add
  transport_filter = /usr/bin/spamc
  use_bsmtp
  user = mail
    # must use a privileged user to set $received_protocol
    # in the second exim process!


spamkill:
  driver = appendfile
  file =  ${if and {{exists{/home/${local_part}/mail/SpamTrash}} \
                    {eq {$h_X-Spam-Paul-Exhopp:}{NO}} \
                   } \
            {/home/${local_part}/mail/SpamTrash} \
            {/var/mail/trash} \
          }
  group = ${if and {{exists{/home/${local_part}/mail/SpamTrash}} \
                    {eq {$h_X-Spam-Paul-Exhopp:}{NO}} \
                   } \
            {${local_part}} {mail} \
          }
  mode = 0664
  no_mode_fail_narrower
  return_path_add
  user =  ${if and {{exists{/home/${local_part}/mail/SpamTrash}} \
                    {eq {$h_X-Spam-Paul-Exhopp:}{NO}} \
                   } \
            {${local_part}} {trash} \
          }


markerfacebook:
  driver = appendfile
  file =  ${if exists{/home/${local_part}/mail/Facebook} \
            {/home/${local_part}/mail/Facebook} \
            {/var/mail/${local_part}} \
          }
  group = ${if exists{/home/${local_part}/mail/Facebook} \
            {${local_part}} {mail} \
          }
  mode = 0664
  no_mode_fail_narrower
  return_path_add
  user =  ${if exists{/home/${local_part}/mail/Facebook} \
            {${local_part}} {mail} \
          }


markernewsletter:
  driver = appendfile
  file =  ${if exists{/home/${local_part}/mail/Newsletter} \
            {/home/${local_part}/mail/Newsletter} \
            {/var/mail/${local_part}} \
          }
  group = ${if exists{/home/${local_part}/mail/Newsletter} \
            {${local_part}} {mail} \
          }
  mode = 0664
  no_mode_fail_narrower
  return_path_add
  user =  ${if exists{/home/${local_part}/mail/Newsletter} \
            {${local_part}} {mail} \
          }

#####################################################
### end transport/20_exim4-config_spamassassin.results
#####################################################
 

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von bluestar » 22.02.2019 09:46:41

Ist der User "mail" in der Option trusted_users enthalten?

Plenz
Beiträge: 86
Registriert: 05.04.2009 11:33:17

Re: Wie arbeiten Exim4 und Spamassassin zusammen?

Beitrag von Plenz » 22.02.2019 20:40:53

Das war's, vielen Dank! :THX:

Genau diese Sache hatte ich auch schon im Auge gehabt, aber da die Einbindung des Spamassassins über "spamd_address = 127.0.0.1 783" ja funktionierte, ohne dass man an trusted_user etwas machen musste, war ich davon wieder abgekommen, weil ich annahm, das funktioniert alles, weil (wie die Zeile ".ifndef MAIN_TRUSTED_USERS" suggeriert) diese Definition irgendwo anders gesetzt wird.

Auf deinen Hinweis habe ich noch mal in der alten Config nachgeschaut, und da steht "trusted_users = mail". Diese Zeile in die neue Config eingefügt, und nun läuft alles wie gewünscht.

Antworten