Postfix + SpamAssassin: Änderungen der Header eingehender E-Mails

7

Ich habe ein Postfix + SpamAssassin-Setup gemäß den Anweisungen durchgeführt, die die meisten Websites für dieses Betriebssystem-Setup empfehlen. Grundsätzlich habe ich meine bearbeitet, master.cfum hinzuzufügen:

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

spamassassin unix -     n       n       -       -       pipe
        user=debian-spamd argv=/usr/bin/spamc -f -e  
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

SpamAssassin funktioniert tatsächlich einwandfrei und meine E-Mails werden gefiltert. Ich habe jedoch Folgendes bemerkt. In der Vergangenheit, vor SpamAssassin, als eine E-Mail an meinen Server gesendet wurde, zeigten die Header Folgendes:

Return-path: <[email protected]>
Envelope-to: <[email protected]>
Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100
Received: from mail.sender-server.dev ...
    by mail.my-server.dev

Nach SpamAssassin zeigen sie:

Return-path: <[email protected]>
Envelope-to: <[email protected]>
Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100
Received: from mail.my-server.dev ...
    by mail.my-server.dev

Es sieht so aus, als würde SpamAssassin aktiviert, das Received: fromvom ursprünglichen Server geändert wurde, von dem die E-Mail wirklich auf meinen eigenen Server gelangt ist ... Warum passiert das? Kann dies nicht so behoben werden, dass meine E-Mails gefiltert werden, indem die richtigen Header angezeigt werden? Vielen Dank.

TCB13
quelle

Antworten:

6

Dies war meine endgültige Lösung nach Recherche und Hilfe von @tarleb

Meine E-Mail-Zustellung erfolgte über ein sendmailProgramm, das meiner E-Mail einige zusätzliche Header hinzufügte. Ich könnte einen Mitter (E-Mail-Filter) verwenden, um eingehende E-Mails zu filtern und die sendmailVerwendung zu löschen. Ich habe mich jedoch entschlossen, für die Zustellung auf Dovecot LDA zu wechseln.

Mein ursprünglicher Filter war zu Beginn von Postfix master.cf:

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

Und am Ende der Datei:

spamassassin unix -     n       n       -       -       pipe
        user=debian-spamd argv=/usr/bin/spamc -f -e  
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Ich habe das Ende der Datei geändert, um die lokale Übermittlung von Dovecot zu verwenden:

spamassassin unix -     n   n   -   -   pipe
    flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e 
    /usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} 

Bearbeiten Sie nun die Postfixes main.cfund fügen Sie sie hinzu (optional, aktivieren Sie (3) unten):

spamassassin_destination_recipient_limit = 1

Jetzt wird Ihre E-Mail ohne Änderungen an den Headern über Dovecot LDA zugestellt. Für die Neugierigen hier einige Details zu meiner Konfiguration:

  1. Diese Konfiguration kann mit Trennzeichen für Plusadressierung / Unteradressierung / Empfänger verwendet werden (E-Mails, an die adressiert [email protected]wird, werden in den [email protected]Posteingang gesendet). Aus diesem Grund habe ich hinzugefügt -d ${user}@${nexthop}, dass das +und alles bis zur Domain entfernt wird. Um diese Funktion zu aktivieren, auch sicher sein hinzuzufügen recipient_delimiter = +in main.cf;
  2. Meine Flaggen flags=DROhufügen nichts Ungewöhnliches hinzu, aber sie können hier verstanden werden: http://www.postfix.org/pipe.8.html ;
  3. spamassassin_destination_recipient_limit = 1ist erforderlich, um sicherzustellen, dass jeder Empfänger von Spamassassin individuell verarbeitet wird. Dies ist aufgrund des Dobigen Flags erforderlich (einschließlich X-Original-ToHeader). Wenn Sie die DFlagge haben und keine spamassassin_destination_recipient_limit = 1E-Mail mit mehreren Zielen festlegen, wird diese nicht zugestellt! Wenn Sie sich nicht für diesen Header interessieren, können Sie das Flag entfernen und dies wird nicht benötigt.

Bearbeiten: Bonusinhalt - Verschieben Sie Ihren SPAM in den JunkOrdner!

Sie können Dovecot auch so konfigurieren, dass als SPAM erkannte E-Mails in den JunkIMAP-Ordner verschoben werden . Dies wird Ihnen mit Sicherheit das Leben leichter machen. Folgen Sie einfach diesem:

  1. Bearbeiten /etc/dovecot/conf.d/15-mailboxes.confund kommentieren / fügen Sie den JunkOrdner mit hinzu (sollte sich in dem namespace inboxAbschnitt in der Nähe befinden mailbox Trash):

    mailbox Junk {
       special_use = \Junk
    }
    
  2. Installieren dovecot-sievemit apt-get install dovecot-sieve;

  3. Bearbeiten /etc/dovecot/conf.d/90-sieve.confund kommentieren Sie die Zeile:#sieve = ~/.dovecot.sieve

  4. Bearbeiten /etc/dovecot/conf.d/90-plugin.confals:

    plugin {
        sieve = /etc/dovecot/sieve/default.sieve
    }
    
  5. Bearbeiten /etc/dovecot/conf.d/15-lda.confund /etc/dovecot/conf.d/20-lmtp.confanpassen:

    protocol lda/lmtp { # do not copy/paste this line!
      mail_plugins = $mail_plugins sieve
    }
    

    WARNUNG : Möglicherweise haben Sie andere Einstellungen unter der protocolAuswahl, behalten Sie diese bei. Die Zeile protocol lda/lmtpändert sich in den Dateien, behalten Sie das Original.

  6. Ordner erstellen /etc/dovecot/sieve/

  7. Datei /etc/dovecot/sieve/default.sievemit folgendem Inhalt erstellen :

    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }
    
  8. Ändern Sie die Ordnerberechtigungen für Ihren virtuellen E-Mail-Benutzer und Ihre Gruppe wie folgt : chown vmail:vmail /etc/dovecot/sieve/ -R. Wenn Sie diesen Taubenschlag verpassen, wird sich beschweren!

  9. Starten Sie alles neu: service postfix restart; service dovecot restart; service spamassassin restart

  10. Versuchen Sie, eine E-Mail an eine E-Mail auf dem Server (von einem externen Server) zu senden, zuerst eine normale E-Mail und dann eine andere mit diesem Betreff : XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X. Die zweite E-Mail sollte in den JunkOrdner und die erste in Ihren Posteingang.

Wenn dies beim ersten Versuch nicht funktioniert, sehen Sie sich die Protokolle an: tail -f /var/log/mail.logund senden Sie die E-Mail, während sie ausgeführt tailwird. Ein gut funktionierendes Setup sollte stored mail into mailbox 'INBOX'oder melden stored mail into mailbox 'Junk'.

TCB13
quelle
4

Dies ist das direkte Ergebnis der ReceivedVerarbeitung von E- Mails durch SMTP-Server: Jeder Server, der die E-Mails verarbeitet, fügt bei der Verarbeitung der E- Mails einen neuen Header hinzu ( gemäß RFC 2821 ).

Das sehen Sie. Der SpamAssassin- Dienst fungiert als Filter, der die E-Mails von Postfix abruft und das Ergebnis an Postfix zurücksendet. Postfix empfängt die Mail daher zweimal. Es wird Receivedjedes Mal ein Header eingefügt. Deshalb wird dort Ihr eigener Server aufgelistet. Der Header enthält wahrscheinlich etwas in der Art (Postfix, from userid 120), in der die Benutzer-ID zu Ihrem debian-spamdBenutzer gehört.

Wenn Sie den Rest des Mail-Headers überprüfen, sollten Sie feststellen, dass sich Receivedunten weitere Header befinden. Es ist nur so, dass die alten Header jetzt weiter unten versteckt sind, aber sie sind immer noch vorhanden. Es gehen keine Informationen verloren.

Tarleb
quelle
Dies war mein erster Gedanke, aber ich bin es gewohnt, mit cPanel-Servern umzugehen, und auf diesen, auch wenn SpamAssassin aktiviert ist und dort funktioniert, gibt es keinen anderen ReceivedHeader, nur die X-Spam-*Header werden hinzugefügt ... Warum und wie?
TCB13
1
@ TCB13 Es gibt mehrere Möglichkeiten, SpamAssassin einzubeziehen. Eine Alternative zur sogenannten After-Queue- Filterung (die Sie in der Frage beschreiben) sind Milters. Milters (Mail-Filter) werden über ein anderes Protokoll ausgeführt und sind Teil des SMTP-Hauptempfangsprozesses. Sie fügen keinen separaten Header ein, da sie nicht über SMTP aufgerufen werden. Milters sind komplizierter, aber dennoch ordentlich, da Sie E-Mails mit sehr hohen Spam-Werten ablehnen können, bevor sie der Warteschlange hinzugefügt werden. Schauen Sie sich Amavisd-new an, wenn Sie es ausprobieren möchten.
Tarleb
Danke für die Warnung. Ich habe schon etwas über Filter gelesen. Ich werde es untersuchen. ;)
TCB13
1
@ TCB13 Ich habe gerade festgestellt, dass meine Antwort teilweise falsch war, habe sie behoben. (SpamAssassin fungiert nicht als SMTP-Server, der zusätzliche Header wird per Postfix eingefügt, wenn er über beteiligt ist /usr/sbin/sendmail.)
Tarleb