Spamabwehr ist eine heikle Angelegenheit. Es gibt viele Strategien aber keine 100 prozentige Lösung. Da bei jeder Diskussion gegen Spam ach die bösen Jungs zuhören. So befindet man sich in einem Rüstungswettlauf mit den Spamern. Daher ist die Spamabwehr einer stetigen veränderung unterworfen.
Meine aktuelle Lösung ist hier beschrieben. Sie ist aber bei weitem noch nicht an dem Punkt, an dem ich sie haben möchte. Allgemein gilt, dass es besser ist Spam überhaupt nicht entgegenzunehmen, als ihn später mit einem Ratingsystem wie SpamAssassin zu analysieren. Daher habe ich bereits im Postfix ein umfangreiches Regelwerk eingefügt.
apt-get install amavisd-new \ spamassassin spamc clamav clamav-daemon razor pyzor \ lha arj unrar zoo unzoo nomarch lzop \ cabextract unace p7zip
In den bereits vorhandenen Konfigurationsdateien müssen noch folgende Änderungen vorgenommen werden:
/etc/postfix/main.cf:
...
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_client_restrictions =
smtpd_helo_restrictions =
smtpd_sender_restrictions =
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain
reject_unauth_destination,
reject_unauth_pipelining,
reject_unlisted_recipient,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client proxies.blackholes.wirehub.net,
reject_rbl_client zombie.dnsbl.sorbs.net,
reject_rbl_client ix.dnsbl.manitu.net
reject_rbl_client zen.spamhaus.org
reject_rhsbl_sender dsn.rfc-ignorant.org
check_policy_service inet:127.0.0.1:XXXXX,
permit
content_filter = smtp-amavis:[127.0.0.1]:10024
mime_header_checks = regexp:/etc/postfix/mime_header_checks
...
/etc/postfix/master.cf:
...
smtp-amavis unix - - n - 2 smtp
-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_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-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
Für was die ganzen Optionen gut sind, habe ich auch nicht raus gefunden. Auf jeden Fall werden sie bei allen Beispielen verwendet. Mein verständnis ist, dass das Mail über den Port 10025 nach dem SpamAssassin wieder an den Postfix übergeben wird. Wieso dass dann nochmals Kontrollen fällig werden...
Je nachdem, welcher Policy Deamon verwendet werden, muss die Zeile
check_policy_service inet:127.0.0.1:XXXXX
noch angepasst werden. Für Postgrey gilt Port 60000 und für policyd gilt Port 10031.
Der policyd enthält neben einem Greylisting auch noch andere Funktionen um Spamserver zu identifizieren. Allerdings konnte ich bis jetzt keine Treffer ausser beim Greylisting beobachten. Ob postgrey oder policyd besser ist kann ich nicht sagen. Aber policyd bietet zusätzlich noch die Möglichkeit White- und Blacklists mit MySQL zu verwalten.
Am Postgrey Deamon muss nach der Installation keine Einstellung vorgenommen werden.
apt-get install postgrey
/etc/postfix/main.cf:
...
check_policy_service inet:127.0.0.1:60000,
permit
...
Für den PolicyD muss noch eine Datenbank und ein User für den MySQL-Zugriff angelegt werden. Am Besten vor der Installation, dann kann man diese Angaben dem Installationsskript übergeben und die Tabellen werden automatisch angelegt.
Ansonsten kann man das händisch mit dem Befehl
mysql policyd < /usr/share/dbconfig-common/data/postfix-policyd/install/mysql
erledigen.
apt-get install postfix-policyd
/etc/postfix/main.cf:
...
check_policy_service inet:127.0.0.1:10031,
permit
...
Amavis ist für die Filterung der Emails zuständig. Sowohl Viren- als auch Spamfilter werden werden vom Amavis miteinbezogen. Für die Virenbekämpfung verwenden wir die OpenSource Lösung ClamAV und gegen Spam kommt noch der SpamAssassin zum Einsatz.
Die Konfiguration von Amavis wird neuerdings im Verzeichnis /etc/amavis/conf.d/ vorgenommen.
Damit ClamAV Zugriff auf die Emails erhält, müssen wir noch die Rechte ändern.
adduser clamav amavis
Die Spam und Virenfilter müssen zuerst aktiviert werden, indem man folgende vier Zeilen auskommentiert.
/etc/amavis/conf.d/15-content_filter_mode:
... @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); ... @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); ...
Weitere Feineinstellungen können hier noch vorgenommen werden
/etc/amavis/conf.d/50-user:
...
$sa_spam_subject_tag = '[SPAM] ';
$sa_spam_modifies_subj = 1;
$sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 5; # add 'spam detected' headers at that level
$final_spam_destiny = D_PASS; # (defaults to D_BOUNCE)
@local_domains_maps = (".$mydomain"); # read from /etc/mailname
für Infos:
view /usr/share/doc/amavisd-new/README.customize.gz
view /usr/share/doc/amavisd-new/README.postfix.gz
Deutsche Übersetzung für Fehlermeldungen
Veraltet: cp /etc/amavis/en_US/template-virus-admin.txt /etc/amavis/notify_virus_admin.txt\\ cp /etc/amavis/en_US/template-virus-recipient.txt /etc/amavis/notify_virus_recips.txt\\
Für Spamassassin müssen keine Einstellungen vorgenommen werden. Die entsprechenden Einstellungen werden in Amavis vorgenommen. Die Einstellungen im Amavis haben Vorrang gegenüber den Einstellungen in den Spamassassin Konfigurationsdateien.
Da sich Spammer den Filtern anpassen müssen die Filterregeln öfters geändert werden. Früher musste man dazu eine neue Version vom Spamassassin installieren. Mit dem Befehl sa-update lässt sich das Regelwerk auf den neuesten Stand bringen, ohne Spamassassin neu zu installieren. Unter Ubuntu/Debian ist dies bereits vorbereitet. Dazu muss nur der entsprechende Cronjob aktiviert werden.
/etc/default/spamassassin:
... CRON=1
Damit werden die Standardregeln neu geladen. Es gibt aber die Möglichkeit, weitere Regelwerke von fleissig engagierten Spamfightern hinzuzufügen. Dafür müssen wir eine Channelliste anlegen.
/etc/spamassassin/channels.txt:
updates.spamassassin.org 72_sare_redirect_post3.0.0.cf.sare.sa-update.dostech.net 70_sare_evilnum0.cf.sare.sa-update.dostech.net 70_sare_bayes_poison_nxm.cf.sare.sa-update.dostech.net 70_sare_html0.cf.sare.sa-update.dostech.net 70_sare_html_eng.cf.sare.sa-update.dostech.net 70_sare_header0.cf.sare.sa-update.dostech.net 70_sare_header_eng.cf.sare.sa-update.dostech.net 70_sare_specific.cf.sare.sa-update.dostech.net 70_sare_adult.cf.sare.sa-update.dostech.net 72_sare_bml_post25x.cf.sare.sa-update.dostech.net 99_sare_fraud_post25x.cf.sare.sa-update.dostech.net 70_sare_spoof.cf.sare.sa-update.dostech.net 70_sare_random.cf.sare.sa-update.dostech.net 70_sare_oem.cf.sare.sa-update.dostech.net 70_sare_genlsubj0.cf.sare.sa-update.dostech.net 70_sare_genlsubj_eng.cf.sare.sa-update.dostech.net 70_sare_unsub.cf.sare.sa-update.dostech.net 70_sare_uri0.cf.sare.sa-update.dostech.net 70_sare_obfu0.cf.sare.sa-update.dostech.net 70_sare_stocks.cf.sare.sa-update.dostech.net 70_zmi_german.cf.zmi.sa-update.dostech.net 88_FVGT_Bayes_Poison.cf.sare.sa-update.dostech.net 88_FVGT_Tripwire.cf.sare.sa-update.dostech.net 88_FVGT_rawbody.cf.sare.sa-update.dostech.net 88_FVGT_subject.cf.sare.sa-update.dostech.net chickenpox.cf.sare.sa-update.dostech.net sought.rules.yerp.org
Damit die Herkunft überprüft werden kann, müssen noch die GPG-Keys der verschiedenen Quellen gespeichert werden.
wget wget http://daryl.dostech.ca/sa-update/sare/GPG.KEY gpg --import GPG.KEY sa-update --import GPG.KEY rm GPG.KEY wget http://spamassassin.apache.org/updates/GPG.KEY gpg --import GPG.KEY sa-update --import GPG.KEY rm GPG.KEY wget http://yerp.org/rules/GPG.KEY sa-update --import GPG.KEY
/etc/spamassassin/keys.txt:
856AA88A 5244EC45 6C6191E3
Damit die neue Channeldatei auch benutzt wird, muss diese bei jedem sa-update angegeben werden, also auch beim cronjob.
/etc/cron.daily/spamassassin:
... sa-update --channelfile /etc/spamassassin/channels.txt --gpgkeyfile /etc/spamassassin/keys.txt || exit 0 ...
Es können auch weitere Plugins hinzugeladen werden. Diese müssen in das Verzeichnis kopiert werden, wo sich die *.cf Dateien vom Spamassassin befinden (/usr/share/spamassassin/).
Wenn man aber sa-update verwendet, verschiebt sich dieser Pfad beim Download jeder neuen Version (aktuell /var/lib/spamassassin/3.002004/). Daher ist die Wartung von zusätzlichen Plugins schwierig. Wie man das Problem löst, konnte ich bis jetzt auch nicht erruieren.
Veraltet??? su - spamassassin -c "razor-admin -create" su - spamassassin -c "razor-admin -register"
grant all on spamassassin.* to spamassassin@garfield identified by '{passwort}';
flush privileges;
->create database spamassassin;
mysql spamassassin < /usr/share/doc/spamassassin/examples/spamassassin.sql
/etc/init.d/spamassassin restart /etc/init.d/postfix reload
Um Spamassassin zu testen:
spamassassin -D --lint
Wenn die Bayesian Datenbanken nicht gelesen werden können, müssen sie konvertiert werden.
# bis Version 2.63 su - spamassassin -c "sa-learn --rebuild" # ab Version 3.0 su - spamassassin -c "sa-learn --sync"
@whitelist_sender_maps @blacklist_sender_maps $per_recip_blacklist_sender_lookup_tables $per_recip_whitelist_sender_lookup_tables
die Post auf der gleichen IP-Adresse, aber über Port 587 einliefern und dort keinen Content-Filter konfigurieren. /etc/postfix/master.cf
...
#submission
587 inet n - n - - smtpd
-o content_filter=
...
@virus_lovers_maps
List of addresses for which the results of virus checks are ignored.
@spam_lovers_maps
List of addresses for which the results of spam checks are ignored.
@bad_header_lovers_maps
List of addresses for which the results of bad header checks are ignored.
@bypass_spam_checks_maps
List of addresses for which spam checks are bypassed completely.
Was machen, wenn der eigene Mailserver auf einer Blacklist landet. Erstens muss man es selber bemerken und zweitens, muss man noch wissen wie man den Server wieder von der Liste löscht. Hierzu ein Heiseartikel: