Nachfolgend wird erklärt, wie man policyd-weight, amavisd-new, clamav, spamassassin, dspam installiert, konfiguriert und in das bestehende Setup integriert.
policyd-weight
policyd-weight ist ein effektives Tool zur Spambekämpfung schon vor der Annahme einer E-Mail. Es überprüft das “Envelope” und gleicht die Absenderadresse gegen mehrere DNS-Blacklists ab.
aptitude install policyd-weight
Danach erstellen wir noch eine Standardkonfiguration für policyd-weight:
policyd-weight defaults > /etc/policyd-weight.conf
Folgende Zeile in “/etc/postfix/main.cf” ändern:
### check_policy_service inet:127.0.0.1:12525,
… zu:
check_policy_service inet:127.0.0.1:12525,
Jetzt muss die postfix-Konfiguration neu geladen werden und policyd-weight neu gestartet werden:
/etc/init.d/policyd-weight restart
postfix reload
amavisd-new
Amavisd-new ist ein Content-Filter, der sich in fast jeden MTA integrieren lässt. Über amavisd-new lassen sich viele verschiedene Tools, wie z.B. ClamAV zur Virenprüfung, Spamassassin zur Spamfilterung oder dspam – ebenfalls zu Spamfilterung – integrieren.
Wenn eine E-Mail in postfix ankommt, wird diese an amavis weitergeleitet, überprüft und wieder – mit zusätzlichen Headern – an postfix zur Auslieferung zurückgesendet. Natürlich kann man amavis auch so konfigurieren, dass bestimmte Nachrichtentypen, z.B. Virusmails oder Spammails, sofort geblockt werden. Sobald die Nachricht von amavis an postfix zurückgegeben wurde, kann eine automatische Einsortierung in Ordner über sieve folgen (z.B. Spam-Mails nach Junk).
Installation:
Zu “/etc/apt/sources.list” hinzufügen:
# volatile repository (e.g. for clamav)
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
aptitude install amavisd-new spamassassin clamav clamav-daemon clamav-freshclam pax lha arj bzip2 unrar zoo nomarch cpio lzop cabextract apt-listchanges libauthen-sasl-perl libdbi-perl dspam libmail-dkim-perl razor pyzor dcc-client libdbd-pg-perl
Nun folgt die Konfiguration von amavis (Konfigurationsdateien sind unter “/etc/amavis/conf.d/” zu finden). Ich führe jeweils nur geänderte Zeilen auf:
01-debian:
$unrar = ['rar', 'unrar']; #disabled (non-free, no security support)
#$unrar = undef;
$lha = 'lha'; #disabled (non-free, no security support)
#$lha = undef;
05-domain_id:
@local_domains_acl = ( "." );
05-node_id:
$myhostname = "mail.domain.tld";
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);
20-debian_defaults:
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_PASS; # D_REJECT when front-end MTA
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS; # False-positive prone (for spam)
# $sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt = undef;
50-user:
$max_servers = 2;
$policy_bank{'MYNETS'} = { # mail originating from @mynetworks
originating => 1, # is true in MYNETS by default, but let's make it explicit
os_fingerprint_method => undef, # don't query p0f for internal clients
};
$recipient_delimiter = '+';
$warnvirusrecip = 1;
$mailfrom_notify_admin = "postmaster\@$mydomain";
$mailfrom_notify_recip = "postmaster\@$mydomain";
$mailfrom_notify_spamadmin = "postmaster\@$mydomain";
Jetzt fügen wir noch den clamav-Nutzer der amavis-Gruppe hinzu:
Danach müssen wir Änderungen an der postfix-Konfiguration vornehmen:
Zu main.cf hinzufügen:
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
Zu master.cf hinzufügen:
amavis unix - - n - 2 lmtp
-o lmtp_data_done_timeout=1200
-o lmtp_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_delay_reject=no
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-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
Zuletzt werden postfix, amavis und clamav neu gestartet:
/etc/init.d/postfix restart
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
Testen der Konfiguration
Zum Testen genügt es eine Mail an den Mailserver zu schicken und sich danach die Header-Informationen anzuschauen. Finden sich ähnliche Header wie die folgenden in der Mail wieder, so wird amavis aufgerufen.
X-virus-scanned: Debian amavisd-new at domain.tld
X-spam-flag: NO
X-spam-score: 2.898
X-spam-level: **
X-spam-status: No, score=2.898 required=6.31 tests=[SPF_PASS=-0.001, TVD_SPACE_RATIO=2.899]
Des Weiteren kann man mit folgendem Befehl testen, ob Spam erkannt wird:
sendmail john@example.com < /usr/share/doc/spamassassin/examples/sample-spam.txt
… oder Viren:
telnet localhost 25
HELO localhost
MAIL FROM: <user@change_to_my_domain.tld>
RCPT TO: <user@change_to_my_domain.tld>
DATA
From: virus-tester
To: undisclosed-recipients:;
Subject: amavisd test - simple - spam test pattern
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
quit
Spamassassin Konfiguration
Ans Ende der Datei “/etc/spamassassin/local.cf” anfügen:
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
bayes_auto_expire 0
# pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
# razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf
/etc/spamassassin/v312.pre:
loadplugin Mail::SpamAssassin::Plugin::DKIM
/etc/spamassassin/v320.pre:
loadplugin Mail::SpamAssassin::Plugin::Shortcircuit
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
Razor konfigurieren:
su - amavis
razor-admin -create
Spamassassin-Regeln neu laden:
Automatische Updates
Um spamassassin voll auszureizen, richten wir einen cronjob ein über welchen jede Nacht die Regeln auf den neuesten Stand gebracht werden (als root ausführen!):
/usr/local/sbin/updateSpamassassin:
#!/bin/bash
sa-update &> /dev/null
sa-compile &> /dev/null
exit 0
crontab -e
42 3 * * * /usr/local/sbin/updateSpamassassin &> /dev/null
Ham/Spam aus /var/vmail lernen
Nun erstellen wir noch ein Skript, welches Spam, bzw. Ham aus den Mailboxen der Benutzer lernt (aus den Ordnern “INBOX” und “Junk”). Dieses Skript rufen wir wöchentlich über einen Cronjob auf.
/usr/local/sbin/trainSpamassassin:
#!/bin/bash
VMAILDIR="/var/vmail"
SADIR="/var/lib/amavis/.spamassassin"
DBPATH="/var/lib/amavis/.spamassassin/bayes"
cd $VMAILDIR
for domain in $(find ./ -maxdepth 1 -not -name "." -type d); do
domaindir="$VMAILDIR/$domain"
cd $domaindir
for user in $(find ./ -maxdepth 1 -not -name "." -type d); do
maildir="$domaindir/$user/maildir"
inbox="$maildir/cur"
junk="$maildir/.Junk/cur"
echo "Learning ham from $inbox"
sa-learn --ham --showdots --dbpath $DBPATH $inbox
echo "Learning junk from $junk"
sa-learn --spam --showdots --dbpath $DBPATH $junk
done
done
chown -R amavis:amavis $SADIR
Nun noch das Skript in die crontab aufnehmen (als root ausführen!):
crontab -e
33 4 * * 0 /usr/local/sbin/trainSpamassassin &> /dev/null
Globale sieve-Regeln
Um dem Benutzer das Erstellen von sieve-Regeln für Spam zu ersparen, fügen wir in die Datei “/var/vmail/default.sieve” folgende Zeile ein, um Spam-Mails automatisch in den Ordner “Junk” zu verschieben (sieve wurde schon in Teil 5 dieser Serie konfiguriert):
require ["fileinto"];
# Move spam to spam folder
if header :contains "X-Spam-Flag" ["YES"] {
fileinto "Junk";
stop;
}
dspam
Die Konfiguration von dspam wird nachgereicht.
Quellen:
http://workaround.org/articles/ispmail-etch/#step-5-deliver-emails-through-the-dovecot-lda
http://www200.pair.com/mecham/spam/spamfilter20090215.html#amavisconfig
http://wiki.rootforum.de/mailserver/postfix/clamav_amavisd
http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-debian-lenny-p3
http://www.tuxj0b.de/HOWTO_Mailserver_mit_Postfix_Dovecot_Antispam_und_PostgreSQL_Backend