Viren und SPAM bekämpfen mit SpamAssassin und Amavis

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 

Postfix

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...

Policy Deamons

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.

Postgrey

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
...

PolicyD

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

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

FIXME 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\\

SpamAssassin

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.

sa-update

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
...

Plugins

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/).
FIXME 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.

FIXME

Veraltet???
su - spamassassin -c "razor-admin -create"
su - spamassassin -c "razor-admin -register"

mysql

FIXME

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

Weitere Ideen

  • Nilsimsa (ähnlich wie Bayes?)
  • dSPAM
  • SPF-Policyd
  • Stottern
  • Spamtrap

Probleme

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"

White- und Blacklisting in Amavis

@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.

Mailserver aus Blacklist entfernen

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:

Links

 
linux/server/spam.txt · Zuletzt geändert: 01.06.2009 15:30 von tangst