Spambekämpfung mit Postfix unter Debian (Teil1)

Die Version des Artikels ist veraltet, zur aktuellen Version >> hier <<

Im wesentlichen beziehe ich mich auf die Debiandistribution, allerdings dürften abweichend von der Grundinstallation der Pakete, diese Howto auf jeden anderen Linuxsystem ebenso funktionieren. Postfix setze ich installiert und konfiguriert vorraus.

Postfix und Cyrus werden hier lediglich mit einer Grundkonfiguration versorgt. Die Authentifikation erfolgt hier gegen die SASLDB. Eine wesentlich einfacher zu administrierende Installation, für mehrere Domains mit vielen Usern erfolgt später. Hauptaugenmerk im Teil1 ist das Einbinden von Spämbekämfungsmechanismen.

Als erstes installieren wir folgende Pakete:

#>apt-get install spamassassin razor perl pyzor procmail fetchmail postfix amavisd-new cyrus-common-2.2 cyrus-imapd-2.2 cyrus-admin-2.2 sasl2-bin

CURUS

Die Konfiguration des Imap-Daemon geschiet durch das Editieren der /etc/imapd.conf. Das von Debian angelegte File ist vollkommen brauchbar. Es muss allerdings noch mindestens ein Administrator des Daemons festgelegt werden.

Hier ein Auszug aus /etc/imapd.conf:

# Uncomment the following and add the space-separated users who
# have admin rights
admins: cyrus

Der User cyrus sollte automatisch von DEBIAN erstellt worden sein. Sollte dies nicht der Fall sein, kann das mittels

#> adduser cyrus

nachholgeholt werden. Bevor man den User cyrus zur Administration des imap-servers verwenden kann, müssen Sie ihm noch ein Passwort zuweisen (Hierzu muss sasl2-bin installiert sein):

#> passwd cyrus
#> saslpasswd2 -c cyrus

Somit sollte der Imapd voll funktionsfähig sein. Nun müssen wir nur noch dafür sorgen, dass die Userkonten eingerichtet werden. Hierfür gibt es als frontend zum Beispiel http://www.web-cyradm.org. Ich möchte hier nur kurz auf die Kommandozeile eingehen.

#> cyradm –user cyrus –server localhost
IMAP Password:
localhost.localdomain> cm user.test1
localhost.localdomain> sam user.test1 cyrus all
localhost.localdomain> quit

Abhängig von den Authentifizierungsmechanismen muss man eventuell noch mit

#> saslpasswd2 -c test1

ein Passwort vergeben.

POSTFIX

Bei der Installation wurden Sie in der Regel gefragt, wie POSTFIX genutzt werden soll. (local-delivery, Internet-Site…). POSTFIX wird durch die Dateien /etc/postfix/main.cf und /etc/postfix/master.cf konfiguriert. Damit das Zusammenspiel mit CYRUS problemlos klappt, müssen folgende Zeilen in die Datei /etc/postfix/master.cf geschrieben werden:

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 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,192.168.0.0/16 \
-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 smtpd_milters= \
-o local_header_rewrite_clients= \
-o local_recipient_maps= \
-o relay_recipient_maps= \
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

cyrus unix – n n – – pipe
flags=R user=cyrus argv=/usr/bin/spamc -e /usr/sbin/cyrdeliver -e -r ${sender} -m ${extension} ${user}

Die Datei /etc/postfix/main.cf wird um folgende Einträge ergänzt:

content_filter=smtp-amavis:[127.0.0.1]:10024
mailbox_transport = cyrus
mailbox_command = /usr/bin/procmail -t -a $EXTENSION
mynetworks = 192.168.1.0/8, 127.0.0.0/8

Der Eintrag mynetworks dient dazu, dass Mails von diesen Rechnern, mit beliebigem Absender verschickt werden können.

FETCHMAIL

FETCHMAIL muss nun mitgeteilt werden, welche Accounts geholt und wie sie verarbeitet werden müssen. Globale Einstellungen können im File /etc/fetchmailrc vorgenommen werden. Hier, die auf unser Szenario abgestimmte, /etc/fetchmailrc

defaults
proto pop3
no dns

poll pop.gmx.net
proto pop3
auth password
via pop.gmx.net
user „1234567“
pass „geheim“
is „test1″ here

AMAVIS-NEW

Ich installiere Avira AntiVir PersonalEdition Classic. Hier sei darauf verwiesen, dass es noch jede Meneg weitere Virenscanner gibt, die von Amavis-new unterstützt werden. Ansonsten muss man amavis noch verständlich machen, wer sich auf ihn verbinden darf. Dies erfolgt mittels @inet_acl am besten in der 50-user

@inet_acl = qw(127.0.0.1 192.168.0.1);

Abschliessend sollte man noch einige Werte anpassen:

$sa_tag_level_deflt = 3.0;
$sa_tag2_level_deflt = 5.0;
$sa_kill_level_deflt = 14.0;

und nicht vergessen folgende Zeilen in /etc/amavis/conf.d/15-content_filter_mode auskommentieren(# entfernen):

@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);

SPAMASSASSIN

SpamAssassin wird unter dem User cyrus ausgeführt, deswegen müssen wir ein paar Anpassungen zur Nutzung der Bayes Datenbank vornehmen. Die /etc/spamassassin/local.cf wird wie folgt umgeschrieben:

report_safe 1

bayes_path /var/spool/cyrus/.spamassassin/bayes
razor_config /var/spool/cyrus/.razor/razor-agent.conf
auto_whitelist_path /var/spool/cyrus/.spamassassin/auto-whitelist
bayes_file_mode 0777
auto_whitelist_file_mode 777

lock_method flock
required_score 5.0
use_bayes 1
bayes_auto_learn 1

bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

use_razor2 1
use_pyzor 1

ok_languages en de
ok_locales en de

score RAZOR2_CHECK 2.500
score BAYES_99 4.300
score BAYES_90 3.500
score BAYES_80 3.000

rewrite_header Subject Spam [_HITS_]

Damit die Filterung nach Sprachen funktioniert müssen wir in /etc/spamassassin/v310.pre

# TextCat – language guesser
#
loadplugin Mail::SpamAssassin::Plugin::TextCat

entkommentieren.

Ebenso müssen wir die /etc/default/spamassassin mittels der Option -A anpassen, ansonsten kann spamc nicht auf den spamd konnektieren.

OPTIONS=“–create-prefs –max-children 5 –helper-home-dir -i 127.0.0.1 -A 192.168.0.1 -A 127.0.0.1″

RAZOR

Vipul’s Razor ist ein verteilter serverseitiger Spam Filter. Razor erstellt kontinuierlich einen Katalog Server zur Spamerkennung. Dieser Server wird durch Internetnutzer mit Spam-Mails gefüllt. Erhält der Server dieselbe Spam Nachricht öfters und von verschiedenen Nutzern wird diese im Katalogserver als Spam gelistet. SpamAssassin prüft ob auf dem Razor Server eine Nachricht als Spam gelistet ist und vergibt im Falle einer positiven Anwort Punkte. Damit das auch funktioniert müssen wir unter dem User cyrus Razor einrichten

#> razor-admin -home=/var/spool/cyrus/.razor/ -create
#> razor-admin -home=/var/spool/cyrus/.razor/ -discover
#> razor-admin -home=/var/spool/cyrus/.razor/ -register

PYZOR

Pyzor ist ähnlich wie Razor und DCC ein verteiltes System zur Erkennung von Spam und basiert auf der Programmiersprache Python. Leute die unerwünschte Mails bekommen, können diese an öffentliche Pyzor Server senden. Wenn dieselbe Mail von mehreren Nutzern als Spam an die Pyzor Datenbank übermittelt wurde wird diese dort gelistet. Bei der Listung in Pyzor wird nicht der Inhalt der Mail gespeichert sondern eine Checksumme der Nachricht. SpamAssassin kann diese Pyzor Datenbank nutzen um zu prüfen ob Nachrichten als Spam gelistet sind und vergibt in diesem Falle Spampunkte.

Als User curus wiederum richten wir pyzor ein

#> pyzor discover
#> pyzor ping

Wenn ein timout kommen sollte nicht gleich erschrecken, pyzor funktioniert bei mir trotz alledem. Alternativ kann man auch die Datei ~/.pyzor/server editieren und einen alternativen Server eintragen 82.94.255.100:24441. Nachzulesen: Bug Track

Weiter zu Teil2