Postfix mit SpamAssassin konfigurieren
In diesem Abschnitt wird SpamAssassin installiert und in Postfix als Filter hinzugefügt, damit SpamAssassin eingehende E-Mails auf deren Spamwahrscheinlichkeit prüfen kann. Als Spam erkannte E-Mails werden über das Dovecot-Plugin Sieve in den Ordner Junk verschoben.
Installation der benötigten Pakete
Wir installieren Sieve über die Dovecoterweiterung Pipeonhole und zusätzlich SpamAssassin. Letzteres starten wir sogleich und aktivieren das Service für den automatischen Starten bei jedem Hochfahren des System.
yum install dovecot-pigeonhole amavisd-new clamav clamav-update clamav-scanner spamassassin
systemctl start spamassassin
systemctl enable spamassassin
systemctl start amavisd
systemctl enable amavisd
ClamAV Datenbank aktualisieren
Damit in den E-Mails nicht die Fehlermeldung "UNSCANNED" erscheint, müssen wir die Datenbank von ClamAV auf den aktuellen Stand bringen. Das un wir mit:
freshclam
Um zu prüfen, ob ClamAV auch regelmäßig aktualisiert wird, können wir nachsehen, ob ein Cronjob erstellt wurde unter:
cat /etc/cron.d/clamav-update
Amavisd-new konfigurieren
Wir öffnen die Amavisd-new Konfigurationsdatei:
vi /etc/amavisd/amavisd.conf
Nun suchen wir die beiden Parameter und passen sie an unseren Servern an. In $mydomain wird die Hauptdomain des Servers eingetragen. In $myhostname steht z.B. server.yourdomain.com
$mydomain = 'domain.com'; # a convenient default for other settings
$myhostname = 'mail.domain.com'; # must be a fully-qualified domain name!
Um auch alle anderen Domains welche in der SQL-Datenbank gespeichert sind zu verarbeiten, müssen wir einen weiteren Parameter in die Konfigurationsdatei wie folgt abändern:
# @local_domains_maps = ( [".$mydomain"] ); # list of all local domains
@local_domains_maps = ['.'];
Um über Amavisd-new den vollständigen Spamassassin X-Spam-Report auszugeben, muss bei Centos oder Red Hat folgende Zeile eingefügt werden:
$allowed_added_header_fields{lc('X-Spam-Report')} = 1;
Der Parameter "$sa_spam_report_header = 1" aus verschiedenen Debian- oder Ubuntu-HowTos funktioniert bei Centos nicht.
Um Spam-Mails einschätzen zu können, weist SpamAassassin jeder E-Mail einen Wert zu. In der Konfigurationsdatei von Amavisd-new können wir festlegen, ab welchem Wert eine Mail als Spam deklariert werden soll. Der erste Wert gibt an, dass jeder E-Mail der Spam-Info-Header hinzugefügt wird. Der zweite werde definiert, ab welchem Wert E-Mails als Spam gehandelt werden sollen. Die restlichen Zeilen kommentieren wir aus.
...
$sa_tag_level_deflt = -9999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 40; # add 'spam detected' headers at that level
# $sa_kill_level_deflt = 6.9; # triggers spam evasive actions (e.g. blocks mail)
# $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
# $sa_crediblefrom_dsn_cutoff_level = 18; # likewise, but for a likely valid From
# $sa_quarantine_cutoff_level = 25; # spam level beyond which quarantine is off
# $penpals_bonus_score = 8; # (no effect without a @storage_sql_dsn database)
# $penpals_threshold_high = $sa_kill_level_deflt; # don't waste time on hi spam
# $bounce_killer_score = 100; # spam score points to add for joe-jobbed bounces
...
Damit der Versender einer infizierten Mail auch eine Rückmeldung erhält und diese nicht kommentarlos gelöscht werden, suchen wir nachstehenden Abschnitt und ändern ihn wir folgt ab:
...
$final_virus_destiny = D_REJECT;
...
Info: $final_spam_destiny =
arbeitet mit $sa_kill_level_deflt =
, wird jedoch hier nicht benötigt, da die Filterung über Sieve erfolgt.
Amavisd-new in Postfix integrieren
Damit Postfix Amavisd-new auch verwenden kann, müssen wir ein paar Zeilen unterhalb von
smtp inet n - n - - smtpd
in der Datei /etc/postfix/master.cf hinzufügen. Der gesamte Eintrag sieht wir folgt aus:
...
smtp inet n - n - - smtpd
-o content_filter=smtp-amavis:127.0.0.1:10024
...
Um auch intern zu filtern bzw. ausgehende Mails auf Viren zu prüfen suchen wir nachstehenden Abschnitt und ergänzen ebenfalls die Filter-Anweisung.
...
submission inet n - n - - smtpd
# -o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o content_filter=smtp-amavis:[127.0.0.1]:10023
...
smtps inet n - n - - smtpd
# -o syslog_name=postfix/smtps
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o content_filter=smtp-amavis:127.0.0.1:10024
...
Am Ende der gleichen Datei fügen wir noch folgende Zeile ein:
#
# Amavisd & SpamAssassin
#
smtp-amavis unix - - y - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
-o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - y - - smtpd
-o content_filter=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-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 receive_override_options=no_header_body_checks
-o smtpd_helo_required=no
-o smtpd_client_restrictions=
-o smtpd_restriction_classes=
-o disable_vrfy_command=no
-o strict_rfc821_envelopes=yes
Und übernehmen das Ganze mit:
systemctl restart postfix
Konfiguration von SpamAssassin
SpamAssassin verwendet zwei Konfigurationsdateien. Eine systemweite, welche unter /etc/mail/spamassassin/local.cf zu finden ist und eine für jeden Benutzer, welche im Home-Verzeichnis unter $HOME/.spamassassin/user_prefs abgelegt werden. Mithilfe der zweiten Konfigurationsdatei können Konfigurationen hinzugefügt werden oder die systemweiten Einstellungen überschrieben werden. Amavisd-new speichert seine user_prefs allerdings unter dem Pfad /var/spool/amavisd/.spamassassin.
Um Konfigurationsdateien von Benutzern zuzulassen und damit Spamassassin allen Spammails einen Report in die Quelldatei hinzufügt, damit wir später auch prüfen können, warum eine Mail als Spam beurteilt wurde, müssen wir zuvor noch die Standardkonfiguration bearbeiten. Am besten verschieben wir die Originaldatei und legen sie als local.cf.original wieder ab und erstellen die Konfigurationsdatei anschließend neu.
mv /etc/mail/spamassassin/local.cf /etc/mail/spamassassin/local.cf.original
vi /etc/mail/spamassassin/local.cf
Nun fügen wir folgende Zeilen ein:
# Der Score, welche erreicht werden muss, um eine Mail als Spam zu beurteilen.
# Gilt nur für den IMAP-Scanner.
# Für SpamAssassin & Amavisd-new wird der Score in vi /etc/amavisd/amavisd.conf festgelget
required_score 40
# Erlaubt Benutzern das Verwenden eigener Regeln.
allow_user_rules 1
# Ist dieser Parameter aktiviert, wird ein Spamreport erstellt.
# Die Originalnachricht wird als Anhang beigefügt.
# Möchte man das nicht, muss die Funktion explizit deaktiviert werden.
report_safe 0
# Verzeichnis für die SpamAssassin Bayes-Datenbank.
# Bayes ist ein System, welches von harmlosen Mails und von Spammails lernt um diese besser einzustufen.
bayes_path /var/lib/spamassassin/bayes_db/bayes
bayes_file_mode 0666
# Grenzwert, ab wie vielen Mails das System Bayes für die Spambewertung heranziehen darf.
# Bei höheren Werten kann das System länger lernen, um eine falsche Einstufung zu verhindern.
bayes_min_spam_num 0
bayes_min_ham_num 0
Siehe auch: IMAP Spam-Scanner
Amavisd-new user_prefs konfigurieren
Nun editieren wir die Konfigurationsdatei und fügen den Inhalt aus dem nächsten Abschnitt "SpamAssassin Haupt-Konfigurationsdate" ein:
vi /var/spool/amavisd/.spamassassin/user_prefs
SpamAssassin Haupt-Konfigurationsdatei
SpamAssassin Konfigurationsdateien
Nachdem wir die Konfigurationsdatei angepasst haben starten wir Amavisd-new neu um die Änderungen zu übernehmen.
systemctl restart amavisd
Dovecot-Sieve-Plugin konfigurieren
Wir laden das Plugin indem wir in der Datei /etc/dovecot/conf.d/20-lmtp.conf im Abschnitt protocol lmtp folgende Zeile hinzufügen.
protocol lmtp {
...
mail_plugins = $mail_plugins sieve
...
}
Wo die globalen Filterregeln zu finden sind definieren wir unter /etc/dovecot/conf.d/90-sieve.conf. Wir suchen die auskommentierte Zeile sieve_after und fügen unterhalb folgende Zeile ein:
sieve_after = /etc/dovecot/sieve-after
Die Filterregel erstellen wir nun in der Datei /etc/dovecot/sieve-after/spam-to-folder.sieve.
require ["fileinto","mailbox"]; if header :contains "X-Spam-Flag" "YES" { fileinto :create "INBOX.Junk"; stop; }
Der Befehl sievec kompiliert die Datei in ein für Dovecot lesbares Format.
sievec /etc/dovecot/sieve-after/spam-to-folder.sieve
Alle Änderungen an Dovecot übernehmen wir mit:
systemctl restart dovecot
SpamAssassin & Bayes konfigurieren
mkdir /var/lib/spamassassin/bayes_db
chmod 777 /var/lib/spamassassin/bayes_db
touch /var/lib/spamassassin/bayes_db/bayes
chmod 666 /var/lib/spamassassin/bayes_db/bayes
Siehe auch: IMAP Spam-Scanner
Im nächsten Schritt müssen wir die Bayes-Datenbank mit mindestens einer "guten" Mail und einer Spam-Mail füttern. Dazu rufen wir die nächsten beiden Befehlszeilen auf:
sa-learn --ham --showdots --dir /home/vmail/[Domain]/[E-Mail-Konto]/.NoJunk/cur
sa-learn --spam --showdots --dir /home/vmail/[Domain]/[E-Mail-Konto]/.Junk/cur
Um die Bayes-Datenbank regelmäßig mit den aktuellen Spam-Mails aus dem Junk-Ordner zu füttern können wir den sa-learn --spam Befehl in crontab als root aufnehmen. Folgender Befehl durchsucht den Junk-Ordner des angegebenen Benutzers nach neuen Spam-Mails.
*/5 * * * * sa-learn --spam --showdots --dir /home/vmail/[Domain]/[E-Mail-Konto]/.Junk/cur
Wurde eine E-Mail irrtümlich als Spam erkannt, kann sie in den Ordner NoJunk verschoben werden. Mit dem nächsten Befehl wird dieser anschließend aus der Spam-Datenbank entfernt und in die Datenbank für die "guten" Mails verschoben.
*/5 * * * * sa-learn --ham --showdots --dir /home/vmail/[Domain]/[E-Mail-Konto]/.NoJunk/cur
SELinux Berechtigungen für Amavisd-new
Um fehlende SELinux Berechtigungen zu beheben und Amavisd-new Zugriff auf die Bayes-Datetenbank zu geben, muss noch nachstehender Befehl ausgeführt werden:
setsebool -P antivirus_can_scan_system on
Testen
Um unseren Spamfilter zu testen, melden wir uns mit dem SpamAssassin-Benutzer an und fügen in die SpamAssassin-Konfigurationsdatei am Anfang folgende Zeilen ein:
vi /var/spool/amavisd/.spamassassin/user_prefs
# Bayes-Test
rawbody BAYES_TEST /amavisd-test/i
score BAYES_TEST 400
describe BAYES_TEST amavisd-test
Zum Schluss schicken wir von einem externen Postfach eine E-Mail an unseren Server mit dem Inhalt: "amavisd-test".
Sollte alles funktionieren, wird die E-Mail automatisch in den Spamordner verschoben.
Um auch die Bayes-Funktion zu testen, laden wir uns die erkannte Spam-Mail in die Bayes-Datenbank:
sa-learn --spam --showdots --dir /home/vmail/[Domain]/[E-Mail-Konto]/.Junk/cur/
Schickt man sich jetzt exakt die gleich E-Mail nochmal, also mit gleichem Betreff und gleichen Inhalt, sollte auch der Bayes-Test anschlagen. Der Header der E-Mail kann dann folgendermaßen aussehen:
X-Spam-Report: =?ISO-8859-1?Q? * 51 BAYES_99 BODY: Spamwahrscheinlichkeit nach Bayes-Test: 99-100% * [score: 1.0000] * 0.2 BAYES_999 BODY: Spamwahrscheinlichkeit nach Bayes-Test: 99.9-100% * [score: 1.0000] * 400 BAYES_TEST RAW: bayes-test?=
Der X-Spam-Report kann noch mehrere Zeilen beinhalten.
Amavisd-new
Dass Amavisd-new die Mail ebenfalls geprüft hat erkennen wir an folgender Zeile im E-Mail Header:
X-Virus-Scanned: amavisd-new at it-mk.at
EICAR-Testdatei
Eine weitere Möglichkeit, um Viren in Mails zu testen, ist die EICAR-Testdatei. Dazu schickt man eine interne Mail und fügt eine Textdatei mit folgendem Inhalt ein:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Es sollte eine Unzustellbarkeitsbenachrichtigung erfolgen, da die Mail einen Virus bzw. eine EICAR-Datei enthält.
Quellen
Postfix & SpamAssassin auf Centos 7
https://janikarhunen.fi/tackle-spam-with-spamassassin-on-centos7-and-postfix.html
Postfix, Amavisd-new, ClamAV & SpamAssassin auf Centos 7
http://forums.sentora.org/showthread.php?tid=1132
Amavies-new local_domains_maps anpassen um alle konfigurierten (auch virtuelle) Domains zu verarbeiten
https://forum.iredmail.org/topic3800-iredmail-support-localdomainsmaps-in-amavisdnew.html
Contos und Red Hat $sa_spam_report_header bzw. X-Spam-Report konfigurieren
https://www.redhat.com/archives/epel-devel-list/2013-February/msg00049.html
Ordnerpfad der user_prefs von Amavisd-new
https://wiki.apache.org/spamassassin/IntegratedInPostfixWithAmavis
SELinux, erlaubte Ordner und Pfade in denen der Spamassassin agieren darf.
https://www.systutorials.com/docs/linux/man/8-spamd_selinux/
Dovecot Sieve filters auf Centos 7 installieren
https://www.vultr.com/docs/simple-mailserver-postfix-dovecot-sieve-centos-7
Dovecot Sieve filters konfigurieren
https://workaround.org/ispmail/jessie/spamassassin
Auf leere Felder Testen
https://www.fastmail.com/help/technical/sieve-faq.html#matchempty
Kommentare