Mail-Server » Qmail

ID #1342 Plesk & Qmail: Spamdyke mit MySQL-Logging

Problem:

Spamdyke funktioniert recht gut, hat aber einen Nachteil: Es schreibt seine Meldungen ausschließlich ins Maillog. Wer also eine Auswertung erstellen will, muß das Maillog umständlich durchsuchen. (Z.B. Haggy's Plesk Spamdyke Control Panel.) Daher hat sich Haggy entschlossen, Spamdyke um ein Logging in eine MySQL-Datenbank zu erweitern.

Im Folgenden ist die Installation von Spamdyke mit MySQL-Logging inkl. Haggy's Spamdyke-Control-Panel für Plesk beschrieben:

Installation

Vorbereitung

Als erstes richten wir die Datenbank und einen Datenbank-User ein:

CREATE DATABASE spamdyke;
USE spamdyke;
CREATE TABLE `spamdyke_log_table` (
	`id` bigint(7) NOT NULL auto_increment,
	`time` timestamp NOT NULL default CURRENT_TIMESTAMP,
	`reason` varchar(20) character set utf8 NOT NULL,
	`from` varchar(50) character set utf8 NOT NULL,
	`to` varchar(50) character set utf8 NOT NULL,
	`ip` varchar(15) character set utf8 NOT NULL,
	`rdns` varchar(50) character set utf8 NOT NULL,
	`auth` varchar(25) character set utf8 NOT NULL,
	PRIMARY KEY  (`id`),
	KEY `time` (`time`),
	KEY `reason` (`reason`,`from`,`to`,`ip`,`rdns`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

#und noch den User einrichten:
GRANT ALL ON spamdyke.* TO 'spamdyke'@'localhost' IDENTIFIED BY 'spamdyke';
FLUSH PRIVILEGES;

Nun brauchen wir noch einige Libaries und einen C-Compiler:

#Debian:
apt-get install gcc libmysqlclient15-dev libssl-dev
#SuSE (Achtung, in letzter Zeit hat SuSE seine Pakete leicht umbenannt!)
yast -i gcc libmysqlclient-devel libopenssl-devel

Download und Kompilieren

Aktuell ist es die Version 4.0.8 von Haggy:

cd /usr/local/src
wget http://www.haggybear.de/download/spamdyke-mysql.tgz
tar xzf spamdyke-mysql.tgz
cd spamdyke-*
cd spamdyke/
./configure

Hier achten wir bei der Ausgabe auf Fehlermeldungen die wir beheben, indem wir die entsprechenden Devel-Pakete nach installieren. Für den MySQL-Support müssen folgende Zeilen auftauchen:

checking for MySQL (for MySQL-Logging support)... yes
checking for MySQL includes (for MySQL-Logging support)...yes

Wenn alles vorhanden ist geht es weiter in unserem Dreisatz:

make
make install

Konfiguration

Folgende /etc/spamdyke.conf kann man als Ausgang für seine individuelle Konfiguration nutzten:

#für das Plesk-Addon von Haggybear:
log-level=info

local-domains-file=/var/qmail/control/rcpthosts
tls-certificate-file=/var/qmail/control/servercert.pem

#Copy&Paste from xinetd-conf
smtp-auth-command=/var/qmail/bin/smtp_auth /var/qmail/bin/true /var/qmail/bin/cmd5checkpw /bin/qmail/bin/true
smtp-auth-level=ondemand-encrypted

#wichtiger Timeout:
idle-timeout-secs=100
graylist-level=always-create-dir
graylist-dir=/var/qmail/spamdyke/greylist
#(300 Sek. = 5 Min.)
graylist-min-secs=300
#1814400 Sek. = 3 Wochen
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
sender-whitelist-file=/var/qmail/spamdyke/whitelist_senders
greeting-delay-secs=5

#ggf. ein-/auskommentieren:
dns-blacklist-entry=ix.dnsbl.manitu.net
#dns-blacklist-entry=sbl.spamhaus.org
#dns-blacklist-entry=zen.spamhaus.org
#dns-blacklist-entry=list.dsbl.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

#MySQL-Logging:
config-mysql-database=spamdyke
config-mysql-username=spamdyke
config-mysql-password=spamdyke

Da auch mit Haggy's Änderung Spamdyke noch nicht vollends auf MySQL basiert, müssen folgende Dateien und Verzeichnisse noch per Hand angelegt werden:

mkdir /var/qmail/spamdyke
mkdir /var/qmail/spamdyke/greylist
touch /var/qmail/spamdyke/blacklist_ip 
touch /var/qmail/spamdyke/blacklist_recipients
touch /var/qmail/spamdyke/whitelist_ip
touch /var/qmail/spamdyke/whitelist_senders
touch /var/qmail/spamdyke/blacklist_keywords
touch /var/qmail/spamdyke/blacklist_senders
touch /var/qmail/spamdyke/whitelist_rdns
chown -R qmaild:qmail /var/qmail/spamdyke

Installation abschließen

ACHTUNG: der Plesk-Eigene RBL-Blocker (/usr/sbin/rblsmtpd) ist nicht mehr nötig!
Bei Einsatz von inetd kann es sogar zu Fehlern führen, da die Zeile dann zu lang wird.
Vorher also im Plesk abschalten unter [Server] -> [E-Mail] -> "Spamschutz auf Basis der DNS-Blackhole-Listen aktivieren"

Nun binden wir Spamdyke in die SMTP-Verarbeitung ein.
Entweder in /etc/inetd.conf:

smtp stream tcp nowait.1000 root /var/qmail/bin/tcp-env tcp-env /usr/bin/env SMTPAUTH=1 SHORTNAMES=1 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

Oder in /etc/xinetd.d/smtp_psa (und smtps_psa):

service smtp {
	...
	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
}

Aufräumscript

Haggy liefert das Aufräumscript bereits mit:

cp -p ./cron/spamdyke-mysql-cleanup /etc/cron.daily/.

Kurz im Editor öffnen und die Datenbank-Daten angeben.
Wichtig bei älteren Versionen: Wir schmeißen alle Kommentare mit // raus, da diese fehlerhaft sind.

use constant DBD => 'DBI:mysql:spamdyke:localhost:3306';
use constant DBUSER => 'spamdyke';
use constant DBPASS => 'spamdyke';

Wer keine tägliche Email erhalten möchte, schreibt zusätzlich ein exit; nach dem disconnect:

$dbh->disconnect;
exit;

my $rec = MAIL_RECIPIENT;

Installation des SCP

Der ganze Aufwand lohnt sich ja nur, wenn man das "Plesk Spamdyke Control Panel" installieren möchte:

Aktulle Version bei haggybear.de oder im SSF. (Den Thread nach neueren Versionen durchsuchen!)

#SuSE
cd /usr/local/psa/admin/htdocs
#Debian:
cd /opt/psa/admin/htdocs

wget -O scp.zip http://serversupportforum.de/forum/attachments/plesk/2623d1237420678-plesk-spamdyke-control-panel-scp2.zip
unzip scp.zip
mv scp211 spamdyke
cd spamdyke

#Da Haggy leider nur ein Zip anbietet, müssen wir uns die Dateirechte alle per Hand setzten:
chmod 755 ../spamdyke
chown -R root:psaadm *
chmod 644 -R *
chmod +x lang *.sh
chown root:root wrapper
chmod 4755 wrapper
chmod 777 rights.txt

Die config.inc.php muß i.d.R. nicht verändert werden.
Aber unter Ubuntu muss man ggf. noch die Shell ändern, da von Haggy /bin/sh als Link auf /bin/bash erwartet wird. Da Ubuntu aber auf /bin/dash verlinkt muss man entweder den Link umbiegen, oder den Wrapper mit dem konkreten Aufruf von bash neu kompilieren.
(Letzteres muss dann nach jedem Update erneut gemacht werden.)

Plesk-Button

Nun loggen wir uns in Plesk ein und gehen auf [Server] -> [Benutzerdefnierte Buttons] und klicken dort auf [Neuen Button anlegen].
Folgende Einträge setzen wir (der Rest bleibt unverändert):

Button-Beschriftung Spamdyke
Hintergrundbild (z.B. das dslogo.gif aus dem Zip)
URL /spamdyke/index.php
Domain-ID einfügen [klick]
Domainname einfügen [klick]
Kunden-ID einfügen [klick]
Kontexthilfe-Inhalt Spamdyke-Control-Panel
URL im Control Panel öffnen [klick]
Sichtbar für andere Benutzer [klick]

Nach dem Klick auf [OK] wird der Button angelegt und ist in der Domain-Ansicht verfügbar.

Troubleshooting:

a) Folgender Fehler wird im Plesk angezeigt:

Spamdyke ist nicht installiert, oder der Pfad zur spamdyke.conf in config.inc.php stimmt nicht!!

Dies ist ein Anzeichen dafür, dass der Wrapper nicht richtig funktioniert. Wenn das SetUID-Bit korrekt gesetzt ist (prüfen!!!), dann probiert es mal mit einem selbst kompilierten Wrapper. (Vor allem auf 64-Bit-Systemen oder Ubuntu.)

b) Das SCP läuft zwar aber es werden kein Daten angezeigt.
Überprüft im SCP die config.inc.php ob folgende Zeile existiert (und zwar nur Einmalig):

define("LOG_TYPE","mysql");

c) Das Update wird zwar angezeigt, funktioniert aber nicht.
Entweder wieder ein Problem mit dem Wrapper, falls er selbst kompiliert war. (Denn beim Update wird ein neuer installiert.)
Oder ein Fehler in der Update-Routine. In beiden Fällen hilft eine manuelle Installation wie oben aus einer neuen Zip-Datei.

Weitere Links

 

sozial Bookmarking
Bookmarken bei YIGG Bookmarken bei Mister-Wong Bookmarken bei Icio Bookmarken bei del.icio.us Bookmarken bei Technorati Bookmarken bei Furl Bookmarken bei Spurl Bookmarken bei Yahoo Bookmarken bei Google

vom 2008-11-10 12:22, zuletzt 2009-05-06 23:32     Artikel ausdrucken Artikel weiterempfehlen Als PDF-Datei anzeigen

Dieser Inhalt ist unter der Creative-Commons Lizenz lizensiert.

Probleme bitte im Server-Support-Forum diskutieren.

Rubriken zu diesem Artikel
überflüssig 1 2 3 4 5 wertvoll  
Durchschnittliche Bewertung:   5 von 5 (1 Bewertungen)

Artikel kommentieren

Kommentar von Steffen (2008-11-10 13:12:49):
Hallo Huschi,

danke für den Patch - klingt nett!

Wurde der Patch bereits an den Spamdyke-Entwickler gesendet und wenn ja: Besteht Aussicht, dass das mal in Spamdyke einfließt?

Steffen

Kommentar von huschi (2008-11-10 13:24:45):
Der Dank gilt wohl eher Haggybear!
Und ja, soweit ich weiß, steht Haggy mit dem Spamdyke-Entwickler in Verbindung.

huschi.

Kommentar von Ulrich (2009-05-10 11:47:47):
Es gibt bei Spamdyke DENIED Gründe, die 28 Zeichen lang sind. Ich habe mein DB Feld 'reason' auf 28 Zeichen erweitert.