Dieses Tutorial basiert auf mehreren Tutorials von Huschi sowie eigenen Tutorials die zu einem kompletten Tutorial zusammengefügt und Fehlerbereinigt wurden. Dieses Tutorial wurde auf einem x64 Root Server von 1und1 getestet dabei wurde SuSE 9.3 sowie Plesk 8x mit qmail verwendet. Das System basiert auf drei Hauptkomponenten einem tcpwrapper für den qmail-daemon, qsheff sowie einem Greylisting System.Der tcpwrapper checkt anhand von Blacklists ob eindeutig identifizierte Systeme versuchen Spam auszuliefern. Das Greylisting verhindert ein sofortiges zustellen der eingehenden E-Mails indem er jede E-Mail die nicht in einer dynamischen Datenbank Tabelle bereits verifiziert ist beim ersten Versuch abweist. Beim zweiten Versuch akzeptiert er diese E-Mail dann, das hat aber auch eine Verzögerung zur Folge die abhängig vom versenden Server ist da er laut RFC einen zweiten Versuch unternehmen muss. Wobei der Zeitabstand variieren kann in der Regel ist der Abstand 10-15 Minuten. Qsheff stellt sicher das alle eingehenden E-Mails durch den Spamfilter sowie durch den Virenscanner gecheckt werden
I.Konzept des Filtersystems
1. Einleitung
Dieses Tutorial basiert auf mehreren Tutorials von Huschi sowie eigenen Tutorials die zu einem kompletten Tutorial zusammengefügt und Fehlerbereinigt wurden. Dieses Tutorial wurde auf einem x64 Root Server von 1und1 getestet dabei wurde SuSE 9.3 sowie Plesk 8x mit qmail verwendet. Das System basiert auf drei Hauptkomponenten einem tcpwrapper für den qmail-daemon, qsheff sowie einem Greylisting System.Der tcpwrapper checkt anhand von Blacklists ob eindeutig identifizierte Systeme versuchen Spam auszuliefern. Das Greylisting verhindert ein sofortiges zustellen der eingehenden E-Mails indem er jede E-Mail die nicht in einer dynamischen Datenbank Tabelle bereits verifiziert ist beim ersten Versuch abweist. Beim zweiten Versuch akzeptiert er diese E-Mail dann, das hat aber auch eine Verzögerung zur Folge die abhängig vom versenden Server ist da er laut RFC einen zweiten Versuch unternehmen muss. Wobei der Zeitabstand variieren kann in der Regel ist der Abstand 10-15 Minuten. Qsheff stellt sicher das alle eingehenden E-Mails durch den Spamfilter sowie durch den Virenscanner gecheckt werden.
1.1. Grundvorraussetzungen
Damit die komplette Installation reibungslos funktioniert sollte zuerst geprüft werden ob die Installationsquelle der Distribution noch aktuell und funktionierend ist, in unserem Fall wurde der Update Server von 1und1 abgestellt bzw. in einen anderen Pfad verlegt. Es wird immer wieder notwendig sein bestimmte Komponenten zu installieren bzw. zu ergänzen. Es ist weiterhin zu empfehlen einen Mirror Server der Distribution zu finden um später manuell auch Quellpakete zu downloaden (ftp.gwdg.de/pub/linux/suse/ftp.suse.com).
1.2. Clamav
Die Installation bzw. das Update vom Clamav gestaltete sich schwierig da es kein Binärpaket für die aktuelle Version gab. Mit einem Trick kann man sich aber helfen wir laden uns zuerst das Quellpaket von clamav.org ( hier hab ich bewusst keine Url eingefügt bitte immer die aktuelle Source Version benutzen). Weiterhin das letzte Quellpaket der SuSE Distribution installieren(srpm manuell mit rpm –Uvh clam*.srpm ).
- cd /usr/src/packages
- rpmbuild –bb /SPEC/clamav.spec
Hier bitte erst einmal die Ausgaben prüfen ob noch Pakete fehlen ggf. über Yast nachinstallieren. Wenn der Vorgang ohne Fehler durchläuft befindet sich die fertige 3 Pakete im Verzeichnis RPMS/x86_64
- cd /usr/src
- tar xvfz clamav-0.91.2.tar.gz
- tar cvfz packages/SOURCES/clamav-0.91.2.tar.bz2 clamav-0.91.2
Jetzt müssen noch zwei Änderungen gemacht werden zum einen in der Datei
packages/SPECS/clamav.spec
Zeile 1 ändern in
Version 0.91.2
Zeile 21 ändern in
Version: 0.91.2
packages/SOURCES/clamav-conf.patch
Zeile 45 ändern in
-LocalSocket /tmp/clamd.socket
- cd /usr/src/packages
- rpmbuild –bb /SPEC/clamav.spec
Wenn keine Pakete mehr fehlen sollten jetzt alle drei neuen Pakete fertig erstellt sein im Verzeichnis RPMS/x86_64
.
Diese können nun per
rpm –Uvh clamav-0.91.2-0.1.x86_64.rpm
rpm –Uvh clamav-db-0.91.2-0.1.x86_64.rpm
installiert werden
Notwendige Änderungen an den Konfigurationsdateien
In der /etc/clamd.conf
Logfile /var/log/clamd.log
In der /etc/freshclam.conf
UpdateLogfile /var/log/freshclam.log
chown –R vscan:vscan /var/log/clamd.log
chown –R vscan:vscan /var/log/freshclam.log
Die Dienste werden wie folgt aktiviert
insserv clamd
insserv freshclam
/etc/init.d/rcclamd start
/etc/init.d/rcfreshclam start
Logfiles checken auf Fehler
1.2.1 Spamassassin
Hier habe ich glücklicherweise auf dem SuSE Mirror ein aktuelles srpm gefunden dies Installieren und mit rpm –Uvh spam*srpm
cd /usr/src/packages
rpmbuild –bb SPEC/spamassassin.spec
cd /usr/src/packages/RPMS
rpm –Uvh spamassassin-3.1.8-9.1.x86_64.rpm perl-spamassassin-3.1.8-9.1.x86_64.rpm
Bei mir gab es das Problem das razor-agents-2.67-3.2.x86_64.rpm auch noch vorher neu kompiliert werden musst dafür gab es aber auch ein srpm von SuSE dieses kann nach dem gleichen Verfahren installiert werden.
So jetzt noch die /etc/mail/ spamassassin/local.cf anpassen
required_score 3
rewrite_header subject *****SPAM*****
report_safe 1
use_bayes 1
bayes_auto_learn 1
skip_rbl_checks 0
use_razor2 1
use_pyzor 1
ok_locales de
insserv spamd
rcspamd start
Logfiles checken auf Fehler
Tipp: Es gibt noch ein paar Zusatzmodule deren anschauen sich lohnt zb iXHash, antidrug.cf, evilnumbers.cf, 70_zmi_german.cf usw.
1.2.2. tcpwrapper
Der tcpwrapper muss vollständig selber kompiliert werden dazu folgendes Source Pakte laden
- cd /usr/src
- wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
- tar xvfz ucspi-tcp-0.88.tar.gz
- cd ucspi-tcp-0.88.tar.gz
- make
- make setup check
Hier wird es ein wenig knackig das kompilieren ist bei mir sofort fehlgeschlagen da eine Header Datei fehlte bzw falsch referenziert wurde um diesen Fehler zu beheben muss in jeder Datei(c-source) die einen errno Fehler produziert im Header folgendes nachgetragen werden
#inlcude <errno.h>
Wenn dann alles reibungslos funktioniert hat muss noch die /etc/xinetd.d/smtp_psa angepasst werden in der Zeile server_args muss vor den bestehenden String folgendes eingefügt werden
server_args= -Rt0 /usr/sbin/rblsmtpd -r bl.spamcop.net -r rhsbl.ahbl.org -r dnsbl.ahbl.org -r sbl.spamhaus.org <rest></rest>
ein
rcxinted restart
aktiviert das ganze
1.2.3. qhseff
Ripmime installieren
cd /usr/local/src
wget www.pldaniels.com/ripmime/ripmime-1.4.0.5.tar.gz
tar zxvf ripmime-1.4.0.5.tar.gz
cd ripmime-1.4.0.5
make
make install
ln -s /usr/local/bin/ripmime /usr/bin/
Qsheff installieren
cd /usr/local/src
wget www.huschi.net/download/qsheff-1.0-r4.tar.gz
tar -xzvf qsheff-1.0-r4.tar.gz
cd qsheff-1.0-r4
./configure
make
#qmail kurz anhalten:
/etc/init.d/qmail stop
#Backup der zu überschreibenenden qmail-queue:
cp -p /var/qmail/bin/qmail-queue /var/qmail/bin/qmail-queue.bak
#erster Installlationsschritt
make install
#Konfiguration anpassen:
edit /usr/local/etc/qsheff/qsheff.conf
# in der Zeile von VIRUS_PROG den Pfad anpassen:
# VIRUS_PROG = "/usr/bin/clamdscan –-quiet"
#zweiter Installlationsschritt
/usr/local/etc/qsheff/install-wrapper.sh
#Spamassassin in die qmail-queue einbinden:
rm -f /var/qmail/bin/qmail-queue
echo '#!/bin/sh' >/var/qmail/bin/qmail-queue
echo '/usr/bin/spamc | /var/qmail/bin/qmail-qsheff' >>/var/qmail/bin/qmail-queue
chmod 4755 /var/qmail/bin/qmail-queue
#qmail wieder starten:
/etc/init.d/qmail start
1.2.4. qmail-greylist
mysql -u admin -p`cat /etc/psa/.psa.shadow` mysql
# Datenbank 'qmail':
CREATE DATABASE qmail;
# User 'greylist' (ändert evtl. das Passwort):
GRANT ALL ON qmail.* TO 'greylist'@'localhost' IDENTIFIED BY 'achtung pw eintragen';
FLUSH PRIVILEGES;
# Tabelle 'relaytofrom':
USE qmail;
CREATE TABLE relaytofrom (
id bigint(20) NOT NULL auto_increment,
relay_ip varchar(16) default NULL,
mail_from varchar(255) default NULL,
rcpt_to varchar(255) default NULL,
block_expires datetime NOT NULL default '0000-00-00 00:00:00',
record_expires datetime NOT NULL default '0000-00-00 00:00:00',
blocked_count bigint(20) NOT NULL default '0',
passed_count bigint(20) NOT NULL default '0',
aborted_count bigint(20) NOT NULL default '0',
origin_type enum('MANUAL','AUTO') NOT NULL default 'MANUAL',
create_time datetime NOT NULL default '0000-00-00 00:00:00',
last_update timestamp(14) NOT NULL,
PRIMARY KEY (id),
KEY relay_ip (relay_ip),
KEY mail_from (mail_from(20)),
KEY rcpt_to (rcpt_to(20))
) TYPE=MyISAM;
quit
yast -i mysql-devel openssl-devel zlib-devel
cd /usr/src
wget www.huschi.net/download/qmail-103-greylist-psa8.tar.gz
tar xfz qmail-1*
cd qmail-1.03
echo "-lssl -lcrypto" >ssl.lib
<code>die local_scan.c</code> muss angepasst werden
#define MYSQLHOST "localhost"
#define MYSQLUSER "greylist"
#define MYSQLPASS "dein passwort"
#define MYSQLDB "qmail"
edit Makefile
#ersetzte alle Vorkommen von "/usr/lib/mysql/libmysqlclient.a"
#durch "/usr/lib64/mysql/libmysqlclient.a"
# Email-Empfang stoppen:
/etc/init.d/inetd stop
# oder:
/etc/init.d/xinetd stop
#(Qmail selbst muß nicht beendet werden.)
# installieren:
cp -p /var/qmail/bin/qmail-smtpd /var/qmail/bin/qmail-smtpd.old
cp qmail-envelope-scanner /var/qmail/bin/.
chown root.qmail /var/qmail/bin/qmail-envelope-scanner
cp -pf qmail-smtpd /var/qmail/bin/.
chown root.qmail /var/qmail/bin/qmail-smtpd
# qmail wieder starten:
/etc/init.d/inetd start
# bzw. /etc/init.d/xinetd start
Aufräum script
Es kann sein das hier noch Pakete fehlen diese können per Yast nachinstalliert werden einfach die Datei manuell starten und die Ausgaben beobachten.
<code>/etc/cron.daily/qmail-</code>greylist<code>-cleanup.pl</code>
#!/usr/bin/perl -w
use strict;
use constant DBD => 'DBI:mysql:qmail:localhost:3306';
use constant DBUSER => 'greylist';
use constant DBPASS => 'achtung dein passwort';
use DBI;
system ('cat /dev/null > /tmp/greylist_dbg.txt');
my $dbh = DBI->connect(DBD,DBUSER,DBPASS) or die "can't connect to db ", $DBI::errstr, ":$!";
$dbh->do("DELETE FROM relaytofrom WHERE record_expires < NOW() - INTERVAL 1 HOUR AND origin_type = 'AUTO'");
$dbh->do("OPTIMIZE TABLE relaytofrom");
$dbh->disconnect;
chmod +x /etc/cron.daily/qmail-greylist-cleanup.pl
![]()