$HOME

Schritt 0: Was wollen wir eigentlich machen?

In diesem Dokument will ich die Installation eines DSpam-Servers "from scratch" beschreiben.
Der Server soll hierbei einen vollwertigen Mailserver darstellen, d.h. SMTP, POP3 und IMAP4 anbieten.

Ist nicht ein vollwertiger Mailserver geplant, sondern ein Relay, dass die Mails - nach dem Scannen - an einen anderen Server weitergibt,
so ist das natuerlich auch moeglich.

Alle Pakete werden aus den Sourcetarballs erstellt, es werden keine distributionsspezifische Pakete genutzt.
Als Basis dient die Distribution Slackware, wobei ich versuchen werde,
auf Unterschiede in den Distributionen (primaer Pfade) einzugehen.

Folgende Programme werden installiert:
* ClamAV 0.88.5 (http://www.clamav.net) #
* SpamAssassin 3.1.7 (http://spamassassin.apache.org) #
* MySQL 5.0.24a (http://www.mysql.org) #
* DSpam 3.6.8 (http://dspam.nuclearelephant.com) #
* Exim 4.63 (http://www.exim.org) #
* Courier Authentication Library 0.58 (http://www.courier-mta.org/authlib/) #
* Courier-IMAP 4.1.1 (http://www.courier-mta.org/imap/ #
* Apache 2.0.59 (http://httpd.apache.org) #
* mod_auth_mysql 3.0.0 (http://sourceforge.net/projects/modauthmysql)


Andere Verweise:
Beispiel zur Verwendung von DSpam/Exim mit lokalen Benutzern: www.openmail.cc, danke an Ian Armstrong.
Schritt 1: Vorbereitung des Systems

Dem Linuxserver muessen noch folgende Benutzer bekannt gemacht werden (sofern sie noch nicht existieren):

UserGroupErklaerungHome
eximmailDer Exim User/var/spool/exim
couriermailDer Courier User/home/mail
dspammailDer DSpam User/ome/dspam
spamdmailDer SpamAssassin User/tmp
clamavmailDer ClamAV User/tmp
mysqlmysqlDer MySQL User/home/mysql
nobodynogroupDer Apache User/home/apache

Soll der Server nur als Relay dienen, ist der Benutzer courier natuerlich nicht noetig.
Schritt 2: Zwischenbemerkungen

Ich gehe davon aus, dass jeder Leser dieses Dokumentes weiss, wie man auf der Shell eine Datei herunterlaed
und entpackt. Auch gehe ich davon aus, dass der Leser neue Benutzer anlegen kann (siehe Schritt 1) und in der Lage ist,
einen Texteditor zu benutzen, um ggf. die Scripte anzupassen.
Sollte dies nicht zutreffen, so ist dieses Dokument leider ungeeignet.

Bevor die eigentliche Installations- und Konfigurationsarbeit beginnt, ein paar Bemerkungen:
Die Beispiele sollten niemals einfach so (ohne sie zu verstehen) via Copy&Paste uebernommen werden.

In den folgenden Schritten wird angenommen, dass der Benutzer die Tarballs nach /usr/src/tarballs heruntergeladen hat
und im Verzeichnis /usr/src arbeitet.
$HOME

Schritt 3: Installation des Virenscanners ClamAV

Der Virenscanner wird zuerst mit den folgenden Kommandos entpackt, erstellt und installiert:

root@box:/usr/src # tar xzf tarballs/clamav-0.88.5.tar.gz
root@box:/usr/src # cd clamav-0.88.5/
root@box:/usr/src # ./configure --prefix=/usr/local/clamav-0.88.5 --sysconfdir=/etc/clamav --with-libcurl --with-user=clamav --with-group=mail --with-dbdir=/home/clamav --disable-clamuko
root@box:/usr/src # make
root@box:/usr/src # make install

Erklaerung der Kommandos:
Ich bevorzuge es, jedes Programm, dass ich "extra" installiere, in ein eigenes Verzeichnis zu installieren,
so dass ich immer einen Ueberblick ueber die installierten Versionen/Programme habe,
indem ich einen Blick in das /usr/local/ Verzeichnis werfe.

In diesem Fall wird der Virenscanner in das Verzeichnis /usr/local/clamav-0.88.5 installiert.
Der Daemon sucht seine Konfiguration im Verzeichnis /etc/clamav und laeuft als Benutzer clamav.
Schritt 3a: Anlegen der noetigen Verzeichnisse

root@box:/usr/src # mkdir /var/log/clamav
root@box:/usr/src # mkdir /var/run/clamav
root@box:/usr/src # chown clamav.mail /var/log/clamav
root@box:/usr/src # chown clamav.mail /var/run/clamav
Schritt 3b: Editieren der Konfigurationsdateien

Die Konfigurationsdateien von ClamAV sind clamd.conf und freshclam.conf
Die Datei clamd.conf konfiguriert den eigentlichen Virenscanner und sieht bei mir aus wie folgt:

LogFile /var/log/clamav/clamd.log
LogTime
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /tmp
LocalSocket /tmp/clamd
SelfCheck 600
User clamav
ScanPE
DetectBrokenExecutables
ScanOLE2
ScanMail
ScanHTML
ScanArchive
ScanRAR

Die Datei freshclam.conf konfiguriert den Updatedienst des Virenscanners und sieht bei mir aus wie folgt:

UpdateLogFile /var/log/clamav/freshclam.log
LogVerbose
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner clamav
DNSDatabaseInfo current.cvd.clamav.net
# db.XY.clamav.net - XY entspricht der TLD: http://www.iana.org/cctld/cctld-whois.htm
DatabaseMirror db.de.clamav.net
DatabaseMirror database.clamav.net
Checks 24
NotifyClamd
Schritt 3c: Anlegen des Start/Stop-Scriptes

Bei mir liegen die Start/Stop-Scripte im Verzeichnis /etc/rc.d und beginnen alle mit rc.,
d.h. das Script traegt den Namen rc.clamav und hat den folgenden Inhalt:

#!/bin/sh

_start() {
/usr/local/clamav-0.88.5/sbin/clamd
/usr/local/clamav-0.88.5/bin/freshclam -d
}

_stop() {
if [ -r /var/run/clamav/clamav.pid ]; then
kill `cat /var/run/clamav/clamav.pid`
else
killall clamd
fi

if [ -r /var/run/clamav/freshclam.pid ]; then
kill `cat /var/run/clamav/freshclam.pid`
else
killall freshclam
fi
}

_restart() {
_stop
sleep 1
_start
}

case "$1" in
'start')
_start
;;
'stop')
_stop
;;
'restart')
_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

root@box:/usr/src # ls -all /etc/rc.d/rc.clamav
-rwxr--r-- 1 root root 540 2006-08-28 10:57 /etc/rc.d/rc.clamav
Schritt 3d: Nachsatz

Der Virenscanner schreibt seine Logdateien nach /var/log/clamav, legt die PID-Dateien in /var/run/clamav ab
und das Socket findet man unter /tmp.
Nun ist ClamAV fertig installiert und konfiguriert, der naechste Schritt ist die Installation von SpamAssassin.
$HOME

Schritt 4: Installation des SpamAssassin

Das Tool SpamAssassin wird am besten (und einfachsten) ueber cpan installiert, mit folgendem Befehl:
root@box:/usr/src # cpan -i Mail::SpamAssassin

Alternativ: Nur die noetigen Pakete per cpan installieren, SpamAssassin aus dem tarballs.
Dazu noch folgende AddIns: FuzzyOcrPlugin und iXhash.

Sind alle noetigen Pakete installiert, wird der Installationsvorgang problemlos durchlaufen.
Im wahrscheinlicheren Falle - vor allem, wenn der Server neu aufgesetzt wurde - werden folgende Pakete fehlen:

Digest::SHA1
HTML::Parser
Net::DNS
Mail::SPF::Query
IP::Country
Net::Ident
IO::Socket::INET6
IO::Socket::SSL
LWP::UserAgent
HTTP::Date
Archive::Tar
IO::Zlib

Diese Pakete muessen natuerlich installiert werden, bevor die Installation des SpamAssassin vorgenommen werden kann:
root@box:/usr/src # cpan -i Digest::SHA1 HTML::Parser Net::DNS Mail::SPF::Query IP::Country Net::Ident IO::Socket::INET6 IO::Socket::SSL LWP::UserAgent HTTP::Date Archive::Tar IO::Zlib Module::Signature

Die meisten dieser Pakete haben eigene Abhaengigkeiten, diese werden aber im Laufe des Installationsvorganges abgeprueft und
gegebenenfalls mitinstalliert.
Ist die Installation der Voraussetzungen erfolgreich gewesen, kann nun der SpamAssassin installiert werden:
root@box:/usr/src # cpan -i Mail::SpamAssassin
alternativ:
root@box:/usr/src/Mail-SpamAssassin-3.1.7 # perl Makefile.PL PREFIX=/usr/local/Mail-SpamAssassin-3.1.7 SYSCONFDIR=/etc

Die Installation dauert - je nach Geschwindigkeit des Servers lange bis sehr lange.
Schritt 4a: Anlegen der Verzeichnisse / Editieren der Konfigurationsdateien

SpamAssassin funktioniert ausreichend, so dass dieser Schritt entfallen kann.
Schritt 4b: Anlegen des Start/Stop-Scriptes

Das Script traegt den Namen rc.spamd und hat den folgenden Inhalt:

#!/bin/sh

_start() {
/usr/bin/spamd -d -i 127.0.0.1 -r /var/run/spamd.pid -u spamd -g mail -x --socketpath=/tmp/spamd
}

_stop() {
if [ -r /var/run/spamd.pid ]; then
kill `cat /var/run/spamd.pid`
else
killall spamd
fi
}

_restart() {
_stop
sleep 1
_start
}

case "$1" in
'start')
_start
;;
'stop')
_stop
;;
'restart')
_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

root@box:/usr/src # ls -all /etc/rc.d/rc.spamd
-rwxr--r-- 1 root root 414 2006-08-28 11:24 /etc/rc.d/rc.spamd
Schritt 4c: Nachsatz

Der SpamAssassin laeuft als Benutzer spamd, legt die PID-Dateien in /var/run ab und das Socket findet man unter /tmp.
Nun ist SpamAssassin fertig installiert und konfiguriert, der naechste Schritt ist die Installation der Datenbank MySQL.
$HOME

Schritt 5: Installation der Datenbank MySQL

Die Datenbank wird zuerst mit den folgenden Kommandos entpackt, erstellt und installiert:

root@box:/usr/src # tar xzf tarballs/mysql-5.0.24a.tar.gz
root@box:/usr/src # cd mysql-5.0.24a
root@box:/usr/src # ./configure --prefix=/usr/local/mysql-5.0.24a --sysconfdir=/etc/mysql --enable-assembler --with-unix-socket-path=/tmp/mysql --with-openssl --without-debug --with-mysqld-user=mysql --with-charset=latin1 --with-collation=latin1_german1_ci --without-bench --without-docs --without-man
Sollten Datenbank- und Mailserver auf verschiedenen Servern laufen, so wird fuer den Mailserver natuerlich nicht das volle Paket benoetigt,
es reichen bereits die Client-Libs:
root@box:/usr/src # ./configure --prefix=/usr/local/mysql-5.0.24a --sysconfdir=/etc/mysql --enable-assembler --with-unix-socket-path=/tmp/mysql --with-openssl --without-debug --with-mysqld-user=mysql --with-charset=latin1 --with-collation=latin1_german1_ci --without-bench --without-docs --without-man --without-server
root@box:/usr/src # make
root@box:/usr/src # make install

Schritt 5a: Anlegen der noetigen Verzeichnisse

root@box:/usr/src # mkdir /var/log/mysql
root@box:/usr/src # mkdir /var/run/mysql
root@box:/usr/src # mkdir /home/mysql
root@box:/usr/src # mkdir /etc/mysql
root@box:/usr/src # chown mysql.mysql /var/log/mysql
root@box:/usr/src # chown mysql.mysql /var/run/mysql
root@box:/usr/src # chown mysql.mysql /home/mysql

Dieser Schritt ist nicht noetig, falls nur die Client-Libs installiert wurden.

Schritt 5b: Editieren der Konfigurationsdatei

Die Konfigurationsdatei fuer die Datenbank liegt unter /etc/mysql/my.cnf und hat folgenden Inhalt:

[client]
port = 3306
socket = /tmp/mysql
[mysqld]
port = 3306
socket = /tmp/mysql
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
skip-networking
datadir = /home/mysql
basedir = /usr/local/mysql-5.0.24a
character_set_server=latin1
collation_server=latin1_german1_ci
default-character-set=latin1
default-collation=latin1_german1_ci
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout

Dieser Schritt ist nicht noetig, falls nur die Client-Libs installiert wurden.

Schritt 5c: Erstellen der Systemdatenbank

root@box:/usr/src # /usr/local/mysql-5.0.24a/bin/mysql_install_db
root@box:/usr/src # chown mysql.mysql /home/mysql -R

Danach finden sich unter /home/mysql/mysql die Systemdatenbanken der MySQL.

Dieser Schritt ist nicht noetig, falls nur die Client-Libs installiert wurden.

Schritt 5d: Anlegen des Start/Stop-Scriptes

Das Script traegt den Namen rc.mysql und hat den folgenden Inhalt:

#!/bin/sh

_start() {
/usr/local/mysql-5.0.24a/bin/mysqld_safe --pid-file=/var/run/mysql/mysql.pid &
}

_stop() {
if [ -r /var/run/mysql/mysql.pid ]; then
kill `cat /var/run/mysql/mysql.pid`
else
killall mysqld_safe
fi
}

_restart() {
_stop
sleep 1
_start
}

case "$1" in
'start')
_start
;;
'stop')
_stop
;;
'restart')
_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

root@box:/usr/src # ls -all /etc/rc.d/rc.mysql
-rwxr--r-- 1 root root 413 2006-08-28 11:43 /etc/rc.d/rc.mysql

Dieser Schritt ist nicht noetig, falls nur die Client-Libs installiert wurden.

Schritt 5e: Setzen des root-Passwortes

Um das root-Passwort fuer die MySQL Datenbank zu setzen, muss - nach dem Starten des Datenbankservers - folgender Befehl ausgefuehrt werden:
root@box:/usr/src # /usr/local/mysql-5.0.24a/bin/mysqladmin -u root password 'new-password'

Wobei man natuerlich 'new-password' durch das gewuenschte eigene Passwort ersetzen sollte.

Dieser Schritt ist nicht noetig, falls nur die Client-Libs installiert wurden.

Schritt 5f: Nachsatz

Damit andere Programme die MySQL-Bibliotheken finden, muss die Datei /etc/ld.so.conf um folgenden Eintrag erweitert werden:
/usr/local/mysql-5.0.24a/lib/mysql/
Danach die Systemkonfiguration aktualisieren:
root@box:/usr/src # ldconfig

Die Datenbank laeuft als Benutzer mysql, legt die PID-Datei in /var/run/mysql ab und das Socket findet man unter /tmp.
Nun ist die Datenbank fertig installiert und konfiguriert, der naechste Schritt ist die Installation des DSpam-Servers.
$HOME

Schritt 6: Installation des DSpam-Servers

Der DSpam-Server wird zuerst mit den folgenden Kommandos entpackt, erstellt und installiert:

root@box:/usr/src # tar xzf tarballs/dspam-3.6.8.tar.gz
root@box:/usr/src # cd dspam-3.6.8/
root@box:/usr/src # ./configure --sysconfdir=/etc/mail/dspam --prefix=/usr/local/dspam-3.6.8 --enable-daemon --enable-syslog --enable-long-usernames --enable-large-scale --enable-virtual-users --with-dspam-home=/home/dspam --with-dspam-home-owner=dspam --with-dspam-home-group=mail --with-logfile=/var/log/dspam/dspam.log --with-logdir=/var/log/dspam --with-storage-driver=mysql_drv --with-mysql-includes=/usr/local/mysql-5.0.24a/include/mysql --with-mysql-libraries=/usr/local/mysql-5.0.24a/lib/mysql --enable-preferences-extension
root@box:/usr/src # make
root@box:/usr/src # make install
Schritt 6a: Anlegen der noetigen Verzeichnisse

root@box:/usr/src # mkdir /var/run/dspam
root@box:/usr/src # chown dspam.mail /var/run/dspam
root@box:/usr/src # cp -a /usr/src/dspam-3.6.8/txt /home/dspam
root@box:/usr/src # chown dspam.mail /home/dspam -R
root@box:/usr/src # rm /home/dspam/txt/Makefile*
Schritt 6b: Editieren der Konfigurationsdatei

Die Datei dspam.conf (im Verzeichnis /etc/mail/dspam konfiguriert den DSpam-Server und sieht bei mir aus wie folgt:

Home /home/dspam
#StorageDriver /usr/local/dspam-3.6.8/lib/libmysql_drv.so
# "-oMr spam-scanned" noetig?
TrustedDeliveryAgent "/usr/local/exim-4.63/bin/exim -oMr spam-scanned"
DeliveryHost 127.0.0.1
DeliveryPort 25
OnFail error
Trust root
Trust dspam
Trust exim
TrainingMode teft
TestConditionalTraining on
Feature chained
Feature whitelist
Algorithm graham burton
PValue graham
ImprobabilityDrive on
Preference "spamAction=quarantine"
Preference "signatureLocation=message"
Preference "showFactors=on"
AllowOverride trainingMode
AllowOverride spamAction spamSubject
AllowOverride statisticalSedation
AllowOverride enableBNR
AllowOverride enableWhitelist
AllowOverride signatureLocation
AllowOverride showFactors
AllowOverride optIn optOut
AllowOverride whitelistThreshold
MySQLServer /tmp/mysql
MySQLPort
MySQLUser dspam
MySQLPass 'dspam-password'
MySQLDb dspam
MySQLCompress true
MySQLConnectionCache 10
MySQLVirtualTable dspam_virtual_uids
MySQLVirtualUIDField uid
MySQLVirtualUsernameField username
MySQLUIDInSignature on
HashRecMax 98317
HashAutoExtend on
HashMaxExtents 0
HashExtentSize 49157
HashMaxSeek 100
HashConnectionCache 10
Notifications on
PurgeSignatures 14
PurgeNeutral 90
PurgeUnused 90
PurgeHapaxes 30
PurgeHits1S 15
PurgeHits1I 15
LocalMX 127.0.0.1
SystemLog on
UserLog on
Opt out
ServerPID /var/run/dspam/dspam.pid
ServerMode dspam
ServerDomainSocketPath "/tmp/dspam"
ClientHost /tmp/dspam
ProcessorBias on

Das Passwort 'dspam-password' ist das Passwort, dass der DSpam-Daemon benutzt, um auf die Datenbank zuzugreifen.
In dieser Konfiguration schreibt der DSpam-Server die Signatur in den MailBody. Damit stattdessen der Header genutzt wird,
einfach folgenden Eintrag in der Konfiguration anpassen:
Preference "signatureLocation=message"
wird zu
Preference "signatureLocation=headers"
Schritt 6c: Anlegen der Datenbanken

root@box:/usr/src/dspam-3.6.8/src/tools.mysql_drv # /usr/local/mysql-5.0.24a/bin/mysql -u root --password='new-password'
mysql> create database dspam;
mysql> grant all on dspam.* to dspam@localhost identified by 'dspam-password';
mysql> use dspam;
mysql> source mysql_objects-4.1.sql;
mysql> source virtual_users.sql;
mysql> quit;

Anmerkungen:
'new-password' ist natuerlich das Passwort, das in Schritt 5e gesetzt wurde.
'dspam-password' ist das Passwort, dass in der Konfigurationsdatei (Schritt 6b) festgelegt wurde.
Schritt 6d: Anlegen des Start/Stop-Scriptes

Das Script traegt den Namen rc.dspam und hat den folgenden Inhalt:

#!/bin/sh

_start() {
/usr/local/dspam-3.6.8/bin/dspam --daemon &
}

_stop() {
if [ -r /var/run/dspam/dspam.pid ]; then
kill `cat /var/run/dspam/dspam.pid`
else
killall dspam
fi
}

_restart() {
_stop
sleep 1
_start
}

case "$1" in
'start')
_start
;;
'stop')
_stop
;;
'restart')
_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

root@box:/usr/src # ls -all /etc/rc.d/rc.dspam
-rwxr--r-- 1 root root 269 2006-08-28 12:13 /etc/rc.d/rc.dspam
Schritt 6e: Editieren der Crontab

root@box:/usr/src/dspam-3.6.8 # cp -a src/tools.mysql_drv/purge-4.1.sql /home/dspam/
00 2 * * * /usr/local/dspam-3.6.8/bin/dspam_logrotate -a 30 /home/dspam/system.log `find /home/dspam/data -name "*.log"`
10 2 * * * /usr/local/mysql-5.0.24a/bin/mysql -u dspam -p'dspam-password' dspam < /home/dspam/purge-4.1.sql
20 2 * * * /usr/local/mysql-5.0.24a/bin/mysql -u dspam -p'dspam-password' dspam -e 'analyze table dspam_signature_data, dspam_token_data; optimize table dspam_signature_data, dspam_token_data;

Mit diesen zwei Eintraegen werden jede Nacht um 2 Uhr am Morgen die Logs geloescht und die MySQL-Datenbank bereinigt.
Damit das funktionieren kann, muss hier natuerlich auch das DSpam-Passwort eingetragen werden.

Der erste Eintrag loescht in der History der DSpam-Benutzer alle Eintraege, die aelter sind als 30 Tage.
Damit das auch problemlos funktioniert, muss dieser Befehl als Benutzer dspam ausgefuehrt werden.
Schritt 6f: Einrichten der Benachrichtigungen

DSpam ist in der Lage bei folgenen Ereignissen den Benutzer zu benachrichtigen: FirstRun, FirstSpam und QuarantineFull.
FirstRun bedeutet, dass der Benutzer eine E-Mail bekommt, wenn das erste Mal eine E-Mail fuer ihn durch DSpam geleitet wurde.
Der Text hierzu steht in der Datei /home/dspam/txt/firstrun.txt
FirstSpam bedeutet, dass der Benutzer eine E-Mail bekommt, wenn DSpam das erste Mal eine E-Mail als Spam erkennt.
Der Text hierzu steht in der Datei /home/dspam/txt/firstspam.txt.txt
QuarantineFull bedeutet, dass der Benutzer eine E-Mail bekommt, wenn er mehr als 2MB an E-Mails in seiner Quarantaene hat.
Der Text hierzu steht in der Datei /home/dspam/txt/quarantinefull.txt

Anmerkung: Dies passiert natuerlich nur, wenn - wie in meiner Konfiguration - die Variable Notifications auf on steht.

Schritt 6g: Nachsatz

Der DSpam-Server laeuft als Benutzer dspam, legt die PID-Datei in /var/run/dspam ab und das Socket findet man unter /tmp.
Nun ist der DSpam-Server fertig installiert und konfiguriert, der naechste Schritt ist die Installation des Mailservers Exim.
$HOME

Schritt 7: Installation des Mailservers Exim

Der Mailserver wird zuerst mit den folgenden Kommandos entpackt, erstellt und installiert:

root@box:/usr/src # tar xzf tarballs/exim-4.63.tar.gz
root@box:/usr/src # cd exim-4.63/

Hier kommt die Besonderheit von Exim ins Spiel: Exim besitzt kein configure-Script sondern eine Makefile-Vorlage,
die per Hand bearbeitet werden muss.
root@box:/usr/src/exim-4.63 # cp -a src/EDITME Local/Makefile
Die Datei ist sehr ausfuehrlich und verstaendlich dokumentiert. Eine vollstaendige Analyse wuerde aber den Rahmen dieses Dokumentes sprengen.
Daher hier der Inhalt eines minimale Makefiles:

BIN_DIRECTORY=/usr/local/exim-4.63/bin
CONFIGURE_FILE=/etc/mail/exim.conf
EXIM_USER=exim
EXIM_GROUP=mail
SPOOL_DIRECTORY=/var/spool/exim
INCLUDE=-I/usr/include/db4/
DBMLIB = -ldb4
ROUTER_ACCEPT=yes
ROUTER_DNSLOOKUP=yes
ROUTER_IPLITERAL=yes
ROUTER_MANUALROUTE=yes
ROUTER_QUERYPROGRAM=yes
ROUTER_REDIRECT=yes
TRANSPORT_APPENDFILE=yes
TRANSPORT_AUTOREPLY=yes
TRANSPORT_PIPE=yes
TRANSPORT_SMTP=yes
TRANSPORT_LMTP=yes
SUPPORT_MAILDIR=yes
SUPPORT_MAILSTORE=yes
SUPPORT_MBX=yes
LOOKUP_DBM=yes
LOOKUP_LSEARCH=yes
LOOKUP_MYSQL=yes
LOOKUP_INCLUDE=-I/usr/local/mysql-5.0.24a/include/mysql
LOOKUP_LIBS=-L/usr/local/mysql-5.0.24a/lib/mysql -lmysqlclient
WITH_CONTENT_SCAN=yes
WITH_OLD_DEMIME=yes
FIXED_NEVER_USERS=root
AUTH_CRAM_MD5=yes
AUTH_PLAINTEXT=yes
HEADERS_CHARSET="ISO-8859-1"
SUPPORT_TLS=yes
TLS_LIBS=-lssl -lcrypto
LOG_FILE_PATH=/var/log/exim/%s.log
SYSLOG_LOG_PID=yes
EXICYCLOG_MAX=10
COMPRESS_COMMAND=/usr/bin/gzip
COMPRESS_SUFFIX=gz
ZCAT_COMMAND=/usr/bin/zcat
SYSTEM_ALIASES_FILE=/etc/aliases
TMPDIR="/tmp"

Erstellen und Installieren wir gehabt, mit folgenden Befehlen:
root@box:/usr/src # make
root@box:/usr/src # make install
Schritt 7a: Anlegen der noetigen Verzeichnisse und Links.

root@box:/usr/src # mkdir /var/log/exim
root@box:/usr/src # mkdir /home/mail
root@box:/usr/src # chown exim.mail /var/log/exim
root@box:/usr/src # chown courier.mail /home/mail
root@box:/usr/src # ln -s /usr/local/exim-4.63/bin/exim /usr/bin/sendmail
root@box:/usr/src # ln -s /usr/local/exim-4.63/bin/exim /usr/sbin/sendmail
root@box:/usr/src # ln -s /usr/local/exim-4.63/bin/exim /usr/sbin/mailq
root@box:/usr/src # ln -s /usr/local/exim-4.63/bin/exim /usr/sbin/runq
Schritt 7b: Editieren der Konfigurationsdatei

Achtung: Es gibt eine angepasste Version der Konfigurationen fuer den Betrieb zusammen mit einem Confixx-Frontend.
Fuer Support / Installation hierzu wenden Dich bitte an einen Dienstleister Deines Vertrauens, z.B. MAS - User Services.

Die Konfigurationsdatei von Exim ist sehr umfangreich, daher hier ein Link zu meiner Version.
Diese Version ist hochgradig auf meine Datenbankstruktur angepasst, hier gibt es das SQL-Script,
um die Datenbank/Tabellen automatisch anzulegen.
Mit der vorgegebenen Konfiguration muss die Pruefung durch DSpam explizit per User eingeschaltet werden, dafuer dient das Feld has_dspam.

Installation der Exim-Datenbank:

root@box:/usr/src # wget http://dspam.wahlfaelschung.de/exim-dspam.sql
root@box:/usr/src # /usr/local/mysql-5.0.24a/bin/mysql -u root --password='new-password'
mysql> source exim-dspam.sql;
mysql> grant select on vserver.* to exim@localhost identified by 'exim-password';
mysql> quit;

root@box:/etc/mail # wget http://dspam.wahlfaelschung.de/exim-dspam.conf
root@box:/etc/mail # mv exim-dspam.conf exim.conf

Folgende Aenderungen muessen auf jeden Fall in der Konfigurationsdatei gemacht werden (jeweils durch "### AENDERN ###" markiert):

hide mysql_servers = localhost/vserver/exim/exim-password
Hier muessen die Datenbank, der Loginname und das Passwort von Exim eingetragen werden. Die Datenbank ist 'vserver',
falls meine Datenbankstruktur benutzt wird. Der Loginname und das Passwort wurden in dem "grant"-Befehl weiter oben festgelegt.

qualify_domain = qualifiziert
Die Domain, die benutzt wird, um Adressen ohne Domain-Anteil zu vervollstaendigen. Ist noetig, damit die 'alias'-Datenbank problemlos funktioniert.

#system_filter = /etc/mail/exim.filter
Falls sich die Benutzer durch den "Sender:"-Eintrag in den E-Mails, den DSpam/Exim erzeugen, gestoert fuehlen,
kann man diesen durch einen Exim-Systemfilter entfernen. Die Datei hat folgenden Inhalt:
headers remove "Sender: <dspam@qualifiziert>"
(Die Domain muss entsprechend angepasst werden, wenn der Wert von qualify_domain geaendert wurde.

#tls_advertise_hosts = *
#tls_certificate = /etc/cert/server.pem
#tls_privatekey = /etc/cert/server.pem

Falls der Server TLS/SSL unterstuetzen soll, so muss dafuer ein Zertifikat erstellt werden. Solche Zertifikate koennen entweder selbst erstellt,
oder aber fuer viel Geld gekauft werden. Das Erstellen eines solchen Zertifikates sprengt den Rahmen dieses Dokumentes,
daher sei einfach auf die naechstgelegene Suchmaschine verwiesen.

timezone = Europe/Berlin
Nicht jeder Server steht in Europa/Deutschland, daher diesen Eintrag entsprechend der geographischen Lokalisierung anpassen.

condition = ${if match {$sender_helo_name}{\N^(mail\.mas-user-services\.de)$\N}{yes}{no}}
Die Ueberpruefung in den ACLs. Niemand ausser dem eigenen Server darf den Eigennamen (bzw. RDNS-Eintrag) im HELO/EHLO tragen,
daher werden solche Server a priori abgewiesen.
Anstatt "mail.mas-user-services.de" sollte natuerlich der RDNS-Eintrag des eigenen Servers stehen.

condition = ${if >{$spam_score_int}{120}{1}{0}}
Die Ueberpruefung auf den Rueckgabewert des SpamAssassins. Der Wert 120 entspricht einer Rueckgabe von 12.0, was bedeutet,
dass Mails mit einem Spamwert von ueber 12 Punkten noch im SMTP-Dialog abgewiesen werden.
Meiner Erfahrung nach ist sogar ein Wert von 100 (10.0 Punkten) sinnvoll, die meisten gewuenschten E-Mails kommen auf maximal 50,
also (5.0 Punkte).

{eq {$domain}{mas-user-services\.de}} \
Der DSpam-Server soll beim Retraining nur auf Mails reagieren, die an die Hauptdomain des Servers geschickt wurden.
Diese Einstellung ist Geschmackssache, soll der Server auf Mails an alle Domains reagieren, so muss diese Zeile geloescht werden.

directory = /home/mail/$local_part/Maildir
E-Mails, die angenommen werden, werden unter /home/mail im Maildirformat abgelegt. Ist dieser Pfad nicht gewuenscht,
sondern ein etwas traditionellerer, wie z.B. /var/mail, muss das Verzeichnis natuerlich angepasst werden (Schritt 7a ebenfalls).

Sollte der eben aufgesetzte Server nicht als vollwertiger Mailserver sondern nur als Relay (z.B. fuer einen Exchange-Server in Intranet) dienen,
so muessen in der Konfiguration des Mailservers Exim ein paar Aenderungen vorgenommen werden.
In diesem Fall benoetigt man natuerlich nicht den Courier-IMAP, somit koennen zum einen die Schritte 8 und 9 entfallen,
zum anderen muss in der exim.conf der Transporter mysql_local_user geaendert werden:

Vorher:
mysql_local_user:
driver = accept
condition = "${if and { \
{eq {$domain}{$qualify_domain}} \
{!eq {$received_protocol}{''}} \
{eq {$local_part}{MD_LOCAL_USER}} \
} \
{1}{0}}"
transport = mysql_local_user_transporter

Nachher:
mysql_local_user:
driver = manualroute
condition = "${if and { \
{eq {$domain}{$qualify_domain}} \
{!eq {$received_protocol}{''}} \
{eq {$local_part}{MD_LOCAL_USER}} \
} \
{1}{0}}"
transport = remote_smtp
domains = +local_domains
route_list = * 127.0.0.1 bydns
Wobei 127.0.0.1 durch die IP des Exchange-Servers zu ersetzen ist.
Schritt 7c: Anlegen des Start/Stop-Scriptes

Das Script traegt den Namen rc.exim und hat den folgenden Inhalt:

#!/bin/sh

_start() {
/usr/local/exim-4.63/bin/exim -bd -q30m
}

_stop() {
if [ -r /var/run/exim.pid ]; then
kill `cat /var/run/exim.pid`
else
killall exim
fi
}

_restart() {
_stop
sleep 1
_start
}

case "$1" in
'start')
_start
;;
'stop')
_stop
;;
'restart')
_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

root@box:/usr/src # ls -all /etc/rc.d/rc.exim
-rwxr--r-- 1 root root 354 2006-08-28 10:43 /etc/rc.d/rc.exim
Schritt 7d: Nachsatz

Der Mailserver laeuft als Benutzer exim, legt die PID-Datei in /var/run ab und schreibt seine Logs nach /var/log/exim.
Nun ist der Mailserver fertig installiert und konfiguriert, der naechste Schritt ist die Installation der Courier Authentication Library.
$HOME

Schritt 8: Installation der Courier Authentication Library

Die Library wird zuerst mit den folgenden Kommandos entpackt, erstellt und installiert:

root@box:/usr/src # tar xjf tarballs/courier-authlib-0.58.tar.bz2
root@box:/usr/src # cd courier-authlib-0.58/
root@box:/usr/src # ./configure --prefix=/usr/local/courier-authlib-0.58 --sysconfdir=/etc/mail --without-authuserdb --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysqlrc=/etc/mail/authmysqlrc --with-mysql-libs=/usr/local/mysql-5.0.24a/lib/mysql --with-mysql-includes=/usr/local/mysql-5.0.24a/include/mysql --without-authcustom --without-authpipe --with-authdaemonrc=/etc/mail/authdaemonrc --with-mailuser=courier --with-mailgroup=mail
root@box:/usr/src # make
root@box:/usr/src # make install
root@box:/usr/src # make install-migrate
root@box:/usr/src # make install-configure

Damit andere Programme die Courier Authentication Library-Bibliotheken finden, muss die Datei /etc/ld.so.conf um folgenden Eintrag erweitert werden:
/usr/local/courier-authlib-0.58/lib/courier-authlib
Danach die Systemkonfiguration aktualisieren:
root@box:/usr/src # ldconfig
Schritt 8a: Anlegen der noetigen Verzeichnisse

Nicht noetig, da wir keine speziellen Verzeichnisse benoetigen.
Schritt 8b: Editieren der Konfigurationsdateien

Die Konfigurationsdateien fuer die Courier Authentication Library sind authmysqlrc und authdaemonrc, beide sind unter /etc/mail zu finden.
Die Datei authmysqlrc konfiguriert den Zugriff auf die MySQL-Datenbank und sieht bei mir aus wie folgt:

MYSQL_SERVER localhost
MYSQL_USERNAME courier
MYSQL_PASSWORD courier-passwd
MYSQL_DATABASE vserver
MYSQL_USER_TABLE user
MYSQL_CRYPT_PWFIELD password
MYSQL_LOGIN_FIELD login
MYSQL_MAILDIR_FIELD CONCAT('/home/mail/', login, '/Maildir') AS maildir
MYSQL_UID_FIELD 24
# die UID des Benutzers "courier"
MYSQL_GID_FIELD 12
# die GID der Gruppe "mail"
MYSQL_HOME_FIELD CONCAT('/home/mail/', login) AS home
MYSQL_SOCKET /tmp/mysql
MYSQL_OPT 0

Die Datei authdaemonrc konfiguriert das Verhalten des Authdaemons und sieht bei mir aus wie folgt:

authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=5
authdaemonvar=/usr/local/courier-authlib-0.58/var/spool/authdaemon
DEBUG_LOGIN=0
DEFAULTOPTIONS=""
LOGGEROPTS=""

Nun nur noch den Datenbankzugriff fuer den Authdaemon erlauben:

root@box:/usr/src # /usr/local/mysql-5.0.24a/bin/mysql -u root --password='new-password'
mysql> grant select on vserver.* to courier@localhost identified by 'courier-password';
mysql> quit;
Schritt 8c: Anlegen des Start/Stop-Scriptes

Das Script traegt den Namen rc.authdaemond und ist ein Symlink auf die Datei authdaemond, die mitinstalliert wurde:

root@box:/usr/src # ln -s /usr/local/courier-authlib-0.58/sbin/authdaemond /etc/rc.d/rc.authdaemond
root@box:/usr/src # ls -all /etc/rc.d/rc.authdaemond
lrwxrwxrwx 1 root root 48 2006-09-06 14:56 /etc/rc.d/rc.authdaemond -> /usr/local/courier-authlib-0.58/sbin/authdaemond
Schritt 8d: Nachsatz

Der Authdaemon legt die PID-Dateien in /usr/local/courier-authlib-0.58/var/spool/authdaemon ab
und das Socket findet man unter ebenfalls dort.
Nun ist die Courier Authentication Library fertig installiert und konfiguriert.

Achtung: Der Authdaemon erwartet Passwoerter, die mit der MySQL-Funktion "encrypt" verschluesselt wurden, keine MD5/SHA1/Password-Hashes.

Der naechste Schritt ist die Installation des Courier-IMAP.
$HOME

Schritt 9: Installation des Courier IMAP

Der Server wird zuerst mit den folgenden Kommandos entpackt, erstellt und installiert:

root@box:/usr/src # tar xjf tarballs/courier-imap-4.1.1.tar.bz2
root@box:/usr/src # cd courier-imap-4.1.1/
root@box:/usr/src # export COURIERAUTHCONFIG=/usr/local/courier-authlib-0.58/bin/courierauthconfig; export CPPFLAGS=-I/usr/local/courier-authlib-0.58/include/;./configure --prefix=/usr/local/courier-imap-4.1.1 --sysconfdir=/etc/mail --without-ipv6 --with-piddir=/var/run --enable-workarounds-for-imap-client-bugs --disable-root-check
root@box:/usr/src # make
root@box:/usr/src # make install
root@box:/usr/src # make install-configure

Da die Authlib nicht im Pfad ($PATH) installiert wurde, muss ueber COURIERAUTHCONFIG explizit die Position des Programmes angegeben werden.
Analog dazu auch der Pfad zu den Include-Dateien.
Schritt 9a: Anlegen der noetigen Verzeichnisse

Nicht noetig, da wir keine speziellen Verzeichnisse benoetigen, bzw. diese bereits im Schritt 7a angelegt wurden.
Schritt 9b: Editieren der Konfigurationsdateien

Der Courier-IMAP besteht aus vier Konfigurationsdateien: imapd, imapd-ssl, pop3d und pop3d-ssl.
Die Dateien mit dem Suffix -ssl sind fuer die Konfiguration der verschluesselten Variante,
die ohne Suffix fuer die Konfiguration der normalen Dienste zustaendig.

Die Datei imapd und imapd-ssl sehen bei mir aus wie folgt:

ADDRESS=0
PORT=143
MAXDAEMONS=50
MAXPERIP=5
PIDFILE=/var/run/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
IMAP_KEYWORDS=1
IMAP_ACL=1
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/etc/mail/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/bin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=YES
MAILDIRPATH=Maildir

SSLPORT=993
SSLADDRESS=0
SSLPIDFILE=/var/run/imapd-ssl.pid
SSLLOGGEROPTS="-name=imapd-ssl"
IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=0
COURIERTLS=/usr/local/courier-imap-4.1.1/bin/couriertls
TLS_PROTOCOL=SSL3
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CERTFILE=/etc/cert/server.pem
TLS_VERIFYPEER=NONE
TLS_CACHEFILE=/usr/local/courier-imap-4.1.1/var/couriersslcache
TLS_CACHESIZE=524288
MAILDIRPATH=Maildir

Die Datei pop3d und pop3d-ssl sehen bei mir aus wie folgt:

PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=50
MAXPERIP=5
POP3AUTH=""
POP3AUTH_ORIG="PLAIN LOGIN CRAM-MD5 CRAM-SHA1 CRAM-SHA256"
POP3AUTH_TLS=""
POP3AUTH_TLS_ORIG="LOGIN PLAIN"
POP3_PROXY=0
PORT=110
ADDRESS=0
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=pop3d"
POP3DSTART=YES
MAILDIRPATH=Maildir

SSLPORT=995
SSLADDRESS=0
SSLPIDFILE=/var/run/pop3d-ssl.pid
SSLLOGGEROPTS="-name=pop3d-ssl"
POP3DSSLSTART=NO
POP3_STARTTLS=YES
POP3_TLS_REQUIRED=0
COURIERTLS=/usr/local/courier-imap-4.1.1/bin/couriertls
TLS_PROTOCOL=SSL3
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CERTFILE=/etc/cert/server.pem
TLS_VERIFYPEER=NONE
TLS_CACHEFILE=/usr/local/courier-imap-4.1.1/var/couriersslcache
TLS_CACHESIZE=524288
MAILDIRPATH=Maildir

Um die verschluesselten Dienste nutzen zu koennen, muss IMAPDSSLSTART bzw. POP3DSSLSTART auf YES stehen
und natuerlich ein entsprechendes Zertifikat vorhanden sein (siehe auch Schritt 7b)
Schritt 9c: Anlegen der Start/Stop-Scripte

Der Courier-IMAP liefert bereits Start/Stop-Scripte mit, so dass nur noch verlinkt werden muss, wie in Schritt 8c

root@box:/usr/src # ln -s /usr/local/courier-imap-4.1.1/libexec/imapd.rc /etc/rc.d/rc.imapd
root@box:/usr/src # ln -s /usr/local/courier-imap-4.1.1/libexec/imapd-ssl.rc /etc/rc.d/rc.imapd-ssl
root@box:/usr/src # ln -s /usr/local/courier-imap-4.1.1/libexec/pop3d /etc/rc.d/rc.pop3d
root@box:/usr/src # ln -s /usr/local/courier-imap-4.1.1/libexec/pop3d-ssl.rc /etc/rc.d/rc.pop3d-ssl

root@box:/usr/src # ls -all /etc/rc.d/rc.imapd
lrwxrwxrwx 1 root root 46 2006-09-06 14:56 /etc/rc.d/rc.imapd -> /usr/local/courier-imap-4.1.1/libexec/imapd.rc

Die anderen Links sollten genauso aussehen.
Schritt 9d: Nachsatz

Theoretisch sollte jetzt bereits das System lauffaehig sein, wenn auch die Administration etwas umstaendlich ist:
Der DSpam-Server kann nicht (bzw. nur ueber die E-Mails) trainiert werden und neue Benutzer muessen ueber die MySQL-Konsole eingetragen werden.

Daher geht es nun mit dem Apache Webserver weiter.
$HOME

Schritt 10: Installation des Apache Webservers

Der Webserver wird zuerst mit den folgenden Kommandos entpackt, erstellt und installiert:

root@box:/usr/src # tar xzf tarballs/httpd-2.0.59.tar.gz
root@box:/usr/src # cd httpd-2.0.59/
root@box:/usr/src # ./configure --prefix=/usr/local/httpd-2.0.59 --sysconfdir=/etc/apache --enable-modules=most --enable-mods-shared=all --enable-ssl --enable-suexec --with-suexec-caller=nobody --with-suexec-docroot=/home/ --with-suexec-uidmin=20 --with-suexec-gidmin=12 --with-suexec-logfile=/var/log/apache/suexec.log
root@box:/usr/src # make
root@box:/usr/src # make install

Je nach GID/UID des Benutzers dspam muessen die Parameter --with-suexec-uidmin und --with-suexec-gidmin angepasst werden.
Schritt 10a: Anlegen der noetigen Verzeichnisse

root@box:/usr/src # mkdir /var/log/apache
root@box:/usr/src # mkdir /home/apache
root@box:/usr/src # chown nobody.nogroup /var/log/apache
root@box:/usr/src # chown nobody.nogroup /home/apache
Schritt 10b: Editieren der Konfigurationsdatei

Mit fast 300 Zeilen ist die Konfigurationsdatei wieder sehr gross, deshalb hier die Beispieldatei,
bereits mit der Konfiguration fuer die WebUI des DSpam-Servers (siehe auch Schritt 11).

Folgende Aenderungen muessen auf jeden Fall in der Konfigurationsdatei gemacht werden (jeweils durch "### AENDERN ###" markiert):

ServerAdmin webmaster@localhost
Dies ist die E-Mail Adresse, die im Falle eines Serverfehlers dem Benutzer angezeigt wird, daher sollte dort eine brauchbare Adresse stehen.
ServerName 127.0.0.1:80
Der Name des Servers, der im Falle eines Fehlers angezeigt wird. Kann natuerlich auf 127.0.0.1 stehen bleiben,
macht aber keinen professionellen Eindruck.

ServerName 127.0.0.1
Dieser Eintrag ist wichtig, da er festlegt, auf welchen "Namen" der DSpam-Server hoeren soll.
Arbeitet der Server nur als Gateway, kann es der DNS-Eintrag (z.B. mail.firma.de) sein. Arbeitet der Server aber als vollwertiger
Mailserver im Internet, so sollte dafuer ein eigener DNS-Eintrag erstellt werden, z.B. dspam.firma.de - was auch auf Kunden Eindruck macht.

Achtung: Diese Konfiguration ist vollstaendig auf die Pfade angepasst, die in diesem Dokument benutzt werden.
Sollte von der Vorgaben abgewichen werden, muessen die Pfade natuerlich auch geaendert werden, damit es funktioniert.
Schritt 10c: Anlegen des Start/Stop-Scriptes

Das Script traegt den Namen rc.apache und hat den folgenden Inhalt:

#!/bin/sh

_start() {
/usr/local/httpd-2.0.59/bin/apachectl -k start
}

_stop() {
/usr/local/httpd-2.0.59/bin/apachectl -k stop
}

_restart() {
/usr/local/httpd-2.0.59/bin/apachectl -k restart
}

case "$1" in
'start')
_start
;;
'stop')
_stop
;;
'restart')
_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

root@box:/usr/src # ls -all /etc/rc.d/rc.apache
-rwxr--r-- 1 root root 312 2006-08-28 10:43 /etc/rc.d/rc.apache
Schritt 11: Installation und Konfiguration der WebUI des DSpam-Servers

Ausser der Konfiguration eines VirtualHosts im Apache Webserver muessen natuerlich noch einige Dateien installiert werden,
damit die WebUI funktioniert:
root@box:/usr/src # mkdir /home/apache/dspam
root@box:/usr/src # cp -a /usr/src/dspam-3.6.8/webui/htdocs/base.css /home/apache/dspam
root@box:/usr/src # cp -a /usr/src/dspam-3.6.8/webui/htdocs/dspam-logo-small.gif /home/apache/dspam
root@box:/usr/src # cp -a /usr/src/dspam-3.6.8/webui/cgi-bin/* /home/apache/dspam
root@box:/usr/src # rm /home/apache/dspam/Makefile* /home/apache/dspam/configure.pl.in
root@box:/usr/src # chown dspam.mail /home/apache/dspam -R

Damit die WebUI funktioniert, muss natuerlich noch der Zugriffsschutz (.htaccess) eingerichtet werden.
Hierfuer gibt es zwei Moeglichkeiten: Zum einen die auf .htpasswd-basierende, mit hohem Pflegeaufwand verbundene Methode.
Zum anderen die auf mod_auth_mysql-basierende Methode, bei der sich die Leute dann mit den gleichen Logindaten wie fuer den IMAP-Server anmelden.

Fuer erstere Methode gibt es im Internet genuegend Beispiele, deshalb konzentriere ich mich hier auf die zweite Vorgehensweise: mod_aut_mysql.
Die Installation und Konfiguration ist ziemlich einfach:
root@box:/usr/src # tar xzf tarballs/mod_auth_mysql-3.0.0.tar.gz
root@box:/usr/src # cd mod_auth_mysql-3.0.0/
root@box:/usr/src # /usr/local/httpd-2.0.59/bin/apxs -c -L/usr/local/mysql-5.0.24a/lib/mysql -I/usr/local/mysql-5.0.24a/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
root@box:/usr/src # /usr/local/httpd-2.0.59/bin/apxs -i mod_auth_mysql.la
root@box:/usr/src # /usr/local/mysql-5.0.24a/bin/mysql -u root --password='new-password'
mysql> grant select on vserver.* to apache@localhost identified by 'apache-password';
mysql> quit;

Danach muss nur noch das Start/Stop-Script des Webservers angepasst werden, falls meine Vorlage benutzt wird:
In der Zeile /usr/local/httpd-2.0.59/bin/apachectl -k start vor das -k ein -D AUTHMYSQL einfuegen,
so dass dort /usr/local/httpd-2.0.59/bin/apachectl -D AUTHMYSQL -k start steht.

Danach muss nur noch die Datei .htaccess im Verzeichnis /home/apache/dspam erstellt werden, mit folgendem Inhalt:
AuthType Basic
AuthName "DSpam WebUI"
require valid-user

Die WebUI ist nun an sich funktionsfaehig, aber leider noch nicht vollstaendig: die Graphiken werden wahrscheinlich noch nicht angezeigt,
da in den meisten Distributionen die dafuer noetigen Perl-Module nicht von vornherein installiert werden.
Wer auf die Graphiken nicht verzichten will, muss folgende Bibliotheken bzw. Perl-Module nachinstallieren:

Die GD Graphics Library (http://www.boutell.com/gd/),
diese wird aber normalerweise von der Distribution mitgeliefert.

GD
GD::Graph3d
GD::Graph
GD::Text
CGI

root@box:/usr/src # cpan -i GD GD::Text GD::Graph GD::Graph3d CGI

Sollte der Installationsforgang fehlschlagen, weil die Datei "libXpm.so.4" nicht gefunden werden kann,
so wurde die libgd der Distribution mit Support fuer X11 erstellt - wie z.B. unter Slackware.
Dann muss (so man nicht X11 nachinstallieren will) die libgd ebenfalls aus dem Source erstellt werden:
root@box:/usr/src/tarballs # wget http://www.boutell.com/gd/http/gd-2.0.33.tar.gz
root@box:/usr/src/tarballs # cd ..
root@box:/usr/src # tar xzf tarballs/gd-2.0.33.tar.gz
root@box:/usr/src # cd gd-2.0.33/
root@box:/usr/src # ./configure && make && make install

Und danach die Perl-Module erneut erstellen:
root@box:/usr/src # cpan -i GD GD::Text GD::Graph GD::Graph3d CGI
Dies sollte nun fehlerfrei ablaufen.
Hat man alles richtig gemacht, kann man nun im System Status die entsprechenden Graphiken sehen.
Schritt 12: Nachtrag

Auch wenn der Server nun steht und an sich voll funktionsfaehig ist, ist er doch etwas ungemuetlich zu administrieren.
Um das zu vereinfachen, gibt es demnaechst einen zweiten Teil: Installation von PHP5 (hardened), SSL, phpMyAdmin und PureFTPd.
$HOME