QMAIL-Toaster

Aus Wiki schlicker.org
Zur Navigation springen Zur Suche springen


Dieser Artikel beschreibt die Installation, Konfiguration und Inbetriebnahme eines sogenannten qmail-Toasters, einem modularem qmail-Mailsystem mit vielen Features, für hohe Ansprüche an die Sicherheit und starkem Mailvekehr.

Der Artikel basiert auf Bill's Linux Qmail Toaster von Bill Shupp und Life with qmail von Dave Sill.


Hinweis: Hier werden Bills Ausführungen als eine Art Install-Log wiederholt und um teilweise OS-Spezifische Details ergänzt. Es sollte immer parallel Bill Shupps Original Artikel angeschaut werden, um zu prüfen ob sich durch neue Versionen Dinge verändert haben.

Fragen, Fehler und Anregungen zu diesem Artikel bitte an Benutzer:Dirk

Wichtig: Qmail notes


History

Datum Von angepasst/getestet auf OS Arch Bemerkung
2006-10-19 Dirk Schlüter Fedora Core 4 Linux x86_64 Greylisting Patch
2006-05-08 Dirk Schlüter Fedora Core 4 Linux x86_64 Update auf aktuelle Versionen, x86_64 Spezialitäten
2006-03-24 Dirk Schlüter Fedora Core 4 Linux i386 1. Version

Voraussetzungen

Voraussetzungen prüfen/installieren, gcc, tool, etc. siehe auch http://www.shupp.org/toaster/#prerequisites

yum -y install gcc gcc-c++ gdbm gdbm-devel openssl openssl-devel stunnel
yum -y install krb5-devel bzip2 bzip2-devel patch expect expect-devel automake 
yum -y install autoconf make unzip bind-utils openldap-devel mysql-devel libev-devel lz4-devel patch
yum -y install spamassassin-iXhash2.noarch

Damit die Installationsskripte ungestört arbeiten können, sollte man in der Terminal-Sitzung die Aliase für einige Befehle zurück setzen:

unalias rm mv cp

Installation

DNS prüfen

DNS prüfen und sehen ob die IP-Adresse der Hauptmaildomain mit der des Servers übereinstimmt. Richtige DNS-Konfiguration ist für qmail sehr wichtig.

[root@web1 /]# host -t mx braunschweig-lions.de
braunschweig-lions.de mail is handled by 10 mail.braunschweig-lions.de.
[root@web1 /]# host -t a braunschweig-lions.de
braunschweig-lions.de has address 212.68.65.193

Vorhandenen Mail Server deinstallieren

Bereits installierten Mailserver entfernen, aber zuerst prüfen welcher der Fedora Default-Mailserver installiert ist:

# rpm -qa|grep postfix
# rpm -qa|grep exim
# rpm -qa|grep sendmail
sendmail-8.13.4-2

Den gefundenen Mailserver entsprechend deinstallieren, z.B.:

rpm -ev --nodeps sendmail

Um später bei Updates keine Problem bzgl. der Abhängigkeiten zu sendmail zu haben, empfiehlt es sich nachfolgendes Paket zu installieren, was für korrekte Abhängigkeiten sorgt.

# rpm -ivh http://qmail.jms1.net/fake-smtp-1.0-1.noarch.rpm

Download

Installationsverzeichnis anlegen und Pakete runterladen:

ACHTUNG: Immer nach den aktuellsten Downloadlinks auf http://billslinuxqmail.sourceforge.net/toaster/?page=download schauen!

umask 0022
mkdir -p /var/src/tar
cd /var/src/tar

# daemontools
wget http://qmail.ixip.net/download/daemontools-0.76.tar.gz
wget http://qmail.ixip.net/download/daemontools-0.76.errno.patch

# qmail
wget http://www.rickwidmer.com/software/netqmail-1.06.tar.gz
wget http://www.rickwidmer.com/software/toaster-scripts-0.9.2.tar.gz
wget http://www.rickwidmer.com/software/libdomainkeys-0.69.tar.gz
wget http://www.rickwidmer.com/patches/libdomainkeys-0.69.diff

# ucspi-tcp
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
wget http://www.rickwidmer.com/patches/ucspi-tcp-64bit.patch

# vpopmail
wget http://downloads.sourceforge.net/project/vpopmail/vpopmail-stable/5.4.33/vpopmail-5.4.33.tar.gz
wget http://www.rickwidmer.com/patches/qmail-toaster-0.9.2.patch.bz2
wget http://www.rickwidmer.com/patches/submission-0.9.2.patch
# If you wish to use courier imap, download this package
# Courier
wget http://www.rickwidmer.com/software/courier-imap-4.1.2.tar.bz2
wget http://www.rickwidmer.com/software/courier-authlib-0.59.1.tar.bz2
wget http://www.rickwidmer.com/patches/vpopmail_courier_cram-1.diff

# If you wish to use dovecot imap, download this package
# Dovecot
wget http://www.rickwidmer.com/software/dovecot-1.2.14.tar.gz
wget http://www.rickwidmer.com/patches/dovecot-1.2.14-conf.patch
wget -O dovecot-openssl.1.patch 'http://www.rickwidmer.com/patches/dovecot-openssl.1.patch.php?country=US&state=Idaho&city=Kimberly&orginization=Internet Marketing Specilists&name=www.example.com&email=postmaster@example.com'
wget http://www.rickwidmer.com/patches/dovecot-1.2.14.sysv

# squirrelmail
wget http://www.rickwidmer.com/software/squirrelmail-1.4.21.tar.gz
wget http://www.rickwidmer.com/software/quota_usage-1.3.1-1.2.7.tar.gz

# autorespond
wget http://www.rickwidmer.com/software/autorespond-2.0.4.tar.gz
wget http://www.rickwidmer.com/patches/autorespond-2.0.4-2.0.5.patch

# ezmlm
wget http://cr.yp.to/software/ezmlm-0.53.tar.gz
wget http://www.rickwidmer.com/software/ezmlm-idx-0.443.tar.gz

# qmailadmin
wget https://downloads.sourceforge.net/project/qmailadmin/qmailadmin-devel/qmailadmin-1.2.16.tar.gz
wget https://downloads.sourceforge.net/project/qmailadmin/qmailadmin-help/1.0.8/qmailadmin-help-1.0.8.tar.gz

# qmailmrtg
wget http://www.rickwidmer.com/software/qmailmrtg7-4.2.tar.gz
wget http://www.rickwidmer.com/patches/qmailmrtg7-4.2-cfg.patch

# ripmime
wget http://pldaniels.com/ripmime/ripmime-1.4.0.10.tar.gz
wget http://www.rickwidmer.com/patches/ripmime-1.4.0.9-permissions.patch

# simscan
wget http://www.rickwidmer.com/software/simscan-1.4.0.tar.gz
wget http://www.rickwidmer.com/patches/simscan-1.4.0-combined.4.patch
wget http://www.rickwidmer.com/software/update-simscan.c

cd ../
tar -xzf tar/netqmail-1.06.tar.gz
cd netqmail-1.06

Software Installation

daemontools

rpm -Uvh  http://repo.openfusion.net/centos7-x86_64//daemontools-0.76-9.of.el7.x86_64.rp

mkdir /service
mkdir clear
touch clear/down

cat > clear/run <<EOF
#!/bin/sh
yes '' | head -4000 | tr '\n' .

# When you want to clear the service errors, just run this:
# svc -o /service/clear
EOF

chmod +x clear/run
chmod a-w clear/down

systemctl enable daemontools
systemctl start daemontools

Prüfen ob die daemontools laufen, als Beispiel:

# ps ax|grep svs
24648 ?        Ss     0:00 /bin/sh /command/svscanboot
24650 ?        S      0:00 svscan /service
 5109 pts/0    S+     0:00 grep svs

ucspi-tcp

cd /var/src/
tar -xzf tar/ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
patch -p1 < /var/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch

# NOTE: If you are on the x86_64 platform, you need to remove the
# "-02" argument to gcc in conf-cc. See this for details
# http://marc.theaimsgroup.com/?l=qmail&m=111725518121864&w=2

make
make setup check

qmail

mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails

cd /var/src
tar -xzf tar/toaster-scripts-0.9.2.tar.gz
cd netqmail-1.06

# NOTE: RedHat/Fedora users may need to link certain include files for the TLS patch.
# Issue the command below only if make fails:
ln -s /usr/kerberos/include/com_err.h /usr/kerberos/include/krb5.h /usr/kerberos/include/profile.h /usr/include/
# as well as remove the sendmail link if it still exists:
rm /usr/sbin/sendmail

make
make setup check
# NOTE: qmail will be patched AFTER vpopmail is installed

# turn on SPF checking
echo 3 > /var/qmail/control/spfbehavior

Optional SPF abschalten, da schon mal Probleme damit aufgetaucht sind!

echo 0 > /var/qmail/control/spfbehavior

# turn on mfcheck
echo 1 > /var/qmail/control/mfcheck

# E-Mail Adressen entsprechend anpassen!
cd ~alias
echo "postmaster@braunschweig-lions.de" > .qmail-postmaster
echo "server@braunschweig-lions.de" > .qmail-mailer-daemon
echo "root@braunschweig-lions.de" > .qmail-root
chmod 644 ~alias/.qmail*

cd /var/src/netqmail-1.06

# Den vollen Hostnamen entsprechend anpassen! 

# Hostname ausgeben
[root@web1 alias]# hostname
web1.braunschweig-lions.de

./config-fast web1.braunschweig-lions.de

qmail-man-pages Pfad in man.config hinzufügen:

vi /vi /etc/man.config

...
MANPATH_MAP     /opt/sbin               /opt/man
MANPATH_MAP     /var/qmail/bin          /var/qmail/man

Qmail konfigurieren:

cd /var/src
cp toaster-scripts-0.9.2/rc /var/qmail/rc
chmod 755 /var/qmail/rc
mkdir /var/log/qmail
echo ./Maildir/ >/var/qmail/control/defaultdelivery
cp toaster-scripts-0.9.2/qmailctl /var/qmail/bin/
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

#Now create the supervise directories/scripts for the qmail services:
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
mkdir -p /var/qmail/supervise/qmail-pop3d/log
mkdir -p /var/qmail/supervise/qmail-pop3ds/log
cp /var/src/toaster-scripts-0.9.2/send.run /var/qmail/supervise/qmail-send/run
cp /var/src/toaster-scripts-0.9.2/send.log.run /var/qmail/supervise/qmail-send/log/run
cp /var/src/toaster-scripts-0.9.2/smtpd.run /var/qmail/supervise/qmail-smtpd/run
cp /var/src/toaster-scripts-0.9.2/smtpd.log.run /var/qmail/supervise/qmail-smtpd/log/run
cp /var/src/toaster-scripts-0.9.2/pop3d.run /var/qmail/supervise/qmail-pop3d/run
cp /var/src/toaster-scripts-0.9.2/pop3d.log.run /var/qmail/supervise/qmail-pop3d/log/run

# NOTE: If you are using stunnel version 4, you should use pop3ds.run.v4
# instead of pop3ds.run below.
# Type "stunnel -V" (v. 3) or "stunnel -version" (v. 4) to see what version is installed.
# You will also need to copy over stunnel.conf like so:
#
# cp /var/src/toaster-scripts-0.9.2/stunnel.conf /var/qmail/supervise/qmail-pop3ds/

cp /var/src/toaster-scripts-0.9.2/pop3ds.run /var/qmail/supervise/qmail-pop3ds/run

cp /var/src/toaster-scripts-0.9.2/pop3ds.log.run /var/qmail/supervise/qmail-pop3ds/log/run
echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
chmod 755 /var/qmail/supervise/qmail-pop3d/run
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
chmod 755 /var/qmail/supervise/qmail-pop3ds/run
chmod 755 /var/qmail/supervise/qmail-pop3ds/log/run
mkdir -p /var/log/qmail/smtpd
mkdir -p /var/log/qmail/smtpds
mkdir -p /var/log/qmail/pop3d
mkdir -p /var/log/qmail/pop3ds
chown -R qmaill /var/log/qmail


# qmail via daemontools starten
ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service

# 5 sekunden pause machen, um sicherzugehen das qmail gestartet ist und dann prüfen ob es läuft
sleep 5

[root@web1 src]# qmailctl stat
/service/qmail-send: up (pid 8592) 103 seconds
/service/qmail-send/log: up (pid 9043) 14 seconds
/service/qmail-smtpd: up (pid 8649) 96 seconds
/service/qmail-smtpd/log: up (pid 9044) 14 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0

Domainkeys installieren

cd /var/src/tar
wget https://notes.sagredo.eu/files/qmail/tar/libdomainkeys-0.69.tar.gz
wget https://notes.sagredo.eu/files/qmail/patches/libdomainkeys/libdomainkeys-openssl-1.1.patch
wget https://notes.sagredo.eu/files/qmail/patches/libdomainkeys/libdomainkeys-0.69.diff
cd ..
tar xzfp tar/libdomainkeys-0.69.tar.gz
cd libdomainkeys-0.69
patch -p1 < ../tar/libdomainkeys-openssl-1.1.patch
patch < ../tar/libdomainkeys-0.69.diff
make
cp libdomainkeys.a /usr/lib64

oder

rpm -Uvh http://repo.whitehorsetc.com/7/current/x86_64/libdomainkeys-devel-0.69-1.qt.el7.x86_64.rpm


Installing libsrs2

cd  /var/src/tar
wget http://www.libsrs2.org/srs/libsrs2-1.0.18.tar.gz
cd ..
tar xzf tar/libsrs2-1.0.18.tar.gz
cd libsrs2-1.0.18
./configure
make
make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
cd ../


prüfen

ldconfig -p|grep libsrs2
	libsrs2.so.0 (libc6,x86-64) => /usr/local/lib/libsrs2.so.0
	libsrs2.so (libc6,x86-64) => /usr/local/lib/libsrs2.so

SMTP/TLS Korrektur

Da SMTP/TLS normalerweise auf Port 465 (beim Standard Toaster auf 25) läuft, passen wir das an.

mkdir -p /var/qmail/supervise/qmail-smtpds/log
cp /var/src/toaster-scripts-0.9.2/smtpd.run /var/qmail/supervise/qmail-smtpds/run
cp /var/src/toaster-scripts-0.9.2/smtpd.log.run /var/qmail/supervise/qmail-smtpds/log/run
chmod 755 /var/qmail/supervise/qmail-smtpds/run
chmod 755 /var/qmail/supervise/qmail-smtpds/log/run

Anschließend in /var/qmail/supervise/qmail-smtpds/run die Zeile

    -u "$QMAILDUID" -g "$NOFILESGID" 0 smtps \

durch
    -u "$QMAILDUID" -g "$NOFILESGID" 0 465 \

ersetzen

In /var/qmail/supervise/qmail-smtps/log/run die Zeile

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t n20 s4999999 /var/log/qmail/smtpd

durch

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t n20 s4999999 /var/log/qmail/smtpds

und in /usr/bin/qmailctl die Zeile

svclist="qmail-send qmail-smtpd"

durch
svclist="qmail-send qmail-smtpd qmail-smtpds"

ersetzen.

Anschließend

ln -s /var/qmail/supervise/qmail-smtpds /service

ausführen.

TLS Cipher anpassen

Alte und nicht benötigter Cipher ausschalten, dazu folgende Zeile einfügen

vi /var/qmail/control/tlsserverciphers
ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM:-SSLv2:-SSLv3

Vpopmail

User anlegen

Ggf. existiert bereits ein User mit der uid 89, wenn ja entfernen

userdel postfix
groupadd -g 89 vchkpw
useradd -u 89 -g vchkpw vpopmail

cd /var/src
tar -xzf tar/vpopmail-5.4.33.tar.gz
cd vpopmail-5.4.33

# NOTE: If you are on the x86_64 platform, you need to set the
# CFLAGS compiler environment by prefacing the next command with
# "CFLAGS=-fPIC", like so: "CFLAGS=-fPIC ./configure ..."

Bill verwendet keine Option für SMTP after POP. Es macht Sinn diese zu aktivieren, um auch mit vielleicht schon vorhandenen Accounts, die anschliessend importiert werden sollen, kompatibel zu bleiben. Die letzten beiden Optionen ermöglichen dieses.

CFLAGS=-fPIC ./configure --enable-logging=v --enable-roaming-users --enable-relay-clear-minutes=15 --enable-spamassassin
make
make install-strip

# NOTE: If you are on the x86_64 platform, you need to edit
# cdb/compile to add the -fPIC argument to cc. It should look
# something like this: 'exec gcc -fPIC -02 -c ${1+"$@"}'
# After editing compile, do "make && make install-strip" again.
# see this post for more details
# http://forum.qmailrocks.org/showthread.php?p=12293

Cron-Job für POP after SMTP einrichten: Mit vi /etc/crontab folgendes in /etc/crontab einfügen:

# vpopmail: clear open-smtp
40 * * * * root /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null

weiter gehts mit vpopmail

echo '127.:allow,RELAYCLIENT=""' > ~vpopmail/etc/tcp.smtp
(cd ~vpopmail/etc ; tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp)

#  install the vpopmail start script
cp ../toaster-scripts-0.9.2/vpopmailctl /var/qmail/bin/vpopmailctl

chmod 755 /var/qmail/bin/vpopmailctl
ln -s /var/qmail/bin/vpopmailctl /usr/bin

# add qmail toaster patch now that vpopmail is installed
cd /var/src/netqmail-1.06
bunzip2 -c ../tar/qmail-toaster-0.9.2.patch.bz2 | patch -p0
make clean
make
qmailctl stop
make setup check

# NOTE: the following command needs to be run after any future
# re-installs of qmail as it will chown this directory back to qmail

chown -R vpopmail:vchkpw /var/qmail/spam

Zertifikate für SSL erzeugen

make cert
# Daten entsprechend eintragen
make tmprsadh
# Hinweis: Dieser Vorgang dauert einige Zeit.

Mit vi /etc/crontab in /etc/crontab eine Eintragung machen, damit die Keys jede Nacht aktualisiert werden. Nach der letzten Zeile muss ein Zeilenumbruch folgen:

# Added by Dirk for qmail, 2006-03-24
01 01 * * * /var/qmail/bin/update_tmprsadh > /dev/null 2>&1

qmail starten, vpopmail mit daemontools starten und überprüfen ob alles rennt:

qmailctl start

#allow daemontools to start vpopmail
ln -s /var/qmail/supervise/qmail-pop3d /var/qmail/supervise/qmail-pop3ds /service

sleep 5

vpopmailctl stat
# sieht ungefähr so aus:
> /service/qmail-pop3d: up (pid 8701) 1498 seconds
> /service/qmail-pop3d/log: up (pid 9042) 1424 seconds
> /service/qmail-pop3ds: up (pid 8756) 1488 seconds
> /service/qmail-pop3ds/log: up (pid 9041) 1425 seconds

qmailctl stat
# sieht ungefähr so aus:
> /service/qmail-send: up (pid 14282) 127 seconds
> /service/qmail-send/log: up (pid 9043) 1506 seconds
> /service/qmail-smtpd: up (pid 14285) 127 seconds
> /service/qmail-smtpd/log: up (pid 9044) 1506 seconds
> messages in queue: 0
> messages in queue but not yet preprocessed: 0

Nachträgliches ändern des Zertifikates für den Mailversand (SMTP)

Um ein Zertifikat zu ändern oder zu erneuern kann folgendes ausgeführt werden:

cd /var/qmail/control
mv servercert.pem servercert_old.pem
rm clientcert.pem

cd /var/src/netqmail-1.06-mit-greylisting
make cert

# Abfragen beantworten

Das Zertifikat ist im Anschluss sofort gültig, der Mailserver muss nicht neu gestartet werden.

Quota Support einbauen

cd /var/src/tar/vpopmail-5.4.33/vusaged
./configure
make
cp -f vusaged /home/vpopmail/bin
cp -f etc/vusaged.conf /home/vpopmail/etc

ZWISCHENDURCH: Security-Check auf Offens-Relay von externem Rechner


HINWEIS: Sollte der Server die SMTP-Verbindung sofort wieder beenden, mal in /var/log/qmail/smtpd/current schauen. Findet sich dort folgende Fehlermeldung. Aufgetreten auf FC4/x86_64:

/var/qmail/bin/qmail-smtpd: error while loading shared libraries: libc.so.6: 
failed to map segment from shared object: Cannot allocate memory

und/oder

/var/qmail/bin/qmail-smtpd: error while loading shared libraries: libkrb5support.so.0: 
failed to map segment from shared object: Cannot allocate memory

dann muss das softlimit in /var/qmail/supervise/qmail-smtpd/run erhöht werden, z.B. von 8000000 auf 80000000.



Mit telnet wird geprüft ob man den Server als offenes Relay benutzen kann. Kommen die 553-Fehlermeldungen ist alles OK.

[dirk@wizard ~]$ telnet web1.braunschweig-lions.de 25
Trying 212.68.65.193...
Connected to web1.braunschweig-lions.de (212.68.65.193).
Escape character is '^]'.
220 web1.braunschweig-lions.de ESMTP
helo dirk
250 web1.braunschweig-lions.de
mail from:dirk@schlicker.org
250 ok
rcpt to:schlueter@link-innovation.de
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.5.3 - chkuser)
quit
221 web1.braunschweig-lions.de
Connection closed by foreign host.

2. Check

[dirk@wizard ~]$ telnet web1.braunschweig-lions.de 25
Trying 212.68.65.193...
Connected to web1.braunschweig-lions.de (212.68.65.193).
Escape character is '^]'.
220 web1.braunschweig-lions.de ESMTP
helo dirk
250 web1.braunschweig-lions.de
mail from:postmaster@braunschweig-lions.de
250 ok
rcpt to:schlueter@link-innovation.de
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.5.3 - chkuser)
quit
221 web1.braunschweig-lions.de
Connection closed by foreign host.

IMAP

Courier-IMAP

Courier's Auth Library:

cd /var/src
tar -xjf tar/courier-authlib-0.59.1.tar.bz2
cd courier-authlib-0.59.1
patch -p0 < ../tar/vpopmail_courier_cram-1.diff
./configure --with-redhat
# NOTE: RedHat/Fedora users need to add "--with-redhat"

make
make install-strip
make install-configure

cp courier-authlib.sysvinit /etc/init.d/courier-authlib
chmod 755 /etc/init.d/courier-authlib
chkconfig courier-authlib on

/usr/local/etc/authlib/authdaemonrc editieren:

Change authmodulelist="..." to authmodulelist="authvchkpw"

Authlib's Authdaemon Server starten:

/etc/init.d/courier-authlib start

Courier-IMAP installieren:

cd /var/src
tar -xjf tar/courier-imap-4.1.2.tar.bz2
cd courier-imap-4.1.2
# build as vpopmail
chown -R vpopmail:vchkpw ../courier-imap-4.1.2
su vpopmail
umask 0022
# configure may take some time...
./configure --with-redhat
# NOTE: RedHat/Fedora users need to add '--with-redhat'

make
exit
make install-strip
make install-configure

cp courier-imap.sysvinit /etc/init.d/courier-imap
chmod 755 /etc/init.d/courier-imap
chkconfig courier-imap on

Konfigurieren: /usr/lib/courier-imap/etc/imapd editieren:

Change 'IMAPDSTART=NO' to 'IMAPDSTART=YES'
add " AUTH=CRAM-MD5" to IMAP_CAPABILITY to enable secure authentication (CRAM-MD5)

/usr/lib/courier-imap/etc/imapd-ssl editieren:

Change 'IMAPDSSLSTART=NO' to 'IMAPDSSLSTART=YES'

Security Wenn der Server mehrere IP-Adressen hat, IMAP nur auf der gewollten Adresse aktivieren

/usr/lib/courier-imap/etc/imapd editieren:

Change 'ADDRESS=0' to 'ADDRESS=<IPADDR>'

/usr/lib/courier-imap/etc/imapd-ssl editieren:

Change 'SSLADDRESS=0' to 'SSLADDRESS=<IPADDR>'

WICHTIG: Vor dem ersten Start die SSL-Profile editieren damit sie zum Hostnamen passen:

# optional: The first time courier-imap is started, the SSL certificate
# is first created using "localhost" as the "common name".
# If you want to change this to match your hostname, you can customize
# the CN line in /usr/lib/courier-imap/etc/imapd.cnf (and pop3d.cnf of
# you choose to use courier's pop3d) so that the common name matches
# your server name BEFORE you start the server for the first time

Start IMAP server:

/etc/init.d/courier-imap start
Nachträgliches Ändern des SSL-Zertifikates
cd /usr/lib/courier-imap/share
mv imapd.pem imapd.pem.old

Mit vi /usr/lib/courier-imap/etc/imapd.cnf die Datei /usr/lib/courier-imap/etc/imapd.cnf editieren und im Bereich [ req_dn ] die Vorgaben entsprechend ändern, z.B.:

[ req_dn ]
C=DE
ST=Niedersachsen
L=Braunschweig
O=Courier Mail Server
OU=Mail
CN=mail.braunschweig-lions.de
emailAddress=postmaster@www.braunschweig-lions.de

SSL-Zertifikat neu erstellen:

./mkimapdcert
WICHTIG: Courier-IMAP IMAP-Account Begrenzung pro IP-Adresse aufheben

Courier-IMAP begrenzt die Anzahl der IMAP-Accounts die von einer IP-Adresse gleichzeitig genutzt werden können.

Per Default steht dieser Wert auf 4 und sollte angepasst werden. Dazu mit vi /usr/lib/courier-imap/etc/imapd die Konfigurationsdatei editieren, nach MAXPERIP suchen und anpassen, z.B.:

##NAME: MAXPERIP:0
#
#  Maximum number of connections to accept from the same IP address

MAXPERIP=50

Die Datei speichern und Courier-IMAP neu starten:

/etc/init.d/courier-imap restart

Dovecot

Als Alternative zu Courier-IMAP kann man auch dovecot installiseren.

cd /var/src/tar
wget http://www.dovecot.org/releases/2.2/dovecot-2.2.29.1.tar.gz
cd /var/src
tar xzf tar/dovecot-2.2.29.1.tar.gz
cd dovecot-2.2.29.1
 
./configure --prefix=/usr/local/dovecot --with-vpopmail --with-docs --with-ssl --with-ldap --with-mysql --with-zlib --with-bzlib --with-lz4
make
make install
Konfiguration

Benutzer und Gruppe anlegen

groupadd dovecot
useradd -g dovecot dovecot
useradd -g dovecot dovenull

Benötigte Verzeichniss und dir Log-Datei anlegen

mkdir -p /var/run/dovecot
mkdir -p /var/log/dovecot
touch /var/log/dovecot/dovecot.log
chgrp vchkpw /var/log/dovecot/dovecot.log
chmod 660 /var/log/dovecot/dovecot.log

ln -s /usr/local/dovecot/sbin/dovecot /usr/sbin/dovecot
ln -s /usr/local/dovecot/bin/doveadm /usr/bin/doveadm
ln -s /usr/local/dovecot/bin/doveconf /usr/sbin/doveconf
ln -s /usr/local/dovecot/bin/dsync /usr/sbin/dsync
ln -s /usr/local/dovecot/etc/dovecot /etc/dovecot

Konfigurationsbeispiele kopieren

cd /usr/local/dovecot/etc/dovecot
cp -rp /usr/local/dovecot/share/doc/dovecot/example-config/* .

MAN-Pages für dovecot anpassen Mit vi /etc/man.config die Datei /etc/man.config öffnen und folgende Zeile entsprechend hinzufügen:

MANPATH /usr/local/dovecot/share/man
local.conf

Da in der Standard-Konfiurationsdatei dovecot.conf am Ende die Zeile !include_try local.conf steht, werden alle Anpassungen nun in der Datei local.conf gemacht. Die entsprechenden Zeilen sollten in den angegebenen Dateien im Verzeichnis conf.d auskommentiert werden.

cd /usr/local/dovecot/etc/dovecot
cat > local.conf << EOF
#--------------------------------------------------------
# dovecot.conf
#--------------------------------------------------------
protocols = imap sieve
base_dir = /var/run/dovecot

#--------------------------------------------------------
# 10.auth.conf
#--------------------------------------------------------
disable_plaintext_auth = yes
auth_mechanisms = plain login cram-md5

#--------------------------------------------------------
# 10-ssl.conf
#--------------------------------------------------------
ssl=yes
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key =  </etc/pki/dovecot/private/dovecot.pem
ssl_cipher_list = DHE-RSA-AES256-SHA:DHE-RSA-AES128 SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!PSK:!SRP:!DSS:!SSLv2:!RC4

#--------------------------------------------------------
# 10-logging.conf
#--------------------------------------------------------
log_path = /var/log/dovecot/dovecot.log
login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k"

#--------------------------------------------------------
# 10-mail.conf
#--------------------------------------------------------
mail_uid = 89
mail_gid = 89
first_valid_uid = 89
last_valid_uid = 89
first_valid_gid = 89
last_valid_gid = 89
mail_plugins = $mail_plugins quota zlib

#--------------------------------------------------------
# 10-master.conf
#--------------------------------------------------------
default_login_user = vpopmail
default_internal_user = vpopmail

service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vpopmail
    group = vchkpw
  }
}

#--------------------------------------------------------
# 15-lda.conf
#--------------------------------------------------------
postmaster_address = postmaster@afdb.de
hostname = mail.afdb.de
# the next two to auto create folders
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes

protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve quota autocreate
}

#--------------------------------------------------------
# 20-imap.conf
#--------------------------------------------------------
mail_max_userip_connections = 40
protocol imap {
  mail_plugins = $mail_plugins imap_zlib
}

#--------------------------------------------------------
# 90-plugin.conf
#--------------------------------------------------------
plugin {
  autocreate = Sent
  autocreate2 = Drafts
  autocreate3 = Junk
  autocreate4 = Trash
  autocreate5 = Spam
  autosubscripe = Sent
  autosubscripe2 = Drafts
  autosubscripe3 = Junk
  autosubscripe4 = Trash
  autosubscripe5 = Spam
  zlib_save_level = 6
  zlib_save = gz
}

#--------------------------------------------------------
# 90-quota.conf
#--------------------------------------------------------
#quota = maildir:User quota


#--------------------------------------------------------
# auth-vpopmail.conf
#--------------------------------------------------------
passdb {
  driver = vpopmail
}

userdb {
  driver = vpopmail
  args = quota_template=quota_rule=*:backend=%q
}



EOF

Anschließend postmaster_address und hostname entsprechend anpassen.

10-auth.conf

Hier wird am Ende folgendes gemacht:

#!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext

Also auth-system wird deaktiviert!


10-ssl.conf

hier die Pfade zu den Zertifikaten auskommentieren, stehen nun in local.conf

#ssl_cert = </etc/ssl/certs/dovecot.pem
#ssl_key = </etc/ssl/private/dovecot.pem
Start/Stop-Script

Das init-Skript erzeugen, in dem man den Editor vi öffnen und nachfolgende Zeilen einfügt.

vi etc/init.d/dovecot 
#!/bin/bash
#
#       /etc/rc.d/init.d/dovecot
#
# Starts the dovecot daemon
#
# chkconfig: - 65 35
# description: Dovecot Imap Server
# processname: dovecot
# config: /usr/local/dovecot/etc/dovecot/dovecot.conf
# pidfile: /var/run/dovecot/master.pid

### BEGIN INIT INFO
# Provides: dovecot
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Should-Start: $remote_fs
# Should-Stop: $remote_fs
# Default-Start: 
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: start and stop Dovecot Imap server
# Description: Dovecot is an IMAP server for Linux/UNIX-like systems,

#              written with security primarily in mind.  It also contains
#              a small POP3 server.
### END INIT INFO

# Source function library.
. /etc/init.d/functions

RETVAL=0
prog="Dovecot Imap"
exec="/usr/local/dovecot/sbin/dovecot"
config="/usr/local/dovecot/etc/dovecot/dovecot.conf"
pidfile="/var/run/dovecot/master.pid"
lockfile="/var/lock/subsys/dovecot"

start() {
        [ $UID -eq 0 ] || exit 4
        [ -x $exec ] || exit 5
        [ -f $config ] || exit 6

        echo -n $"Starting $prog: "
        daemon --pidfile $pidfile $exec $OPTIONS
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch  $lockfile
        echo
}

stop() {
        [ $UID -eq 0 ] || exit 4
        echo -n $"Stopping $prog: "
        killproc -p $pidfile $exec
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f $lockfile
        echo
}

reload() {
        [ $UID -eq 0 ] || exit 4
        echo -n $"Reloading $prog: "
        killproc -p $pidfile $exec -HUP
        RETVAL=$?
        echo
}

#
#       See how we were called.
#
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  reload)
        reload
        ;;
  force-reload|restart)
        stop
        sleep 1
        start
        RETVAL=$?
        ;;
  condrestart|try-restart)
        if [ -f $lockfile ]; then
            stop
            sleep 3
            start
        fi
        ;;
  status)
        status -p $pidfile $exec
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {condrestart|try-restart|start|stop|restart|reload|force-reload|status}"
        RETVAL=2
        [ "$1" = 'usage' ] && RETVAL=0
esac

exit $RETVAL

Anschließend macht man das Skript ausführbar und legt es in den Runleveln an

chmod +x /etc/init.d/dovecot
chkconfig dovecot on

Nun könnte man dovecot mit

service dovecot start

starten, aber da sieve noch nicht installiert ist, würde man nur Fehler sehen.

SSL-Zertifikat

Um das SSL-zertifikat für den IMAP-Server dovecot zu erzeugen, wechselt man in das Quell-Verzeichnis und passt dort die Datei dovecat-openssl.cnf entsprechend an.

cd /var/src/dovecot-2.2.13/doc
vi dovecot-openssl.cnf

Anschließend passt man den Pfad im Skript mkcert.sh entsprechend an:

vi mkcert.sh
alt: 
SSLDIR=${SSLDIR-/etc/ssl}
neu:
SSLDIR=${SSLDIR-/etc/pki/dovecot}

erzeugt die benötigten Verzeichnisse

mkdir -p /etc/pki/dovecot/certs
mkdir -p /etc/pki/dovecot/private

und führt anschließend das Skript aus:

sh mkcert.sh

Sollte man bereits im SSLDIR-Pfad Zertifikate für dovecot liegen haben, so sollte man diese vorher woanders hin kopieren oder löschen.

logrotate

Logrotate konfigurieren

cat > /etc/logrotate.d/dovecot << EOF
/var/log/dovecot/*.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate
    doveadm log reopen
  endscript
}
EOF
TEST

Um sich mal die einstellungen von Dovecot anzuschauen, ist das Tool doveconf gut geeignet.

doveconf|more

Pigeonhole Sieve

Nur für dovecot

cd /var/src/tar
wget http://pigeonhole.dovecot.org/releases/2.2/dovecot-2.2-pigeonhole-0.4.3.tar.gz
cd /var/src/
tar xzpf tar/dovecot-2.2-pigeonhole-0.4.3.tar.gz
cd dovecot-2.2-pigeonhole-0.4.3
# the program has to find the dovecot-config file in/usr/local/dovecot/lib/dovecot/
./configure --prefix=/usr/local/dovecot-2-2-pigeonhole --with-dovecot=/usr/local/dovecot/lib/dovecot/
make
make install
  1. Konfigurationen kopieren
cp /usr/local/dovecot/share/doc/dovecot/example-config/conf.d/20-managesieve.conf /etc/dovecot/conf.d/
cp /usr/local/dovecot/share/doc/dovecot/example-config/conf.d/90-sieve.conf /etc/dovecot/conf.d/

und anschließend kann man dann Dovecot endgültig starten

service dovecot start

autorespond

cd /var/src
tar -xzf tar/autorespond-2.0.4.tar.gz
cd autorespond-2.0.4
patch -p1 < ../tar/autorespond-2.0.4-2.0.5.patch
make
make install

ezmlm-idx

Ezmlm kann mit oder ohne MySQL-Unterstützung gebaut werden, man kann sich nun entscheiden. Bei der MySQL-Unterstützung werden Mailinglisten in einer MySQL-Datenbank gespeichert.

ezmlm-idx OHNE MySQL-Unterstützung

cd /var/src
tar -xzf tar/ezmlm-0.53.tar.gz
tar -xzf tar/ezmlm-idx-0.443.tar.gz
mv -f ezmlm-idx-0.443/* ezmlm-0.53/
cd ezmlm-0.53
patch -p0 < idx.patch
make

Möchte man das EZMLM z.B. deutsche Texte enthält, führt man an dieser Stelle folgenden Befehl aus:

make de
make setup

ezmlm-idx MIT MySQL-Unterstützung

Das Paket mysql-devel muss installiert sein:

yum install mysql-devel
cd /var/src
tar -xzf tar/ezmlm-0.53.tar.gz
tar -xzf tar/ezmlm-idx-0.443.tar.gz
mv -f ezmlm-idx-0.443/* ezmlm-0.53/
cd ezmlm-0.53
patch -p0 < idx.patch

Die Datei conf-sub editieren und std gegen mysql austauschen:

mysql

Choose a subscription database support. Available supports are:
* std    (Default) filesystem
* mysql  MySQL database
* pgsql  Postgres database

Die Datei sub_mysql/conf-sqlld editieren:

# Diese Zeile:
-L/usr/lib/mysql -lmysqlclient -lnsl -lm

# gegen diese tauschen:
-L/usr/lib/mysql -lmysqlclient -lz
# 64bit 
-L/usr/lib64/mysql -lmysqlclient -lz


Kompilieren und Installieren:

make

Möchte man das EZMLM z.B. deutsche Texte enthält, führt man an dieser Stelle folgenden Befehl aus:

make de
make setup

WICHTIGE Konfigurationen

POP3S / stunnel fixen

Das Supervise-Run-Script von Bill Shupp für den POP3 SSL-Dienst kommt nicht mit stunnel Versionen >4 zurecht, da sich der Aufruf von stunnel verändert hat. Dieses sollte spätestens beim ausführlichen Funktionstest auffallen. Die verwendete Version von stunnel kann wie folgt überprüft werden:

# stunnel -version
stunnel 4.08 on i386-redhat-linux-gnu PTHREAD+POLL+IPv4+LIBWRAP with OpenSSL 0.9.7f 22 Mar 2005
(...)

Wenn der POP3S-Dienst nicht funktioniert, findet man in /var/log/qmail/pop3ds/current entsprechende Fehlermeldungen:

2006-03-27 11:37:52.805674500 tcpserver: status: 1/40
2006-03-27 11:37:52.806051500 tcpserver: pid 30432 from 84.133.222.79
2006-03-27 11:37:52.806091500 tcpserver: ok 30432 0:212.68.65.193:995 :84.133.222.79::34515
2006-03-27 11:37:52.813089500 2006.03.27 11:37:52 LOG3[30432:3085924032]: -f: No such file or directory (2)
2006-03-27 11:37:52.813108500
2006-03-27 11:37:52.813122500 Syntax:
2006-03-27 11:37:52.813136500 stunnel [<filename>] | -fd <n> | -help | -version | -sockets
2006-03-27 11:37:52.813151500     <filename>  - use specified config file instead of /etc/stunnel/stunnel.conf
2006-03-27 11:37:52.813167500     -fd <n>     - read the config file from a file descriptor
2006-03-27 11:37:52.813182500     -help       - get config file help
2006-03-27 11:37:52.813252500     -version    - display version and defaults
2006-03-27 11:37:52.813267500     -sockets    - display default socket options
2006-03-27 11:37:52.813307500 tcpserver: end 30432 status 256
2006-03-27 11:37:52.813322500 tcpserver: status: 0/40

Damit der POP3S-Dienst wie gewünscht funktioniert, sind einige Anpassungen nötig.

stunnel Konfigurationsdatei anlegen

Ab Version 4 benötigt stunnel eine eigene Konfigurationsdatei. Mit vi /var/qmail/supervise/qmail-pop3ds/stunnel.conf eine Datei mit folgendem Inhalt anlegen. Der Hostname web1.braunschweig-lions.de ist dabei mit dem entsprechenden Hostnamen des Servers zu ersetzen. Siehe auch Qmail-Toaster auf Fedora Core Linux#DNS prüfen

# stunnel configuration for pop3s
# last update: 2006-03-27 Dirk Schlueter

foreground = yes
cert = /var/qmail/control/servercert.pem
exec = /var/qmail/bin/qmail-popup
execargs = /var/qmail/bin/qmail-popup web1.braunschweig-lions.de /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir

POP3S Supervise-Run-Script anpassen

Mit vi /var/qmail/supervise/qmail-pop3ds/run öffnen und folgende Änderungen vornehmen:

ORIGINAL:

#!/bin/sh

VPOPMAILUID=`id -u vpopmail`
VPOPMAILGID=`id -g vpopmail`

exec /usr/local/bin/tcpserver -l 0 -R -H -v                              \
        -u"$VPOPMAILUID" -g"$VPOPMAILGID" 0 995                        \
        /usr/sbin/stunnel -f -p /var/qmail/control/servercert.pem        \
            -l /var/qmail/bin/qmail-popup -- qmail-popup `hostname`  \
        /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

GEÄNDERTE VERSION:

#!/bin/sh

VPOPMAILUID=`id -u vpopmail`
VPOPMAILGID=`id -g vpopmail`

exec /usr/local/bin/tcpserver -l 0 -R -H -v                              \
        -u"$VPOPMAILUID" -g"$VPOPMAILGID" 0 995                        \
        /usr/sbin/stunnel /var/qmail/supervise/qmail-pop3ds/stunnel.conf 2>&1

Wie man sieht wurden die letzten drei Zeilen modifiziert, da die Konfigurations von stunnel ja nun über die neue Konfiguratiosdatei erledigt wird.

Neustart und Funktionstest

Nun muss der Dienst neu gestartet werden und dann POP3S richtig funktionieren:

# vpopmailctl restart
Stopping qmail-pop3d:
* Stopping qmail-pop3d.
Stopping qmail-pop3ds:
* Restarting qmail-pop3d.
* Restarting qmail-pop3ds.

Nun sollte das Logfile ungefähr so aussehen und die POP3S-Verbindung geklappt haben:

# tail -f /var/log/qmail/pop3ds/current | /usr/local/bin/tai64nlocal

2006-03-27 12:00:31.094113500 tcpserver: status: 1/40
2006-03-27 12:00:31.094133500 tcpserver: pid 30917 from 84.133.222.79
2006-03-27 12:00:31.094147500 tcpserver: ok 30917 0:212.68.65.193:995 :84.133.222.79::50608
2006-03-27 12:00:31.100415500 2006.03.27 12:00:31 LOG5[30917:3086091968]: stunnel 4.08 on i386-redhat-linux-gnu
PTHREAD+POLL+IPv4+LIBWRAP with OpenSSL 0.9.7f 22 Mar 2005
2006-03-27 12:00:31.110836500 2006.03.27 12:00:31 LOG5[30917:3086091968]: stunnel connected from 84.133.222.79:50608
2006-03-27 12:00:31.528218500 2006.03.27 12:00:31 LOG5[30917:3086091968]: Connection closed: 83 bytes sent to SSL, 12 bytes sent to
socket
2006-03-27 12:00:31.528240500 tcpserver: end 30917 status 0
2006-03-27 12:00:31.528254500 tcpserver: status: 0/40

Funktionstest

DNS-Konfiguration

Um einen vollständigen Test des Qmail-Toasters durchzuführen, muss eine entsprechende DNS-Konfiguration vorgenommen werden. Z.b. eine Subdomain einer vorhandenen Domain auf diesen neu eingerichteten Server zeigen lassen. Also Demonstration soll hier eine Subdomain test.braunschweig-lions.de angelegt werden. Die E-Mail Domain/Adressen haben dann das Format account@test.braunschweig-lions.de. Dieses ermöglicht es Mails im Internet zu versenden und zu empfangen.

Dazu fügt man in der entsprechenden DNS-Zone einen Subdomain-Eintrag plus MX hinzu, beim MX-Eintrag ist darauf zu achten das es ein FQDN sein muss.

(...)
; eigener MX zum testen fuer test.braunschweig-lions.de
test            IN A            212.68.65.193
                IN MX 10        www.braunschweig-lions.de.
(...)

Nach dem der BIND die Änderungen übernommen hat, sollte man die korrekte DNS-Konfiguration von einem anderen Rechner aus testen:

[dirk@wizard ~]$ dig test.braunschweig-lions.de mx

; <<>> DiG 9.3.1 <<>> test.braunschweig-lions.de mx
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61797
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 1

;; QUESTION SECTION:
;test.braunschweig-lions.de.    IN      MX

;; ANSWER SECTION:
test.braunschweig-lions.de. 86400 IN    MX      10 www.braunschweig-lions.de.

;; AUTHORITY SECTION:
braunschweig-lions.de.  86400   IN      NS      ns3.bcc.de.
braunschweig-lions.de.  86400   IN      NS      ns.braunschweig-lions.de.
braunschweig-lions.de.  86400   IN      NS      ns2.bcc.de.

;; ADDITIONAL SECTION:
www.braunschweig-lions.de. 86400 IN     A       212.68.65.193

;; Query time: 299 msec
;; SERVER: 192.168.201.1#53(192.168.201.1)
;; WHEN: Mon Mar 27 10:43:16 2006
;; MSG SIZE  rcvd: 137

Wichtig ist auch der korrekte DNS-Reverse-Lookup, da viele andere Mailserver aus Spam-Schutz-Gründen diesen Check beim Empfang einer Mail durchführen:

[dirk@wizard ~]$ dig -x 212.68.65.193

; <<>> DiG 9.3.1 <<>> -x 212.68.65.193
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11072
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 2

;; QUESTION SECTION:
;193.65.68.212.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
193.65.68.212.in-addr.arpa. 86400 IN    PTR     www.braunschweig-lions.de.

;; AUTHORITY SECTION:
65.68.212.in-addr.arpa. 86400   IN      NS      ns2.bcc.de.
65.68.212.in-addr.arpa. 86400   IN      NS      ns3.bcc.de.
65.68.212.in-addr.arpa. 86400   IN      NS      ns4.bcc.de.
65.68.212.in-addr.arpa. 86400   IN      NS      rns.bcc-ip.net.

;; ADDITIONAL SECTION:
ns2.bcc.de.             86370   IN      A       212.68.65.2
ns3.bcc.de.             86370   IN      A       212.68.88.12

;; Query time: 642 msec
;; SERVER: 192.168.201.1#53(192.168.201.1)
;; WHEN: Mon Mar 27 10:43:46 2006
;; MSG SIZE  rcvd: 201

SSL-Connection

Um die Verschlüsselung bei den einzelnen Protokollen zu testen, kann man folgende Befehle aufrufen.

POP3S

# for pop:
openssl s_client -connect localhost:995

IMAPSSL

openssl s_client -connect localhost:993

SMTP/TLS (STARTTLS)

openssl s_client -crlf -starttls smtp -connect localhost:25

oder bei korrekten Port 465

openssl s_client -crlf -starttls smtp -connect localhost:465

Fehlermeldungen

CONNECTED(00000768)
11128:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:.\ssl\s23_clnt.c:583:

Diese Fehler tritt auf, wenn die Rechte des Server-Zertifikats /var/qmail/control/servercert.pem nicht korrekt sind.

Virtuelle Mail-Domain mit vpopmail anlegen

# /home/vpopmail/bin/vadddomain test.braunschweig-lions.de
Please enter password for postmaster:
enter password again:

Nun ist die Test-Domain in vpopmail angelegt, was man auch nochmal leicht überprüfen kann:

# /home/vpopmail/bin/vdominfo test.braunschweig-lions.de
domain: test.braunschweig-lions.de
uid:    89
gid:    89
dir:    /home/vpopmail/domains/test.braunschweig-lions.de
users:  1

Test-Mailaccount anlegen

# /home/vpopmail/bin/vadduser dirk@test.braunschweig-lions.de
Please enter password for dirk@test.braunschweig-lions.de:
enter password again:

Mailaccount/Mailserver testen

Nun kann mit einem Mailprogramm die Funktion getestet werden, folgende Daten sind dabei in diesem Beispiel als Mail-Konto einzutragen:

Posteingangsserver (POP3/IMAP/PO3S/IMAPS): test.braunschweig-lions.de
Postausgangsserver (SMTP)                : test.braunschweig-lions.de

Benutzername (POP/IMAP/SMTP-AUTH)        : dirk@test.braunschweig-lions.de (Volle E-Mail Adresse)
Kennwort                                 : (wie oben festgelegt)

Folgende Core-Tests sollten durchgeführt werden:

  • E-Mail von extern an die neue Test-Adresse versenden (dirk@test.braunschweig-lions.de)
  • E-Mail von der Test-Adresse an externen Empfänger versenden, z.B. web.de, link-innovation.de etc.
  • Die Protokolle POP3, IMAP und SMTP mit und ohne SSL testen
  • Die verschiendenen Authentifizierungen (PLAIN, CRAM-MD5...)
  • SMTP after POP und SMTP mit Authentifizierung testen
  • Server erneut auf offenes Relay überprüfen
  z.B. mit http://www.abuse.net/relay.html

Eine Liste der Features die man überprüfen sollte findet sich hier:

qmail-Logfiles beobachten

Hier einige Beispiele wie die Logfiles aussehen sollten.

Logfile beim Empfang einer Mail von Extern:

# tail -f /var/log/qmail/current | /usr/local/bin/tai64nlocal

2006-03-27 07:50:05.411625500 delivery 41: success: 213.252.153.34_accepted_message./Remote_host_said:_250_ok_1143438605_qp_17747/
2006-03-27 07:50:05.411645500 status: local 0/10 remote 0/20
2006-03-27 07:50:05.411659500 end msg 24841888
2006-03-27 11:06:24.341015500 new msg 24841546
2006-03-27 11:06:24.341032500 info msg 24841546: bytes 23170 from <schlueter@link-innovation.de> qp 29734 uid 89
2006-03-27 11:06:24.354516500 starting delivery 42: msg 24841546 to local
test.braunschweig-lions.de-Dirk@test.braunschweig-lions.de
2006-03-27 11:06:24.354539500 status: local 1/10 remote 0/20
2006-03-27 11:06:24.424492500 delivery 42: success: did_0+0+1/
2006-03-27 11:06:24.424510500 status: local 0/10 remote 0/20
2006-03-27 11:06:24.424525500 end msg 24841546

Logfile beim Antworten auf die eben erhaltene Mail:

# tail -f /var/log/qmail/current | /usr/local/bin/tai64nlocal

2006-03-27 11:08:03.335850500 new msg 24841546
2006-03-27 11:08:03.335868500 info msg 24841546: bytes 775 from <dirk@test.braunschweig-lions.de> qp 29760 uid 89
2006-03-27 11:08:03.347383500 starting delivery 43: msg 24841546 to remote schlueter@link-innovation.de
2006-03-27 11:08:03.347401500 status: local 0/10 remote 1/20
2006-03-27 11:08:05.383630500 delivery 43: success: 82.165.29.69_accepted_message./Remote_host_said:_250_ok_1143450485_qp_21646/
2006-03-27 11:08:05.383649500 status: local 0/10 remote 0/20
2006-03-27 11:08:05.383664500 end msg 24841546

Den Timestamp kann man zu einem lesbaren Text umwandeln, indem man die Ausgabe durch /usr/local/bin/tai64nlocal "piped", wie oben zu sehen. In /var/log/qmail/smtpd/current kann man den SMTP-Server beobachten.:

2006-03-27 11:06:23.935394500 tcpserver: status: 1/20
2006-03-27 11:06:23.935803500 tcpserver: pid 29733 from 82.165.29.69
2006-03-27 11:06:23.936001500 tcpserver: ok 29733 0:212.68.65.193:25 :82.165.29.69::60367
2006-03-27 11:06:24.248395500 CHKUSER accepted rcpt: from <schlueter@link-innovation.de::> remote
<mail.link-innovation.de:unknown:82.165.29.69> rcpt <Dirk@test.braunschweig-lions.de> : found existing recipient
2006-03-27 11:06:24.355042500 tcpserver: end 29733 status 0
2006-03-27 11:06:24.355062500 tcpserver: status: 0/20
2006-03-27 11:08:02.845987500 tcpserver: status: 1/20
2006-03-27 11:08:02.846409500 tcpserver: pid 29759 from 84.133.222.79
2006-03-27 11:08:02.846623500 tcpserver: ok 29759 0:212.68.65.193:25 :84.133.222.79::49670
2006-03-27 11:08:03.048873500 CHKUSER relaying rcpt: from <dirk@test.braunschweig-lions.de::> remote
<wizard.home.all:unknown:84.133.222.79> rcpt <schlueter@link-innovation.de> : client allowed to relay
2006-03-27 11:08:03.580541500 tcpserver: end 29759 status 0
2006-03-27 11:08:03.580559500 tcpserver: status: 0/20

So ungefähr wie oben gezeigt sehen die Log-Einträge aus, wenn alles korrekt eingerichtet wurde. Man sollte mit und ohne Mail-Anhänge testen und kann dabei folgende Logfiles ansehen:

  • /var/log/qmail/*
  • /var/log/maillog

Optionales

Spam- und Virenfilter mit SpamAssassin und ClamAV

ACHTUNG: Zur Zeit gibt es unterschiede in den ClamAV-Paketen bei Fedora Core 4 i386 und x86_64. Zur Zeit (2006-03-27) sind daher unterschiedliche Schritte bei der Installation/Konfiguration nötig. Daher bitte die Architektur beachten. Welche Architektur Installiert ist, kann man mit arch abfragen. cat /etc/issue gibt Informationen zum Betriebssystem aus.

In der heutigen Zeit macht es Sinn einen Mailserver mit Software zur Spam- und Virenabwehr auszurüsten. Die qmail-Quellen von Bill Shupp enthalten bereits den dazu nötigen QMAILQUEUE-Patch, der es erlaubt innerhalb der Mail-Queue einzugreifen.

Siehe dazu auch:

Installation der nötigen RPM-Pakete

i386

yum install clamav clamd clamav-db spamassassin perl-suidperl pcre-devel pcre

X86_64 (Hinweis in der Einleitung beachten)

yum install spamassassin clamav clamd clamav-db  perl-suidperl pcre pcre-devel

SpamAssassin

Starten und für den Systemstart konfigurieren:

/etc/init.d/spamassassin start
chkconfig spamassassin on

PLUGINS

RelayCountry

SpamAssassin bringt ein Plugin namens RelayCountry mit, mit welchem es möglich wird, die Länder der einzelnen SMTP Relays anhand der GeoIP Information zu bestimmen. Dies dient zum einen der Bayes-Datenbank. Sie bekommt also zusätzliche Informationen und wird künftig selbständig lernen, aus welchen Ländern viel Spam kommt.

yum install geoipupdate-cron geoipupdate-cron6 geoipupdate php-pecl-geoip GeoIP-GeoLite-data-extra GeoIP-GeoLite-data

Danach sollten unter folgende Verzeichnis die GeoIP-DBs enthalten sein

cd /usr/share/GeoIP/
ls -l
insgesamt 49004
lrwxrwxrwx 1 root root       16  5. Feb 09:00 GeoIPASNum.dat -> GeoLiteASNum.dat
-rw-r--r-- 1 root root  5042249 17. Jan 13:24 GeoIPASNumv6.dat
lrwxrwxrwx 1 root root       15  5. Feb 09:00 GeoIPCity.dat -> GeoLiteCity.dat
lrwxrwxrwx 1 root root       17  5. Feb 09:00 GeoIPCityv6.dat -> GeoLiteCityv6.dat
lrwxrwxrwx 1 root root       18 15. Mai 2015  GeoIP.dat -> GeoLiteCountry.dat
-rw-r--r-- 1 root root  1931941 17. Jan 13:23 GeoIPv6.dat
-rw-r--r-- 1 root root  4397606 16. Apr 12:05 GeoLiteASNum.dat
lrwxrwxrwx 1 root root       16  5. Feb 09:00 GeoLiteASNumv6.dat -> GeoIPASNumv6.dat
-rw-r--r-- 1 root root 19061442 16. Apr 12:05 GeoLiteCity.dat
-rw-r--r-- 1 root root 18649442 17. Jan 13:26 GeoLiteCityv6.dat
-rw-r--r-- 1 root root  1082230 16. Apr 12:05 GeoLiteCountry.dat

Anschließend fügt man folgende Zeile in die Datei /etc/mail/spamassassin/init.pre ein:

loadplugin Mail::SpamAssassin::Plugin::RelayCountry

und legt unter */etc/mail/spamassassin/ eine Konfigurationsdatei namens RelayCountry.cf mit folgenden Inhalt an:

ifplugin Mail::SpamAssassin::Plugin::RelayCountry
add_header all Relay-Country _RELAYCOUNTRY_
header RELAYCOUNTRY_BAD X-Relay-Countries =~ /(CN|RU|UA|RO|VN)/
describe RELAYCOUNTRY_BAD Relayed through spammy country at some point
score RELAYCOUNTRY_BAD 2.0
 
header RELAYCOUNTRY_GOOD X-Relay-Countries =~ /^(DE|AT|CH)/
describe RELAYCOUNTRY_GOOD First untrusted GW is DE, AT or CH
score RELAYCOUNTRY_GOOD -0.5
endif # Mail::SpamAssassin::Plugin::RelayCountry

Anschließend führt man folgende Befehle aus:

sa-update
service spamassassin restart
eXtremSHOk

Ein weiteres gutes SpamAssassin Plugin ist eXtremeSHOK, welches die „From“ und „Reply-To“ Header vergleicht. Gibt es dort Unterschiede, bekommt die Mail direkt ein paar Punkte. Je nachdem, ob sich auch die Domain unterscheidet, sind es zwei bzw. direkt fünf Punkte.

cd /usr/local/src
wget https://github.com/extremeshok/spamassassin-extremeshok_fromreplyto/archive/1.5.tar.gz
tar -zxvf 1.5.tar.gz
mkdir /etc/mail/spamassassin/plugins/
cp spamassassin-extremeshok_fromreplyto-1.5/plugins/* /etc/mail/spamassassin/plugins/
cp spamassassin-extremeshok_fromreplyto-1.5/01_extremeshok_fromreplyto.cf /etc/mail/spamassassin


https://www.syn-flut.de/spamassassin-erkennungsrate-deutlich-verbessern

Probleme

Häufig hilft es, bevor man lange nach der Fehlerursache im Qmail-Scanner zu suchen, einfach zuerst Spamassassin upzudaten.

sa-update
/etc/init.d/spamassassin restart

Meisten tritt so ein Problem auf, wenn eine neue Version vom Spamassassin oder eine neue Version von CentOS vorliegt

trainieren

Das Programm verwendet eine integrierte Bayes-Datenbank, um Textphrasen zu klassifizieren und zu bewerten. Damit das Ganze funktioniert, muss diese Datenbank zunächst trainiert werden. Für das „Training“ sind eine Menge Mails notwendig. Um genug Spam Mails zu bekommen, habe ich das aktuellste Monatsarchiv von http://untroubled.org/spam/ verwendet.

cd /usr/local/src/
wget http://untroubled.org/spam/2017-04.7z
7za x 2017-04.7z
sa-learn --dbpath /home/qscand/.spamassassin/ --progress --spam /usr/local/src/2017/04
sa-learn --sync

ClamAV konfigurieren

Der Benutzer/die Gruppe qscand müssen bereits angelegt sein, siehe auch Qmail-Scanner Installation.

groupadd qscand
useradd -c "Qmail-Scanner Account" -g qscand -d /home/qscand -s /bin/false qscand

Mit vi /etc/group editieren und den Benutzer clamav in die Benutzer-Gruppe qscand aufnehmen. Beispiel:

(...)
qscand:x:510:clamav

Den clamd-Benutzer einstellen. Mit vi /etc/clamd.conf die Konfigurationsdatei öffen und folgende Änderung vornehmen:

# Run as a selected user (clamd must be started by root).
# Default: disabled
#User clamav
User qscand

Berechtigungen setzen, clamd starten und für den Systemstart konfigurieren:

chown -R qscand /var/run/clamav
chown -R qscand /var/log/clamav
chown -R qscand /var/clamav/
/etc/init.d/clamd start
chkconfig clamd on

Prüfen ob clamd wirklich als Benutzer qscand gestartet wurde, das vermeidet spätere Probleme:

ps waux|grep clamd
qscand    1689  0.0  1.0  14248 10344 ?        Ss   14:24   0:00 clamd
root      1703  0.0  0.0   3784   768 pts/1    S+   14:25   0:00 grep clamd

Freshclam

Mit freshclam werden die Virensignaturen aktualisiert.

Mit vi /etc/freshclam.conf die Konfigurationsdatei öffen und folgende Änderung vornehmen:

# Comment or remove the line below.
Example
#Example
....
# Uncomment the following line and replace XY with your country
# code. See http://www.iana.org/cctld/cctld-whois.htm for the full list.
# Default: There is no default, which results in an error when running freshclam
#DatabaseMirror db.XY.clamav.net
DatabaseMirror db.DE.clamav.net

# Send the RELOAD command to clamd.
# Default: disabled
#NotifyClamd
NotifyClamd

# By default when started freshclam drops privileges and switches to the
# "clamav" user. This directive allows you to change the database owner.
# Default: clamav (may depend on installation options)
#DatabaseOwner clamav
DatabaseOwner qscand

und dann einmal die Datenbank manuell aktualisieren.

# freshclam
ClamAV update process started at Mon Mar 27 14:26:28 2006
main.cvd is up to date (version: 36, sigs: 44686, f-level: 7, builder: tkojm)
daily.cvd is up to date (version: 1357, sigs: 2495, f-level: 7, builder: sven)

Clamav updaten

Nach einem Update von Clamav sollte man überprüfen, ob der Benutzer noch qscand auf der Datei /usr/sbin/clamd.qscand ist, ansonsten den Benutzer auf qscand setzten (s.o.). Gleiches gilt für die Verzeichnisse /var/run/clamav und /var/log/clamd.qscand.

chown qscand /usr/sbin/clamd*
chown qscand /var/clam*
chown qscand /var/run/clam*
chown -R qscand /var/log/clamav/
chown -R qscand /var/lib/clamav/

/etc/init.d/clamd restart
freshclam -v

WICHTIG:

Anscheinend hat sich ab Version 0.9 die Konfigurationsdatei geändert. Jetzt muss hinter jeden Parameter immer ein yes oder ein no folgen.

Beispiel:

vor Version 0.9

ScanMail

ab Version 0.9

ScanMail yes

Ansonsten startet der Clamav-Daemon nicht.

WICHTIG: Logrotate für ClamAV auf den qscand-User anpassen

Wenn Logrotate die Logfiles in /var/log/clamav rotiert, hat der User "qscand", unter dem ClamAV läuft, keine Berechtigung mehr. Clamd startet nicht korrekt und freshclam kann kein Update mehr einspielen.

Für die Anpassung folgende Änderungen vornehmen:

Mit vi /etc/logrotate.d/clamav die Konfigurationsdatei öffnen und die Zeile create entsprechend anpassen:

/var/log/clamav/clamd.log {
    missingok
    notifempty
    create 664 qscand clamav
    postrotate
        killall -HUP clamd 2>/dev/null || :
    endscript
}


Mit vi /etc/logrotate.d/freshclam die Konfigurationsdatei öffnen und die Zeile create entsprechend anpassen:

/var/log/clamav/freshclam.log {
    missingok
    notifempty
    create 664 qscand clamav
}

WICHTIG: Berechtigungen anpassen, auch nach jedem ClamAV Update nötig!

chown -R qscand /var/clamav/ /var/log/clamav/ /var/run/clamav/
chmod -R g+w /var/clamav/ /var/log/clamav/ /var/run/clamav/

ClamAV Neustarten und mit freshclam testen ob ein Update klappt.

service clamd restart
freshclam

In der Datei /var/spool/qscan/qmail-queue.log kann zudem beim Eingang einer Mail überprüft wurden, ob ClamAV korrekt die Anhänge überprüft. Dieses sollte dann so aussehen, wenn eine Mail mit Anhang eingeht:

Wed, 03 Sep 2008 09:53:36 CEST:22725: clamdscan: finished scan in 0.033611 secs

Qmail-Scanner (Salvatore Toribio Patch Version) installieren

User anlegen, falls noch nicht vorhanden:

groupadd qscand
useradd -c "Qmail-Scanner Account" -g qscand -d /home/qscand -s /bin/false qscand

Abhängigkeit: maildrop installieren

Der Qmail-Scanner benötigt reformime aus dem maildrop Paket.

Hier immer nach der aktuellsten Version von maildrop schauen und diese benutzen. Entsprechend den wget-Befehl anpassen!

cd /var/src/
mkdir maildrop
cd maildrop/

Immer nach aktuellster Version schauen (siehe oben)

wget http://downloads.sourceforge.net/project/courier/maildrop/2.7.1/maildrop-2.7.1.tar.bz2
tar xjf maildrop-2.7.1.tar.bz2
cd maildrop-2.7.1/

./configure
make
make install-strip
make install-man

Qmail-Scanner konfigurieren und installieren

Hinweis: Auch beim Qmail-Scanner immer nach der aktuellsten Version schauen!

cd /var/src/
mkdir qmail-scanner
cd qmail-scanner
wget http://toribio.apollinare.org/qmail-scanner/download/q-s-2.11st-20130319.tgz 
tar xvzpf q-s-2.11st-20130319.tgz
cd qmail-scanner-2.11st

Nun muss der Qmail-Scanner konfiguriert werden. Folgende Optionen haben sich bewährt.

Die Optionen:

  • --domain braunschweig-lions.de
  • --admin-fromname "Braunschweig Lions Postmaster"
  • --local-domains braunschweig-lions.de

müssen entsprechend der Installation angepasst werden.

./configure --qs-user qscand --qs-group qscand --spooldir /var/spool/qscan --qmaildir /var/qmail --bindir /var/qmail/bin
--qmail-queue-binary /var/qmail/bin/qmail-queue  --admin alert --domain mailx.link-innovation.com --admin-fromname "Link Innovation 
Postmaster" --notify sender,nmlvadm,precips --local-domains mailx.link-innovation.com --silent-viruses auto --virus-to-delete 1 
--skip-text-msgs 1 --lang de_DE --debug 0 --minidebug 1 --add-dscr-hdrs 0 --dscr-hdrs-text "X-Qmail-Scanner" --archive 0  
--settings-per-domain 1 --unzip 0 --max-zip-size 1000000000 --max-unpacked-files 10000 --redundant 1 --log-details syslog --log-crypto 0 
--fix-mime 2  --ignore-eol-check 1 --sa-subject "SPAM ***" --sa-delta 0.5 --sa-alt 1 --sa-debug 1 --sa-report 0 --sa-quarantine 0 
--sa-delete 0 --sa-reject 0 --scanners "auto" --install 1

HINWEIS: Wegen der hier vorhandenen Zeilenumbrüche ist ein direktes Copy & Paste nicht möglich, sondern es muss Zeile für Zeile in das Terminal eingefügt werden.

oder man benutzt folgendes Skript:

#!/bin/sh
./configure     --qs-user qscand \
                --qs-group qscand \
                --spooldir /var/spool/qscan \
                --qmaildir /var/qmail \
                --bindir /var/qmail/bin \
                --qmail-queue-binary /var/qmail/bin/qmail-queue  \
                --admin alert \
                --domain braunschweig-lions.de \
                --admin-fromname "Braunschweig Lions Postmaster" \
                --notify sender,nmlvadm,precips \
                --local-domains mailx.braunschweig-lions.de \
                --silent-viruses auto \
                --virus-to-delete 1 \
                --skip-text-msgs 1 \
                --lang de_DE \
                --debug 0 \
                --minidebug 1 \
                --add-dscr-hdrs 0 \
                --dscr-hdrs-text "X-Qmail-Scanner" \
                --archive 0 \
                --settings-per-domain 1 \
                --unzip 0 \
                --max-zip-size 1000000000 \
                --max-unpacked-files 10000 \
                --redundant 1 \
                --log-details syslog \
                --log-crypto 0 \
                --fix-mime 2  \
                --ignore-eol-check 1 \
                --sa-subject "SPAM ***" \
                --sa-delta 0.5 \
                --sa-alt 1 \
                --sa-debug 1 \
                --sa-report 0 \
                --sa-quarantine 0 \
                --sa-delete 0 \
                --sa-reject 0 \
                --scanners "auto" \
                --install 1

Nun geht es mit der interaktiven Konfiguration des configure-Scripts weiter.

  • 1. Schritt: Mit [RETURN] bestätigen
  • 2. Schritt: Mit [y] und [RETURN] bestätigen


  • 3. Schritt: Mit [y] und [RETURN] bestätigen
  • 4. Schritt: Das anlegen der Dateien mit [RETURN] bestätigen
  • 5. Schritt: Das Routieren der Logfiles einstellen
# cp contrib/logrotate.qmail-scanner /etc/logrotate.d/qmailscanner

Links:

Einbinden des Qmail-Scanner in die Mail-Queue von qmail

Mit vi /var/qmail/supervise/qmail-smtpd/run das smtp-Runscript bearbeiten und nach #!/bin/sh die folgenden Zeilen einfügen:

QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
export QMAILQUEUE

Nun muss noch das softlimit deutlich erhöht werden. Dazu mit vi /var/qmail/supervise/qmail-smtpd/run das Supervise-Run-Script bearbeiten und den Wert von softlimit -m {Wert} erhöhen. Z.B. auf softlimit -m 80000000

Jetzt qmail neu starten:

# qmailctl restart

Testen

Nun das Senden und Empfangen von Mail ausgiebig testen und dabei aus Ausgabe in /var/spool/qmailscan/qmail-queue.log und /var/log/qmail/smtpd/current beobachten:

# tail -f /var/spool/qscan/qmail-queue.log /var/log/qmail/smtpd/current

Ein- und ausgehende Mails tragen nun im Header eine entsprechende Information, z.B.:

Received: from 85.214.36.143 by web1.braunschweig-lions.de (envelope-from <dirk@example.com>, uid 89) with qmail-scanner-1.25st
  (clamdscan: 0.88/1357. spamassassin: 3.0.4. perlscan: 1.25st.   Clear:RC:0(85.214.36.143):SA:0(0.0/5.0):.  Processed in 4.775654 secs);
 27 Mar 2006 13:10:27 -0000
X-Spam-Status: No, hits=0.0 required=5.0

Es werden ein- und ausgehende Mails überprüft. Unser System sollte also auch das Versenden eines Virus verhindern. Das kann man leicht testen, indem man von einem Mail-Account des Systems den EICAR-TestVirus eicar.com als Anhang einer Mail angibt.

Download: http://www.eicar.org/anti_virus_test_file.htm

Der Qmail-Toaster sollte den Versuch sofort mit einer entsprechenden Fehler-Mail quittieren, die erklärt das der Versand abgelehnt wurde. In /var/spool/qmailscan/qmail-queue.log findet man einen Eintrag dazu:

Mon, 27 Mar 2006 15:15:26 CEST:1548: +++ starting debugging for process 1548 (ppid=1546) by uid=89
Mon, 27 Mar 2006 15:15:26 CEST:1548: w_c: elapsed time from start 0.007668 secs
Mon, 27 Mar 2006 15:15:26 CEST:1548: return-path='dirk@test.braunschweig-lions.de', recips='Dirk@example.com'
Mon, 27 Mar 2006 15:15:26 CEST:1548: from='Dirk =?ISO-8859-1?Q?Schl=FCter?= "(TEST)" <dirk@test.braunschweig-lions.de>', subj='TEst
 Virus', via SMTP from 84.133.206.49
Mon, 27 Mar 2006 15:15:26 CEST:1548: clamdscan: there be a virus! (Eicar-Test-Signature)
Mon, 27 Mar 2006 15:15:26 CEST:1548: clamdscan: finished scan in 0.017235 secs
Mon, 27 Mar 2006 15:15:26 CEST:1548: ini_sc: finished scan of "/var/spool/qmailscan/tmp/web1.braunschweig-lions.de11434653267221548"...
Mon, 27 Mar 2006 15:15:26 CEST:1548: ------ Process 1548 finished. Total of 0.13309 secs

Der SpamAssassin kann auch leicht getestet werden. Einfach in einer Mail von EXTERN an einen Qmail-Toaster Account das Schlüsselwort VIAGRA verwerden. Im Logfile sollte es dafür Punkte geben, z.B.:

Mon, 27 Mar 2006 15:19:55 CEST:1617: from='Dirk =?ISO-8859-1?Q?Schl=FCter?= <dirk@example.com>', subj='Test', via SMTP from 85.214.36.143
Mon, 27 Mar 2006 15:19:55 CEST:1617: This is a PLAIN text message, skip virus scanners - but not SA
Mon, 27 Mar 2006 15:19:56 CEST:1617: SA: REPORT hits = 0.8/5.0
  1.5 DRUG_ED_CAPS           BODY: Erwähnt Medikament gegen Erektionsstörung
  0.0 DRUGS_ERECTILE         Erwähnt ein Medikament gegen Erektionsstörungen
 -0.8 AWL                    AWL: From: address is in the auto white-list
Mon, 27 Mar 2006 15:19:56 CEST:1617: SA: finished scan in 0.338719 secs - hits=0.8/5.0
Mon, 27 Mar 2006 15:19:56 CEST:1617: p_s: finished scan in 0.042892 secs
Mon, 27 Mar 2006 15:19:56 CEST:1617: ini_sc: finished scan of "/var/spool/qmailscan/tmp/web1.braunschweig-lions.de11434655957221617"...
Mon, 27 Mar 2006 15:19:56 CEST:1617: ------ Process 1617 finished. Total of 0.474062 secs

Diese Punkte findet man im Mail-Header der empfangenen Mail wieder:

X-Spam-Status: No, hits=0.8 required=5.0

Bei über 5.0 Punkten (siehe Qmail-Scanner Konfiguration) wird der X-Spam-Status auf Yes gesetzt und der Betreff einer Mail mit SPAM *** gekennzeichnet. Anhand eines dieser Merkmale, vorzugsweise des Mail-Headers X-Spam-Status, kann der Benutzer erkannten Spam mit seinem Mailprogramm filtern.

SpamAssassin Bayes-Datenbank

SpamAssassin lernt selbst und kann über eine Bayes-Datenbank trainiert werden. Die genaue Funktion kann im SpamAssassin Manual nachgelesen werden http://spamassassin.apache.org/.

Mit dem Bayes-Filter kann die Wirksamkeit der Spam-Erkennung erhöht werden, wenn sie entsprechend trainiert wird.

Hier wird nur kurz erklärt wie man den Toaster konfiguriert, damit die Lernfunktion aktiviert ist und wie man von einer anderen Installation eine gut trainierte Bayes-Datenbank einspielt.

Auf anderem Qmail-Toaster wo Spam gelernt wird das Paket erstellen:

# cd /home/
# tar cfpvz home-qscand-20060327.tar.gz qscand/

Das Paket auf den neuen Qmail-Toaster übertragen und nach /home/ kopieren. Dann entpacken und Berechtigungen richtig setzen:

# cd /home/
# tar xzf home-qscand-20060327.tar.gz
# chown -R qscand.qscand qscand/

Die SpamAssassion-Konfiguration und Bayes-Datenbank des Users qscand ist in /home/qscand/.spamassassin/ zu finden. SpamAssassin neu starten:

# /etc/init.d/spamassassin restart

In /var/spool/qscan/qmail-queue.log sollte nun der Bayes-Scan beim Empfang einer Mail aufgeführt sein:

(...)
Mon, 27 Mar 2006 15:38:33 CEST:1957: This is a PLAIN text message, skip virus scanners - but not SA
Mon, 27 Mar 2006 15:38:33 CEST:1957: SA: REPORT hits = -2.6/5.0
 -2.6 BAYES_00               BODY: Spamwahrscheinlichkeit nach Bayes-Test: 0-1%
                             [score: 0.0000]
  0.0 AWL                    AWL: From: address is in the auto white-list
Mon, 27 Mar 2006 15:38:33 CEST:1957: SA: finished scan in 0.537541 secs - hits=-2.6/5.0
Mon, 27 Mar 2006 15:38:33 CEST:1957: p_s: finished scan in 0.043386 secs
(...)

TODO: Beschreibung wie man Spam lernt...

Qmailadmin

Apache Direktiven für einen virtuellen Host:

ScriptAlias /qmailadmin "/var/www/cgi-bin/qmailadmin"
ScriptAlias /cgi-bin/qmailadmin "/var/www/cgi-bin/qmailadmin"
Alias /images/qmailadmin/ /var/www/html/images/qmailadmin/

Alternativ die letzte Stable-Version 1.2.16 verwenden, wenn beim kompilieren von 1.2.16 Fehler auftreten.

cd /var/src/tar
wget http://downloads.sourceforge.net/project/qmailadmin/qmailadmin-devel/qmailadmin-1.2.16.tar.gz
wget http://sourceforge.net/projects/qmailadmin/files/qmailadmin-help/1.0.8/qmailadmin-help-1.0.8.tar.gz
cd ..
tar -xzf tar/qmailadmin-1.2.16.tar.gz
cd qmailadmin-1.2.16
./configure --enable-help --enable-htmldir=/var/www/html --enable-cgibindir=/var/www/cgi-bin --enable-modify-quota --enable-no-cache
make
make install-strip

cd ../
tar -xzf tar/qmailadmin-help-1.0.8.tar.gz
cd qmailadmin-help-1.0.8
mkdir /var/www/html/images/qmailadmin/help
cp -rp * /var/www/html/images/qmailadmin/help 

Link:

VQAdmin

Mit VQAdmin kann man für vpopmail mehrere Domains veralten, immer beim Link nach neuster Version schauen

cd /var/src/tar
wget http://www.inter7.com/vqadmin/vqadmin-2.3.7.tar.gz
cd ..
tar xvzpf tar/vqadmin-2.3.7.tar.gz
cd vqadmin-2.3.7
./configure 
make
make install-strip

Achtung:

Auf x86_64-Systemen lässt sich vqadmin nicht so einfach übersetzen, weil der Code zu alt ist. Daher einfach aus dem vpopmail-Verzeichnis die Dateien config.guess und config.sub in das vqadmin-Verzeichnis kopieren, und danach geht alles.


Dann in der Apache-Konfiguration des Web, worüber man die Administration aufrufen will, folgende eintragen:

<Directory "/var/www/cgi-bin/vqadmin">
    deny from all
    Options ExecCGI
    AllowOverride AuthConfig
    Order deny,allow
</Directory>

und anschließend passt man die .htaccess im Verzeichnis /var/www/cgi-bin/vqadmin/ nach seinen Wünschen an.

vi /var/www/cgi-bin/vqadmin/.htaccess
AuthType Basic
AuthUserFile /home/www/mail.marketteam.de/acl/vqadmin.passwd
AuthName vQadmin
require valid-user
satisfy any

Hier sollte man AuthUserFile auf eine gültige Passwort-Datei zeigen lassen, die man mit htpasswd angelegt hat.

htpasswd -cb /home/www/mail.marketteam.de/acl/vqadmin.passwd ktsadmin password

Anschließend muß man noch die Rechte für diesen User in der Datei /var/www/cgi-bin/vqadmin/vqadmin.acl setzen. Hier die Zeilen beginnend mit techuser,senior, bzw admin und am Ende folgende Zeile hinzufügen.

vi /var/www/cgi-bin/vqadmin/vqadmin.acl
admin * ktsadmin,weiterUser,nochEiner

Anschließend kann man z.B. über http://mailx.braunschweig-lions.de/cgi-bin/vqadmin/vqadmin.cgi die Administration aufrufen.

Hinweis:

Sollte nach erfolgreicher Anmeldung eine Meldung wie invalid language file etc erscheinen, dann hat die automatische Spracherkennung vom Browser her nicht geklappt. Meistens macht es dann Sinn, bei seinen Browser die Sprache unter den Einstellungen auf Deutsch (de) bzw Englisch (en) zu ändern.

Alternativ kann man auch in das Verzeichnis /var/www/cgi-bin/vqadmin/html weiter Sprachdateien erzeigen.

cd /var/www/cgi-bin/vqadmin/html
cp de de-de
cp de de_DE
chown vpopmail.vchkpw *

SquirrelMail

cd /var/src/tar

# Achtung: Immer nach neuster Version schauen! Siehe Projektlink.
wget http://mesh.dl.sourceforge.net/sourceforge/squirrelmail/squirrelmail-1.4.15.tar.gz
cd ..

tar xzf tar/squirrelmail-1.4.15.tar.gz
cd tar/squirrelmail-1.4.15

./configure

# Nun Einstellungen wie gewünscht vornehmen, die folgenden auf jeden Fall

* 2.  Server Settings
      Ggf. IMAP/SMTP localhost gegen die IP/Hostnamen tauschen, wenn Courier nur auf einer IP und nicht auf allen eingerichtet ist


* 4.  General Options
      Data Directory (1) auf "/var/www/data/"
      Attach Directory (2) auf "/var/www/attach/"
      Allow server thread sort (10) auf "y"
      Allow server-side sorting (11) auf "y"

      Save data (s)

* Quit und Save

mv data/ /var/www/
mkdir /var/www/attach
chown -R apache.apache /var/www/data/ /var/www/attach/
mv squirrelmail-1.4.15/ /var/www/html/webmail

Nun in einem gewünschten Virtuellen Host oder der ssl.conf den Zugriff einrichten, z.B. mit

Alias /webmail/ /var/www/html/webmail/
Alias /webmail /var/www/html/webmail/

Natürlich kann jederzeit unter /var/www/html/webmail/ das ./configure Skript aufgerufen werden und somit die Konfiguration verändert werden.

Sprachen einrichten

cd /var/src/tar/
wget http://surfnet.dl.sourceforge.net/sourceforge/squirrelmail/all_locales-1.4.13-20071220.tar.gz
mkdir squirrelmail-locale
cd squirrelmail-locale
tar xzf ../tar/all_locales-1.4.13-20071220.tar.gz

./install

# Dort den Pfad "/var/www/html/webmail/" angeben

Tipp: Wenn man nicht soviel mit "y" das Kopieren bestätigen möchte, kurz das install-Skript editieren und das -i beim cp entfernen.

Nun kann man noch mit dem configure Skript in /var/www/html/webmail/ die Default-Sprache auf Deutsch (de_DE) und das Charset z.B. auf iso-8859-15 einstellen.


SIEVE-Filter Plugin

Um den optional eingerichteten SIEVE-Filter auch für die benutzer Steuerbar zu machen, empfiehlt sich die Installation des Avelsieve Plugins für Squirrelmail wie folgt. Die offizielle Seite zu dem Plugin ist unter http://squirrelmail.org/plugin_view.php?id=73 zu finden.

cd /usr/share/squirrelmail/plugins/
wget "http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Favelsieve-1.9.9.tar.gz"
tar xfz avelsieve-1.9.9.tar.gz
cd ./avelsieve/config/
cp config_sample.php config.php

Änderungen in der Konfiguration

  1. Mit dem Editor der Wahl nun die frisch kopierte config.php öffnen und den Wert von $sieveport von 2000 in 4190 ändern.
  2. Optional können in den Zeilen 151-153 ($avelsieve_hardcoded_capabilities) noch die Fähigkeiten von SIEVE konfiguriert werden. Alle Einstellungen für den Dovecot LDA, wie im Kommentar darüber aufgelistet, können ohne Probleme übernommen werden.
  3. Vor dem Schließen der Datei muss noch sichergestellt sein, dass die Variable $avelsieve_disabletls auf true gesetzt ist. Anschließend Datei speichern und schließen.

Aktivierung des Plugins in Squirrelmail

Abschließend ist das Plugin noch über das Squirrelmail Config-Script zu aktivieren. Dazu muss das /usr/share/squirrelmail/config/conf.pl Script aufgerufen werden. Dabei sind in dem Menü-gesteuerten Script folgende Eingaben zu tätigen und jeweils mit ENTER zu bestätigen:

  • 8 (Auswahl des Plugin Menüs)
  • Die Zahl vor "avelsieve" unter "Available plugins" (aktiviert das Plugin)
  • S (Änderungen speichern)
  • Q (Script beenden)

Testen der Einstellungen

Anschließend kann man sich bei Squirrelmail anmelden und unter Optionen -> Nachrichtenfilter einen ersten Filter anlegen. Es empfiehlt sich eine Regel anzulegen, die nach einem String im Betreff sucht und die eMail in einem anderen Ordner als dem Posteingang ablegt. Nach dem Speichern einfach eine eMail an die eigene Adresse senden und schauen ob die Mail richtig abgelegt wurde.

Greylisting Patch

Whitepaper / Beschreibung über Greylisting:

Infos:


Greylisting-Patch für Bill Shupp's netqmail qmail-toaster-0.8 Patch:


Voraussetzungen:

Ein MySQL-Server muss installiert sein, zum kompilieren der gepatchten Quellen von netqmail muss das mysql-devel Paket installiert sein:

Z.B. Fedora Core 4

yum install mysql-devel


cd /var/src

mkdir greylisting-patch
cd greylisting-patch
wget http://shupp.org/patches/greylisting-20060105.patch
cd ..

cp -ra netqmail-1.06/netqmail-1.06-mit-greylisting/
cd netqmail-1.06-mit-greylisting/netqmail-1.06
cat ../../greylisting-patch/greylisting-20060105.patch | patch -p0

Datenbank und Benutzer anlegen:

mysql -p

mysql> CREATE DATABASE relaydelay;
mysql> use mysql;
mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','milter',PASSWORD('milter'));
mysql> grant select,insert,update,delete on relaydelay.* to milter@"localhost" identified by 'milter';
mysql> quit

mysql -p mysql < dbdef.sql


Hinweis: Auf einem Fedora Core 4 x86_64 und i686 Server war vor dem Kompilieren folgende Änderung am Makefile nötig.

Mit vi Makefile das Makefile öffnen und den Pfad zu libmysqlclient.a ändern. Zusätzlich werden noch die Optionen -lssl -lcrypto hinzugefügt.

ALT

qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib/libmysqlclient.a
        ./load qmail-envelope-scanner -lz -lm local_scan.o /usr/lib/libmysqlclient.a

NEU (ab CentOS 6)

qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib64/mysql/libmysqlclient.so
        ./load qmail-envelope-scanner -lz -lm -lssl -lcrypto local_scan.o /usr/lib64/mysql/libmysqlclient.so

NEU

qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib64/mysql/libmysqlclient.a
        ./load qmail-envelope-scanner -lz -lm -lssl -lcrypto local_scan.o /usr/lib64/mysql/libmysqlclient.a

NEU (i686)

qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib/mysql/libmysqlclient.a
        ./load qmail-envelope-scanner -lz -lm -lssl -lcrypto local_scan.o /usr/lib/mysql/libmysqlclient.a
make clean
make 

qmailctl stop
make setup check

chown -R vpopmail:vchkpw /var/qmail/spam

qmailctl start

MySQL Datenbank regelmässig aufräumen

local_scan.c, also das eigentliche Greylisting-Programm, räumt abgelaufene Datenbank-Einträge nicht selbstständig auf. Dieses sollte ein kleines Script übernehmen, welches stündlich ausgeführt wird.

cd /var/src/greylisting-patch/
wget http://shupp.org/software/greylisting-delete-expired.sh
cp greylisting-delete-expired.sh /etc/cron.hourly/
chmod 700 /etc/cron.hourly/greylisting-delete-expired.sh

Parameter

Einstellungen können vor dem Kompilieren in der Datei local_scan.c vorgenommen werden. Z.B. hier die Default-Einstellungen:

/************************/
#define DEFAULT_MYSQLHOST "localhost"
#define DEFAULT_MYSQLUSER "milter"
#define DEFAULT_MYSQLPASS "milter"
#define DEFAULT_MYSQLDB   "relaydelay"
#define DEFAULT_BLOCK_EXPIRE  55   /* minutes until email is accepted */
#define DEFAULT_RECORD_EXPIRE 500  /* minutes until record expires */
#define DEFAULT_RECORD_EXPIRE_GOOD  36 /* days until record expires after accepting email */
#define DEFAULT_LOCAL_SCAN_DEBUG   0 /* set to 1 to enable debugging */

/*************************/

Fuzzy OCR

Hierbei handelt es sich um ein Plugin für Spamassassin, womit der Text in Grafiken gescannt werden kann und anhand einer Wortliste dann entschieden wird, ob die Grafik SPAM enthält

Zuerst installiert man die benötigten Pakete

yum install netpbm-progs ocrad gifsicle perl-String-Approx perl-MLDBM-Sync giflib-utils gocr ImageMagick

Anschließend lädt man das Paket herunter, entpackt dieses und kopiert die Dateien in den Spamassassin-Ordner

cd /var/src/tar/
wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz
cd ..
tar xvzpf tar/fuzzyocr-3.5.1-devel.tar.gz 
cp -a FuzzyOcr-3.5.1/FuzzyOcr* /etc/mail/spamassassin/

Zwischendurch checkt man die Version von Spamassassin

 # spamassassin -V
SpamAssassin version 3.2.5
  running on Perl version 5.8.8

Sollte die Version kleiner 3.2.0 sein, sollte man die Datei v320.pre im Ordner /etc/mail/spamassassin bearbeiten (siehe Installationsanleitung)

Nun passt man folgende Zeilen in der Datei FuzzyOcr.cf an

# vi /etc/mail/spamassassin/FuzzyOcr.cf

focr_logfile /var/log/FuzzyOcr.log
focr_enable_image_hashing 2
#focr_bin_helper tesseract

den Rest lässt man auf den default-Werten. Tesseract nur einschalten, wenn man es installiert hat.

Nun testet man, ob alle Abhängigkeiten erfüllt sind.

# spamassassin --lint

Hier sollte nun keine Ausgabe erfolgen.

Anschließend legt man die Log-Datei mit den korrekten Rechten an, falls diese noch nicht existiert.

touch /var/log/FuzzyOcr.log
chown qscand.qscand /var/log/FuzzyOcr.log

Danach testet man, ob eine Grafik als Spam erkannt wird, mit :

spamassassin --debug FuzzyOcr < /var/src/FuzzyOcr-3.5.1/samples/ocr-animated.eml > /dev/null

und irgendwo unten in der Ausgabe erscheint dann:

...
[26434] info: FuzzyOcr: Scanset "ocrad" generates enough hits (4), skipping further scansets...
[26434] info: FuzzyOcr: Message is spam, score = 9.000
[26434] info: FuzzyOcr: Adding Hash to "/etc/mail/spamassassin/FuzzyOcr.db" with score "9.000"
[26434] dbg: FuzzyOcr: Digest: 484116:361:447:7::255:255:255:255:147877::0:0:0:0:7719::153:0:0:46:1764::204:0:0:61:1190::0:0:255:29:1110::255:0:0:76:858
[26434] info: FuzzyOcr: Words found:
[26434] info: FuzzyOcr: "price" in 1 lines
[26434] info: FuzzyOcr: "company" in 1 lines
[26434] info: FuzzyOcr: "alert" in 1 lines
[26434] info: FuzzyOcr: "news" in 1 lines
[26434] info: FuzzyOcr: (6 word occurrences found)
[26434] dbg: FuzzyOcr: Remove DIR: /tmp/.spamassassin26434a9bpvQtmp
[26434] dbg: FuzzyOcr: FuzzyOcr ending successfully...
[26434] dbg: FuzzyOcr: Processed in 0.524110 sec.

Wichtig ist die 2. Zeile und das keine Fehler aufgetreten sind. Die Fehlermeldungen in /var/log/FuzzyOcr.log bzgl. des Fehlens von gocr und tesseract kann man ignorieren, weil zum Scannen der Texte orcad benutzt wird.

Da nun alles korrekt läuft, müssen wir nur Spamassassin mitteilen, das er das Plugin lädt.

/etc/init.d/spamassassin restart


Links:

Logdatei Rotation

vi /etc/logrotate.d/fuzzyocr

/var/log/FuzzyOcr.log {
  rotate 12
  weekly
  compress
  delaycompress
  create 664 qscand qscand
}

}

Server-seitige Mailfilterung mit SIEVE

Um eMails auf dem Server bereits in richtige Ordner einsortieren lassen zu können oder einen Autoresponder zu setzen, bietet sich die Verwendung des bereits beschriebene Installation und Konfiguration der SIEVE-Erweiterung Pigeonhole von Dovecot an. Um dies zu aktivieren und durch den Benutzer konfigurierbar zu machen, fehlen nur noch wenige Handgriffe.

Konfiguration des SIEVE Plugins

Die Datei /etc/dovecot/conf.d/90-sieve.conf mit einem beliebigen Editor öffnen und folgende Änderungen vornehmen:

  • Zeile 11: sieve = /home/vpopmail/domains/%d/%n/user.sieve
  • Zeile 53: sieve_extensions = +notify +imapflags (optional) ==> Kann man aktivieren, kann aber u.U. zu Problemen führen. Nur aktivieren wenn unbedingt notwendig!

Der Pfad in Zeile 11 entspricht der Standard-Konfiguration und speichert die Benutzer-Konfiguration in dem jeweiligen Ordner des Benutzers, zum Beispiel: /home/vpopmail/domains/link-innovation.de/wickham/user.sieve. Die möglichen Platzhalter können unter http://wiki2.dovecot.org/Variables eingesehen werden.


Anschließend speichern und die neue Konfiguration mittels service dovecot reload neu laden.

Aktivierung des SIEVE Filters pro Domain

Um die Server-seitige Filterung zu aktivieren, muss für jede Domain - die dieses Feature erhalten soll -, der Delivery Agent wie folgt auf Dovecot umgeleitet werden:

cd /home/vpopmail/domains/<DOMAIN>/
vim .qmail-default

Die dort enthaltene Zeile kann entfernt oder in die 2. Zeile verschoben werden. Anschließend die folgende Zeile in der ersten Zeile(!) einfügen und speichern:

|/var/qmail/bin/preline -f /usr/local/dovecot/libexec/dovecot/deliver -d $EXT@$USER

Tuning und Einstellungen

Über verschiedene Dateien in /var/qmail/control/ kann man verschiedene Dinge einstellen. Die Liste ist u.U. nicht komplett, sondern wird bei Bedarf entsprechend erweitert. Nach dem Ändern einer Einstellung sollte qmail sicherheitshalber mit qmailctl restart neu gestartet werden.

Einige Listen findet man hier:

Durch enthaltene Patches kann es weitere Optionen geben.


queuelifetime

Bestimmt wie lange Nachrichten in der Queue verbleiben bis ein Fehler ausgelöst wird, wenn sie nicht zugestellt werden können. In der Default-Einstellung sind das 7 Tage. Die Zeit wird in Sekunden angegeben und kann getrost verringert werden, dann erkennt man auch schnelle etwaige Fehler in der Konfiguration.

Mit # vi /var/qmail/control/queuelifetime die Datei anlegen und die Zeit in Sekunden anlegen, hier z.B. einen Tag:

86400

databytes

Maximale Größe einer E-Mail Nachricht in Bytes, z.B. # vi /var/qmail/control/databytes:

15000000

Größe und Anzahl der Logdateien Wenn man will das QMAIL mehr und größe Logdateien erzeigt muß man die Parameter für multilog im run-Skript ändern. z.B: /service/qmail/log/run

#vi /service/qmail/log/run

#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t n20 s4999999 /var/log/qmail/smtpd

wobei die Parameter wie folgt belegt sind.

nX:

X ist hierbei die Anzahl der Logdateien, bevor die erste wieder gelöscht wird

sXXXXXXXXX

XXXXXX ist hierbei die Größe der Logdatei in Bytes

Logwatch

Um zu verhindern, das Logwatch sämtliche Details in seinem Statusbericht ausgibt, empfiehlt es sich auf primären Mailservern hier die Defaulteinstellungen etwas zu ändern.

Bad Mime Characters

Man fügt folgende Zeile in /service/qmail-smtp/run' und /service/qmail-smtp/run hinzu, um keine Mails mit BMCs in der Mail zu blocken.

export BMC_WHITELIST="on"
vi /usr/share/logwatch/default.conf/services/qmail-send.conf

# This sets whether to display counts of emails from each user & to each user.
# Will make rather a large log file if run on a primary mail server.
# Set either 0 or 1
#$qmail_high_detail = 1 # default
$qmail_high_detail = 0
vi /usr/share/logwatch/default.conf/services/qmail-smtpd.conf

# This sets whether to display counts of emails from each user & to each user.
# Will make rather a large log file if run on a primary mail server.
# Set either 0 or 1
#$qmail_high_detail = 1 # default
$qmail_high_detail = 0

Zusätzlich kann man dann noch in der Datei '/etc/logwatch/conf/ignore.conf' ein Paar Ausdrücke aus dem Statusbericht herausfiltern.

vi /etc/logwatch/conf/ignore.conf

###### REGULAR EXPRESSIONS IN THIS FILE WILL BE TRIMMED FROM REPORT OUTPUT #####
CHKUSER accepted sender
CHKUSER accepted any rcpt

Tipps & Tricks

WICHTIG: SPF / DNS

Wichtig ist auch die richtige SPF Konfiguration im DNS, da sonst einige Mailserver ggf. die Kommunikation verweigern (Spamschutz).

Überblick

SPF steht für Sender Policy Framework und ist eine Technik zur Vermeidung von Spam- oder Virenmails mit gefälschtem Absender.

Da bei SPF in der Zonendatei des Nameservers der Absenderdomain ein spezieller Eintrag eingebaut wird, ist gewährleistet, dass Unbefugte keine Manipulationen vornehmen können.

SPF verhindert aber kein Spam, für den der Versender eine eigene Domain ordnungsgemäss angemeldet hat und greift auch nicht bei nicht existierenden Domains.

Dieser Überblick stammt von folgender Webseite, wo man einfach verständliche Informationen findet: http://wiki.hetzner.de/index.php/DNS_SPF

Weitere Links



Autorespond fixen

Wenn man autorespond (Mail-Robot) benutzt und im /var/log/qmail/current folgende Fehlermeldung sieht:

(...)
deferral: /bin/sh:_/usr/local/bin/autorespond:_No_such_file_or_directory/
(...)

kann man das Problem mit folgendem Kommando beheben:

# ln -s /usr/bin/autorespond /usr/local/bin/autorespond

Mit Mailboxen umziehen

Wenn man mit einem Qmail-Toaster einmal auf eine andere Maschine umzieht, muss man die Mailboxen samt allen Einstellungen/Kennwörtern etc. natürlich mitnehmen. Hier eine kurze Beschreibung wie man das macht ohne eine Mail zu verlieren.

Man kann das ganz gut mit zwei SSH-Terminal-Sitzungen machen. Eine auf dem Quell-Server und eine auf dem Ziel-Server.


Server: Quelle

Als erstes muss man den gesamten Qmail-Toaster stoppen damit keine Mails mehr versendet oder empfangen werden können:

# qmailctl stop
# vpopmailctl stop
# /etc/init.d/courier-imap stop
# /etc/init.d/courier-authlib stop

Nun packt man den gesamten Inhalt von /home/vpopmail/domains ein:

# cd ~
# tar cfvpz mail-domains.tar.gz /home/vpopmail/domains/

Die Datei kann jetzt z.B. via SSH-Copy (scp) auf den anderen Server übertragen werden.

Server: Ziel

Nachdem die Datei auf dem Ziel-Server angekommen ist, kann sie dort eingespielt werden. Dazu entpacken wir zuerst das tar.gz-Paket in einem temp. Ordner, in den wir zuvor mit cd gewechselt sind, und verschieben dann die Mailboxen an den richtigen Platz.

# tar xzf mail-domains.tar.gz
# cd home/vpopmail/domains
# mv -v * /home/vpopmail/domains/


Server: Quelle

Die Datei /var/qmail/users/assign ausgeben:

# cat /var/qmail/users/assign

Server: Ziel

Den Inhalt der oben ausgegebenen Datei nun in die entsprechende Datei auf dem Ziel-Server anhängen:

# vi /var/qmail/users/assign

HINWEIS: Unbedingt beachten das der . in der letzten Zeile stehten muss!

z.B.:

+test.braunschweig-lions.de-:test.braunschweig-lions.de:89:89:/home/vpopmail/domains/test.braunschweig-lions.de:-::
(...)
+red-cubs94.de-:red-cubs94.de:89:89:/home/vpopmail/domains/red-cubs94.de:-::
.

Die Datei speichern.


Server: Quelle

Wieder auf dem Quell-Server eine weitere Datei ausgeben.

# cat /var/qmail/control/rcpthosts

Server: Ziel

Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:

# vi /var/qmail/control/rcpthosts

z.B.:

web1.braunschweig-lions.de
test.braunschweig-lions.de
mail.marketteam.de
marketteam.de
braunschweig-lions.de
serviceteam-lions.de
germanbowl.com
junior-lions.de
ffc-braunschweig.de
red-cubs.de
newsletter.braunschweig-lions.de
red-cubs94.de

Server: Quelle

Wieder auf dem Quell-Server eine weitere Datei ausgeben.

# cat /var/qmail/control/virtualdomains

Server: Ziel

Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:

# vi /var/qmail/control/virtualdomains

Z.B.:

test.braunschweig-lions.de:test.braunschweig-lions.de
web1.braunschweig-lions.de:web1.braunschweig-lions.de
marketteam.de:marketteam.de
braunschweig-lions.de:braunschweig-lions.de
serviceteam-lions.de:serviceteam-lions.de
germanbowl.com:germanbowl.com
feldschloesschen-german-bowl.de:feldschloesschen-german-bowl.de
junior-lions.de:junior-lions.de
ffc-braunschweig.de:ffc-braunschweig.de
red-cubs.de:red-cubs.de
newsletter.braunschweig-lions.de:newsletter.braunschweig-lions.de
red-cubs94.de:red-cubs94.de

Nun muss auf dem Ziel-Server noch qmails user datenbank als cdb aktualisiert werden (/var/qmail/users/cdb):

# /var/qmail/bin/qmail-newu

Anhand des Timestamps der Datei kann man überprüfen ob das geklappt hat:

# ls /var/qmail/users/ -al
insgesamt 36
drwxr-xr-x   2 root qmail 4096 31. Mär 02:21 .
drwxr-xr-x  12 root qmail 4096 24. Mär 15:40 ..
-rw-r--r--   1 root root  1031 31. Mär 02:13 assign
-rw-------   1 root root     0 27. Mär 10:49 assign.lock
-rw-r--r--   1 root root  3333 31. Mär 02:21 cdb

Vorsichthalber auf dem Ziel-Server alle Toaster-Dienste neu starten:

# qmailctl restart
# vpopmailctl restart
# /etc/init.d/courier-imap restart

!!! DNS MX-Einträge können nun umgestellt werden !!!

Der DNS muss umgestellt werden, damit die Mails aus dem Internet auf dem Ziel-Server ankommen.


Man manuell mit dem Programm telnet eine Zustellung einer Mail testen. Dabei z.B. das /var/log/qmail/current und /var/spool/qmailscan/qmail-queue.log beobachten. Das ganze am Besten von Extern:

$ telnet mail.marketteam.de 25
Trying 212.68.65.193...
Connected to mail.marketteam.de (212.68.65.193).
Escape character is '^]'.
220 web1.braunschweig-lions.de ESMTP
helo
250 web1.braunschweig-lions.de
mail from:schlueter@link-innovation.de
250 ok
rcpt to:webmaster@braunschweig-lions.de
250 ok
data
354 go ahead
Subject: Erste Testmail, please ignore

Das ist nur ein Test.
.
250 ok 1143766246 qp 10453

Die beobachteten Logfiles sollten die korrekte Zustellung der Mail anzeigen.

Auf dem alten Server kann man nun noch über die smtproutes dafür sorgen, das alle eingehenden Mails an den neuen Server weitergegeben werden. Das ist sinnvoll weil die DNS-Änderung nicht sofort überall wirkt.

Server: Quelle

Mit # vi /var/qmail/control/smtproutes eine Datei mit folgendem Inhalt anlegen, wobei natürlich die IP-Adressen entsprechend anzupassen sind. In diesem Beispiel ist 212.68.65.193 der neue Server und 213.252.153.34 der alte Server:

:212.68.65.193

Server: Ziel

Mit vi /home/vpopmail/etc/tcp.smtp folgenden Eintrag anhängen:

213.252.153.34:allow,RELAYCLIENT=""

Die cdb-Datei in home/vpopmail/etc/ neu schreiben:

# qmailctl cdb


Server: Quelle

Nun auf dem Quell-Server qmail wieder starten:

# qmailctl start

Nun kann wieder von extern eine Testmail an den alten Server abgesetzt werden:

$ telnet 213.252.153.34 25
Trying 213.252.153.34...
Connected to bs-lions-mail.bcc.de (213.252.153.34).
Escape character is '^]'.
220 mail.marketteam.de ESMTP
helo
250 mail.marketteam.de
mail from:dirk@schlicker.org
250 ok
rcpt to:webmaster@braunschweig-lions.de
250 ok
Data
354 go ahead
Subject: Test 3, mail an alten Server

Diese Mail wurde via smtp am alten server abgeliefert, sollte weitergeleitet werden wen den Webserver...

.
250 ok 1143766837 qp 29472

Wenn alles geklappt hat und die Mail über den neuen Server zugestellt wurde, war es das.

Courier-IMAP nach Dovecot

Sollte man den IMAP-Server gewechselt haben, dann muss man noch die Postfächer für dovecot wandeln

/usr/bin/courier-dovecot-migrate.pl --to-dovecot --recursive --convert /home/vpopmail/domains/domain

Mailinglisten reparieren

Manchmal kann es vorkommen, besonders nach einem Server-Umzug das die Administration einer Mailingliste mit QmailAdmin nicht mehr funktioniert, z.B das man keine Subscriber oder Moderatoren mehr löschen kann.

Dann ist es sinnvoll, die Subscriber, bzw Moderatoren zu exportieren, dann in der Liste zu löschen, und anschließend wieder hinzu zufügen.

Liste sichern

Subscriber

ezmlm-list DIR > subscriber.txt

wobei dir das Verzeichnis zur Mailingliste ist, also /home/vpopmail/domains/domain.de/list

Moderatoren

ezmlm-list DIR/mod > mods.txt

Liste aufräumen

Subscriber

/bin/rm DIR/subscribers/*

Moderatoren

/bin/rm DIR/mod/subscribers/*

Liste neu aufbauen

Subscriber

ezmlm-sub DIR < subscriber.txt

Moderatoren

ezmlm-sub DIR/mod < mods.txt

Anschließend sollte man wie gewohnt mir QMailAdmin arbeiten können

SPAM Abwehr

Netzwerke blockieren

Um im ersten Schritt eine SPAM-Attacke zu unterbinden, macht es Sinn, per Firewall das Netzwerk, den Rechner des Angreifers zu blockieren.

iptables -I INPUT -s 220.181.12.0/24 -p tcp --dport 25 -j DROP
iptables -I INPUT -s 220.181.12.0/24 -p udp --dport 25 -j DROP

Mit diesen iptables Anweisungen werden sämtlich Pakete aus dem Netzwerk 220.181.12.0/24 (China) auf Port 25 (smtp) verworfen. Damit verhindert man erstmal, das weitere SPAM-Mails eintreffen.

Qmail Queue leeren

Da nach einer SPAM-Attacke meistens die QMail Mailqueue extrem gefüllt ist, kommt es natürlich zu Beischränkunegn bei dem normalen Mailverkehr. Daher macht es Sinn, die Queue dediziert zu bereinigen.

Dieses erreicht man mit dem Befehl:

qmail-remove -p "220.181.12" -d

Hier werden sämtliche Mails aus der Queue gelöscht, die irgendwo das Suchmuster (-p) "220.181.12" in der Mail enthalten.

Download: http://www.linuxmagic.com/opensource/qmail/qmail-remove/

Doublebounce unterbinden

Email-Konto einrichten, wohin doublebounce Mails verschwinden

echo '#' > /var/qmail/alias/.qmail-doublebounce
echo "doublebounce" > /var/qmail/control/doublebounceto

SPAM IPs in DB merken

Da schon eine DB für den Mailserver existiert (relaydelay), wird diese um eine Tabelle erweitert.

use database relaydelay;
CREATE TABLE `spam_ips` (
  `ipaddress` varchar(40) NOT NULL default '',
  `dateadded` datetime NOT NULL default '0000-00-00 00:00:00',
  `reportedby` varchar(40) default NULL,
  `updated` datetime default NULL,
  `attacknotes` text,
  `b_or_w` char(1) NOT NULL default 'b',
  `dnsname` varchar(255) default'',
  `hits` int(11) NOT NULL default NULL,
  PRIMARY KEY  (`ipaddress`),
  KEY `dateadded` (`dateadded`),
  KEY `b_or_w` (`b_or_w`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='spammer list';

wichtige Links

http://rbl-check.org

https://talosintelligence.com/reputation_center/lookup?search=85.214.122.89