Inhaltsverzeichnis
SMTP-Eingangstests (qmail-ldap)
Derzeit sind folgende Eingangstest in der /var/qmail/control/qmail-smtpd.rules aktiviert:
Spamassassin
zur Filterung von Spam-Mails ...
Installation
apt-get install spamassassin libnet-ldap-perl libnet-dns-perl pyzor dcc-client libmail-spf-query-perl
die Datei /etc/default/spamassassin
die Variable ENABLED auf 1 setzen
zu OPTIONS muss -A 10.0.0. --ldap-config -x hinzugefügt werden
in OPTIONS --max-children anpassen, mehr Kinder = mehr RAM Verbrauch
Ab spamassassin v3.0 wird intern ein prefork Modell benutzt, d.h. ein Kindprozess sollte bei geringem Spamaufkommen genügen. Mails werden jeweils in die Warteschlange eines Kindprozesses eingereiht. Wie groß diese ist hängt vom System ab und kann mit folgendem Befehl heraus gefunden werden:
perl -MSocket -e'print SOMAXCONN'
- Sind die Warteschlangen aller Kindprozesse voll, werden die Mails ignoriert und in den Logs erscheint z.B.: "spamd[12960]: prefork: server reached --max-children setting, consider
raising it".
in OPTIONS lässt sich die maximale Größe einstellen, bis zu der SA Mails scannt, größere werden ignoriert
eine globale Spamassassin-Konfigurationsdatei anlegen (z.B.: /etc/spamassassin/local.cf)
- jeweils pyzor, dcc konfigurieren (Firewall beachten)
user_scores_dsn ldap://ldap:389/sc=mailAccount,ou=People,o=neofaxe,dc=systemausfall,dc=org?spamassassin?sub?uid=__USERNAME__ user_scores_ldap_username bind dn user_scores_ldap_password password
Einrichtung
für die persönlichen Nutzereinstellungen benötgt jeder ldap-Mail-Eintrag ein Attribut namens spamassassin - dies muss zur ldap-Klassendefinition hinzugefügt werden:
in die /data/etc/schema/sao.schema folgenden Attribut-Typ einfügen:
attributetype ( 2.16.840.1.113730.3.1.217 NAME 'spamassassin' DESC 'SpamAssassin user preferences settings' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
die Klassen-Definition (siehe /data/etc/schema/sao.schema) der ldap-Mail-Klasse (mailDestination) muss um dieses Attribut als MAY-Klausel erweitert werden
erster Test
den Spam-Daemon im Debug-Modus starten: spamd -D -C /etc/spamassassin 2>&1 | less
die mitgelieferte Spam-Test-Datei prüfen lassen: cat /usr/share/doc/spamassassin/examples/sample-spam.txt | spamc
falls dabei der Server-Output lock-Fehler meldet, solltest du chmod 777 /root/.spamassassin ausführen, da die Dateien vom Nutzer nobody angelegt werden
Optimierung
sa-learn
sa-learn kennt die Optionen -ham und -spam damit lässt sich der bayessche filter trainieren, einfach das Verzeichnis mit den Mals dahinter angeben
z.B. sa-learn -spam /meine/mailbox/nurspam
sa-learn --dump magic erzeugt einen Bericht über das bisher Gelernte
nspam und nham sollten >200 sein, da sonst der Bayesfilter nicht verwendet wird
iXhash
In spamassassin lassen sich bequem Erweiterungen einbinden. Eine gut funktionierende besonders für den deutschen Sprachraum ist iXhash.
- das tar.gz runterladen entpacken
die iXhash.cf & iXhash.pm nach /etc/spamassassin kopieren.
- in der ersten Zeile der iXhash.cf den Pfad zur .pm Datei anpassen
- beim nächsten Start von spamd wird der iXhash benutzt (siehe Logdatei)
Botnet
- versucht zu ermitteln, ober der Absender einem Botnet entstammt
- verzögerte die Spamfilterung bei meinen Tests erheblich
CompiledRegexps
- beschleunigt die Spamfilterung durch vorcompilieren regulärer Ausdrücke
Maketools und ein Compiler werden gebraucht
aptitude install make gcc re2c
in die Spamassassinconfig kommt folgende Zeile:
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
mit sa-compile werden die Ausdrücke compiliert
sa-compile nochmal starten, falls beim Neustart von Spamassassin folgende Fehlermeldung auftaucht:
Can't locate Mail/SpamAssassin/CompiledRegexps/body_0.pm
DomainKeys Identified Mail (DKIM)
siehe: http://de.wikipedia.org/wiki/DomainKeys & http://dkim.org
notwendiges Perlmodul installieren
aptitude install libmail-dkim-perl
in die Spamassassinconfig kommt folgende Zeile:
loadplugin Mail::SpamAssassin::Plugin::DKIM
Analyse
spamd -s /var/log/spamfilter.log .. sorgt dafür, dass alle Meldungen in der entsprechenden Datei landen
- nun einige zeit warten
dann mit sa-stats wieviel spam pro user gefiltert wurde und wie hoch der Spamanteil insgesamt war
Einbindung in qmail
Auf dem mail-Server muss ein Interface-Programm installiert werden. Zur Auswahl stehen:
Wir folgten ansatzweise Fighting spam with qmail und nutzen ifspamh.
Spamassassin-Client
apt-get install spamc
ifspamh
Das ist einfach:
die neueste Version von ifspamh herunterladen
das Skript nach /usr/local/bin kopieren
eventuell ksh (korn-Shell) installieren
den Pfad von SPAMC in /usr/local/bin/ifspamh anpassen (/usr/bin/spamc)
da bei uns der spamd auf einem anderen rechner läuft braucht spamc die option -d RECHNERNAME
naja, ein Brocken kommt natürlich noch: ifspamh erfordert mess822 von djb:
wget http://cr.yp.to/software/mess822-0.58.tar.gz tar xzf mess822-0.58.tar.gz cd mess822-0.58 make make setup check
userpsezifische LDAP-Einträge
Falls die Spam-Filterung (also inklusive Verschiebung in ein separates Verzeichnis) aktiv sein soll, dann braucht mensch folgende LDAP-Zeile in seinem LDAP-Mailaccount-Eintrag:
| /usr/local/bin/ifspamh spam-_USERNAME_@systemausfall.org
Falls Spam-Mails lediglich markiert werden sollen, dann hilft folgendes:
| /usr/local/bin/ifspamh spam-_USERNAME_@systemausfall.org || /bin/true
TODO: die Markierungs-Zeile ist nicht korrekt, da die Mails zusaetzlich auch im Spam-Verzeichnis landen
Spam-Verschiebung
Alle Mails werden in den virtuellen Account spam (mit der dash-extension von qmail) umgeleitet. Somit benötigen wir einen LDAP-Eintrag für diesen virtuellen Account:
dn: cn=spamsammler,ou=Roles,o=neofaxe,dc=systemausfall,dc=org objectClass: virtualUser objectClass: mailDestination deliveryMode: nolocal cn: spamsammler mail: spam-default@systemausfall.org mailMessageStore: spam/ qmailDotMode: dotonly
Jeder Nutzer benötigt nun im Verzeichnis /data/maildirs/spam/ eine dot-qmail-Datei - also beispielsweise .qmail-joe mit dem folgenden Inhalt:
/data/maildirs/joe/Maildir/.spam
Spam-Verzeichnisse anlegen
Für jeden Nutzer:
maildirmake /data/maildirs/joe/Maildir/.spam/
Testen!
los geht's ...