Spam-Abwehr für Plesk und qmail mit spamdyke
From RootForum Community » Wiki
Original: Mini-HOWTO: Spam-Abwehr für Plesk und qmail mit spamdyke
Disclaimer: Übliches Blabla. Ihr seid selbst für eure Systeme verantwortlich. Ich übernehme keine Garantie, dass das untenbeschriebene Vorgehen funktioniert und euer System nicht zerstört. Falls das passiert: Pech gehabt.
Contents |
Einleitung
spamdyke is a filter for monitoring and intercepting SMTP connections between a remote host and a qmail server. Spam is blocked while the remote server (spammer) is still connected; no additional processing or storage is needed.
Im Gegensatz zu anderen Lösungen ist spamdyke nicht-invasiv, d. h. qmail-smtpd muss beim Einsatz von spamdyke nicht gepatched und neu kompiliert werden. Das Setup sollte daher auch ein Update von Plesk und dem damit ausgelieferten qmail überleben.
Eine Featureübersicht von spamdyke gibt es unter http://www.spamdyke.org/.
Installation
Die Installation ist recht schnell erledigt: Einfach Quellcode herunterladen und kompilieren. Eventuell müssen noch der GCC und die Entwicklerpakete von OpenSSL (für TLS-Support in spamdyke) nachinstalliert werden.
Zunächst wird der Quellcode von spamdyke von der Homepage heruntergeladen, nach /usr/src gespeichert und dort entpackt. Eine vorige Prüfung, ob vielleicht eine aktuellere Version veröffentlicht wurde, schadet dabei nicht.
cd /usr/src wget http://www.spamdyke.org/releases/spamdyke-4.0.10.tgz tar -xzf spamdyke-4.0.10.tgz
Je nach Distribution müssen ggf. noch die notwendigen Entwicklerpakete (Compiler, make usw.) installiert werden.
# OpenSuSE Linux <11.0 yast -i gcc openssl-devel # OpenSuSE Linux >=11.0 yast -i gcc libopenssl-devel # Debian oder Ubuntu Linux aptitude install gcc libssl-dev # Fedora, RHEL oder CentOS yum install gcc openssl-devel
Danach kann spamdyke kompiliert und nach /usr/local/bin installiert werden.
cd /usr/src/spamdyke-4.0.10/spamdyke ./configure && make make install
Optional können auch noch einige Hilfsprogramme installiert werden. Diese sind für das Funktionieren von spamdyke aber nicht notwendig.
cd /usr/src/spamdyke-4.0.10/utils ./configure && make cp -a dnsa dnsany dnsany_libc dnsmx dnsns dnsptr dnssoa dnstxt domain2path domainsplit /usr/local/bin
Konfiguration
Zunächst wird spamdyke nun mit einer sinnvollen Konfiguration versorgt. Dazu wird eine Datei namens /etc/spamdyke.conf mit folgendem Inhalt angelegt:
local-domains-file=/var/qmail/control/rcpthosts tls-certificate-file=/var/qmail/control/servercert.pem smtp-auth-command=/var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /bin/true smtp-auth-level=ondemand-encrypted graylist-level=always-create-dir graylist-dir=/var/qmail/spamdyke/greylist graylist-min-secs=300 graylist-max-secs=1814400 sender-blacklist-file=/var/qmail/spamdyke/blacklist_senders recipient-blacklist-file=/var/qmail/spamdyke/blacklist_recipients ip-in-rdns-keyword-blacklist-file=/var/qmail/spamdyke/blacklist_keywords ip-blacklist-file=/var/qmail/spamdyke/blacklist_ip rdns-whitelist-file=/var/qmail/spamdyke/whitelist_rdns ip-whitelist-file=/var/qmail/spamdyke/whitelist_ip greeting-delay-secs=5 dns-blacklist-entry=ix.dnsbl.manitu.net dns-blacklist-entry=zen.spamhaus.org dns-blacklist-entry=zombie.dnsbl.sorbs.net dns-blacklist-entry=dul.dnsbl.sorbs.net dns-blacklist-entry=bogons.cymru.com reject-missing-sender-mx reject-empty-rdns reject-unresolvable-rdns reject-ip-in-cc-rdns
Zusätzlich müssen einige Verzeichnisse und Dateien angelegt werden, auf die spamdyke zurückgreift.
mkdir -p /var/qmail/spamdyke/greylist touch /var/qmail/spamdyke/blacklist_ip /var/qmail/spamdyke/blacklist_recipients \ /var/qmail/spamdyke/whitelist_ip /var/qmail/spamdyke/blacklist_keywords \ /var/qmail/spamdyke/blacklist_senders /var/qmail/spamdyke/whitelist_rdns chown -R qmaild:qmail /var/qmail/spamdyke
Im letzten Schritt muss die Einbindung von qmail über den xinetd bearbeitet werden, so dass spamdyke vor qmail-smtpd ausgeführt wird. Dazu werden die Dateien /etc/xinetd.d/smtp_psa und /etc/xinetd.d/smtps_psa bearbeitet:
# /etc/xinetd.d/smtp_psa
service smtp
{
socket_type = stream
protocol = tcp
wait = no
disable = no
user = root
instances = UNLIMITED
env = SMTPAUTH=1 POPLOCK_TIME=20
server = /var/qmail/bin/tcp-env
server_args = -Rt0 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
}
# /etc/xinetd.d/smtps_psa
service smtps
{
socket_type = stream
protocol = tcp
wait = no
disable = no
user = root
instances = UNLIMITED
env = SMTPAUTH=1 POPLOCK_TIME=20
server = /var/qmail/bin/tcp-env
server_args = -Rt0 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
}
Nach der Änderung muss der xinetd mit dem Kommando
/etc/init.d/xinetd restart
neugestartet werden. Weitere Schritte sind nicht notwendig.
Falls noch der ältere inetd eingesetzt wird, muss dessen Konfigurationsdatei /etc/inetd.conf folgendermaßen ergänzt werden:
smtp stream tcp nowait.1000 root /var/qmail/bin/tcp-env tcp-env /usr/bin/env SMTPAUTH=1 POPLOCK_TIME=20 END=1 /var/qmail/bin/relaylock /usr/local/bin/spamdyke -f /etc/spamdyke.conf /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true smtps stream tcp nowait.1000 root /var/qmail/bin/tcp-env tcp-env /usr/bin/env SMTPAUTH=1 POPLOCK_TIME=20 END=1 /var/qmail/bin/relaylock /var/qmail/bin/qmail-smtpd /var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /var/qmail/bin/true
Vor der Inbetriebnahme sollte aber auf jeden Fall überprüft werden, ob die in der Konfigurationsdatei /etc/spamdyke.conf vorgenommenen Einträge für den jeweiligen Server sinnvoll sind. Insbesondere die eingetragenen DNSBL sollten überprüft werden. Wenn deren Nutzung nicht gewünscht ist, müssen die entsprechenden Einträge entfernt oder auskommentiert werden.
Separates Logging
Wer bezüglich der Effizienz von spamdyke skeptisch ist und zunächst prüfen möchte, welche E-Mails abgewiesen werden, kann spamdyke mit einem aktuellen Syslog-Daemon in eine separate Logdatei schreiben lassen.
In der Konfigurationsdatei /etc/spamdyke.conf muss lediglich folgende Zeile hinzugefügt werden:
log-level=INFO
Details zum Logging von spamdyke finden sich unter http://spamdyke.org/documentation/README.html#FULL_LOGGING
syslog-ng
Folgende Einträge müssen in die Konfigurationsdatei /etc/syslog-ng/syslog-ng.conf eingefügt werden:
filter f_spamdyke { level(info) and facility(mail) and match("spamdyke"); };
destination spamdyke { file("/var/log/spamdyke.log"); };
log { source(src); filter(f_spamdyke); destination(spamdyke); };syslog-ng muss danach mit /etc/init.d/syslog-ng reload neu gestartet werden. Die blockierten E-Mails werden in /var/log/spamdyke.log protokolliert.
rsyslog
Folgender Eintrag muss in die Konfigurationsdatei /etc/rsyslog.conf eingefügt werden:
:programname, isequal, "spamdyke" /var/log/spamdyke.log
rsyslog muss danach mit /etc/init.d/rsyslog reload neu gestartet werden. Die blockierten E-Mails werden in /var/log/spamdyke.log protokolliert.
Wartung des Datenbestands (Greylisting)
spamdyke verwaltet die Einträge für das Greylisting nicht selbst. Aufräumarbeiten müssen also periodisch durch einen Cronjob erledigt werden.
Dazu wird ein Skript namens /etc/cron.daily/spamdyke.sh erstellt, welches diese Aufgabe erledigt.
#!/bin/sh # Löschen von leeren Einträgen, die älter als 1 Woche sind. /usr/bin/find /var/qmail/spamdyke/greylist/ -type f -mmin +10080 -size 0 -delete # Löschen veralteter Datensätze. Der Wert sollte mit dem von graylist-max-secs (in unserer Konfiguration 1814400 Sekunden = 30240 Minuten = 3 Wochen) übereinstimmen. /usr/bin/find /var/qmail/spamdyke/greylist/ -type f -mmin +30240 -delete
Das Skript muss mit folgendem Kommando ausführbar gemacht werden:
chmod +x /etc/cron.daily/spamdyke.sh