QMAIL-Toaster: Unterschied zwischen den Versionen

Aus Wiki schlicker.org
Zur Navigation springen Zur Suche springen
 
(479 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
 
[[Category:Linux]]
 
[[Category:Linux]]
  
Dieser Artikel beschreibt die Installation, Konfiguration und Inbetriebnahme eines sogenannten [http://www.qmail.org qmail]-Toasters, einem modularem qmail-Mailsystem mit vielen Features, für hohe Ansprüche an die Sicherheit und starkem Mailvekehr.
+
=Einleitung=
 +
Das Ziel dieser Kurzanleitung ist NICHT, jemanden die Funktionsweise eines Mailservers beizubringen.  
 +
Sondern die nachfolgenden Hinweise und Schritte dienen lediglich als Erinnerung, wie eine schnelle Installation von qmail und der zugehörigen Software durchzuführen ist, um zum Schluß einen funktionieren QMAIL-Toaster zu haben.  
  
Der Artikel basiert auf [http://www.shupp.org/toaster/ Bill's Linux Qmail Toaster] von [http://www.amazon.com/gp/registry/UUPXUQCAU68Y/002-2607805-5733646 Bill Shupp] und [http://www.lifewithqmail.org/ Life with qmail] von [http://www.amazon.de/exec/obidos/ASIN/1893115402/qid=1143204243/sr=1-1/ref=sr_1_2_1/303-2291029-8667435 Dave Sill].
+
Quoting D. J. Bernstein definition
 +
<cite>
 +
  qmail is a secure, reliable, efficient, simple message transfer agent. It is designed for typical Internet-connected UNIX hosts
 +
</cite>
  
 +
__TOC__
  
'''Hinweis:''' Hier werden Bills Ausführungen als eine Art ''Install-Log'' wiederholt und um teilweise OS-Spezifische Details ergänzt. Es sollte '''immer''' parallel [http://www.shupp.org/toaster/ Bill Shupps Original Artikel] angeschaut werden, um zu prüfen ob sich durch neue Versionen Dinge verändert haben.
+
= Referenzen =
  
Fragen, Fehler und Anregungen zu diesem Artikel bitte an [[Benutzer:Dirk]]
+
    * http://cr.yp.to/qmail.html
 +
    * qmail.org ([http://qmailorg.schmonz.com/top.html mirror])
 +
    * [http://www.lifewithqmail.org/ Life with qmail]
 +
    * Bill Shupp's toaster (officially dead)
 +
    * qmailwiki.org (dead)
 +
    * [https://www.fehcom.de/sqmail/ Erwin Hoffman's "qmail support" site]
 +
    * [http://qmail.jms1.net/ John Simpson's "qmail information" pages]
 +
    * see also: [http://www.nrg4u.com/ the big qmail picture]
 +
    * '''Wichtig''':  [https://notes.sagredo.eu/ notes.sagredo.eu Qmail Installationsvorlage]
  
'''Wichtig''':  [https://notes.sagredo.eu/ Qmail notes]
 
  
  
__TOC__
+
= History =
=History=
 
 
{| {{rahmen}}
 
{| {{rahmen}}
  
|''Datum''  
+
|'''Datum'''
|''Von''
+
|'''Von'''
|''angepasst/getestet auf OS''
+
|'''angepasst/getestet auf OS'''
|''Arch''
+
|'''Arch'''
|''Bemerkung''
+
|'''Bemerkung'''
 +
|-
 +
 
 +
|2023-05-18
 +
|[[Benutzer:Karl|Karl Schlicker]]
 +
|Rocky Linux 9.x
 +
|x86_64
 +
|Anleitung angepasst, basierend auf https://notes.sagredo.eu/ nun für Rocky Linux 9.x
 +
|-
 +
 
 +
|2020-12-27
 +
|[[Benutzer:Karl|Karl Schlicker]]
 +
|Centos 8.x
 +
|x86_64
 +
|Anleitung angepasst und neu erstellt basierend auf https://notes.sagredo.eu/
 
|-
 
|-
  
Zeile 51: Zeile 77:
 
Voraussetzungen prüfen/installieren, gcc, tool, etc.
 
Voraussetzungen prüfen/installieren, gcc, tool, etc.
 
siehe auch [http://www.shupp.org/toaster/#prerequisites http://www.shupp.org/toaster/#prerequisites]
 
siehe auch [http://www.shupp.org/toaster/#prerequisites http://www.shupp.org/toaster/#prerequisites]
 +
 +
Zuerst das Devel-Repo aktivieren
 +
<pre>
 +
dnf config-manager --set-enabled devel
 +
</pre>
  
 
<pre>
 
<pre>
yum -y install gcc gcc-c++ gdbm gdbm-devel openssl openssl-devel stunnel
+
dnf -y install gcc gcc-c++ gdb-minimal openssl openssl-devel stunnel
yum -y install krb5-devel bzip2 bzip2-devel patch expect expect-devel automake  
+
dnf -y install krb5-devel bzip2 bzip2-devel patch automake  
yum -y install autoconf make unzip bind-utils openldap-devel mysql-devel libev-devel lz4-devel patch
+
dnf -y install autoconf make unzip bind-utils openldap-devel libev-devel lz4-devel patch bzip2-devel
yum -y install spamassassin-iXhash2.noarch
+
dnf -y install spamassassin-iXhash2.noarch
 +
dnf -y install mariadb mariadb-server mariadb-devel
 +
dnf -y install help2man multitail
 +
dnf -y install cracklib cracklib-devel.x86_64 cracklib-dicts expat expat-devel telnet git
 
</pre>
 
</pre>
  
Zeile 70: Zeile 104:
 
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.
 
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.
 
<pre>
 
<pre>
[root@web1 /]# host -t mx braunschweig-lions.de
+
[root@web1 /]# host -t mx afdb.de
braunschweig-lions.de mail is handled by 10 mail.braunschweig-lions.de.
+
afdb.de mail is handled by 10 mail.afdb.de.
[root@web1 /]# host -t a braunschweig-lions.de
+
[root@web1 /]# host -t a afdb.de
braunschweig-lions.de has address 212.68.65.193
+
host -t a afdb.de
 
</pre>
 
</pre>
  
Zeile 83: Zeile 117:
 
# rpm -qa|grep exim
 
# rpm -qa|grep exim
 
# rpm -qa|grep sendmail
 
# rpm -qa|grep sendmail
sendmail-8.13.4-2
+
sendmail-8.16.1-10.el9.x86_64
 
</pre>
 
</pre>
  
Zeile 96: Zeile 130:
 
</pre>
 
</pre>
  
==Download==
+
==daemontools==
 
 
Installationsverzeichnis anlegen und Pakete runterladen:
 
 
 
'''ACHTUNG:''' Immer nach den aktuellsten Downloadlinks auf [http://billslinuxqmail.sourceforge.net/toaster/?page=download http://billslinuxqmail.sourceforge.net/toaster/?page=download] schauen!
 
 
<pre>
 
<pre>
 
umask 0022
 
umask 0022
mkdir -p /var/src/tar
+
mkdir -p /usr/local/src
cd /var/src/tar
+
cd /usr/local/src
 +
mkdir /var/qmail
 +
</pre>
  
# daemontools
+
daemontools aus Github herunterladen
wget http://qmail.ixip.net/download/daemontools-0.76.tar.gz
+
<pre>
wget http://qmail.ixip.net/download/daemontools-0.76.errno.patch
+
SRC=/usr/local/src
 +
DAEMONTOOLS_VER=0.78.3
 +
cd $SRC
 +
wget https://github.com/sagredo-dev/daemontools/archive/refs/tags/v${DAEMONTOOLS_VER}.tar.gz
 +
tar xzf v${DAEMONTOOLS_VER}.tar.gz
 +
</pre>
  
# qmail
+
Install daemontools:
wget http://www.rickwidmer.com/software/netqmail-1.06.tar.gz
+
<pre>
wget http://www.rickwidmer.com/software/toaster-scripts-0.9.2.tar.gz
+
cd /var/qmail
wget http://www.rickwidmer.com/software/libdomainkeys-0.69.tar.gz
+
mkdir admin
wget http://www.rickwidmer.com/patches/libdomainkeys-0.69.diff
+
chmod 1755 admin
 +
cd admin
 +
cp -rp /usr/local/src/daemontools-0.78.3/admin/daemontools-0.78.3/ .  
 +
cd daemontools-0.78.3
 +
chown -R root:root .
 +
package/install
 +
</pre>
  
# ucspi-tcp
+
daemontools  installed
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
+
Add "clear" service, so that you can easily clear the readproctitle service errors line:
wget http://www.rickwidmer.com/patches/ucspi-tcp-64bit.patch
+
<pre>
 +
mkdir -p /var/qmail/supervise/clear
 +
touch /var/qmail/supervise/clear/down
  
# vpopmail
+
cat > /var/qmail/supervise/clear/run << __EOF__
wget http://downloads.sourceforge.net/project/vpopmail/vpopmail-stable/5.4.33/vpopmail-5.4.33.tar.gz
+
#!/bin/sh
wget http://www.rickwidmer.com/patches/qmail-toaster-0.9.2.patch.bz2
+
yes '' | head -4000 | tr '\n' .
wget http://www.rickwidmer.com/patches/submission-0.9.2.patch
+
__EOF__
# 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
+
chmod +x /var/qmail/supervise/clear/run
# Dovecot
+
</pre>
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
+
Prüfen, ob die Daemontools laufen
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
+
<pre>
wget http://www.rickwidmer.com/software/autorespond-2.0.4.tar.gz
+
ps ax|grep svs
wget http://www.rickwidmer.com/patches/autorespond-2.0.4-2.0.5.patch
+
1141953 ?        Ss    0:00 /bin/sh /usr/bin/svscanboot
 +
1141955 ?        S      0:00 svscan /service
 +
1143414 pts/0    S+    0:00 grep --color=auto svs
 +
</pre>
  
# ezmlm
+
<pre>
wget http://cr.yp.to/software/ezmlm-0.53.tar.gz
+
cat > /usr/lib/systemd/system/daemontools.service << __EOF__
wget http://www.rickwidmer.com/software/ezmlm-idx-0.443.tar.gz
+
[Unit]
 +
Description=Daemontools service supervision
 +
ConditionPathExists=/command/svscanboot
  
# qmailadmin
+
[Service]
wget https://downloads.sourceforge.net/project/qmailadmin/qmailadmin-devel/qmailadmin-1.2.16.tar.gz
+
ExecStart=/command/svscanboot
wget https://downloads.sourceforge.net/project/qmailadmin/qmailadmin-help/1.0.8/qmailadmin-help-1.0.8.tar.gz
+
Restart=always
  
# qmailmrtg
+
[Install]
wget http://www.rickwidmer.com/software/qmailmrtg7-4.2.tar.gz
+
WantedBy=multi-user.target
wget http://www.rickwidmer.com/patches/qmailmrtg7-4.2-cfg.patch
+
__EOF__
  
# ripmime
+
# daemontools für systemctl aktivieren
wget http://pldaniels.com/ripmime/ripmime-1.4.0.10.tar.gz
+
systemctl daemon-reload
wget http://www.rickwidmer.com/patches/ripmime-1.4.0.9-permissions.patch
+
systemctl enable daemontools.service
 +
systemctl start  daemontools.service
 +
</pre>
  
# simscan
+
==fehQlibs==
wget http://www.rickwidmer.com/software/simscan-1.4.0.tar.gz
+
fehQlibs are supplementary C libraries by Erwin Hoffmann. They are needed for ucspi-tcp6 and ucspi-ssl.
wget http://www.rickwidmer.com/patches/simscan-1.4.0-combined.4.patch
 
wget http://www.rickwidmer.com/software/update-simscan.c
 
  
cd ../
+
<pre>
tar -xzf tar/netqmail-1.06.tar.gz
+
FEQLIBS_VER=26
cd netqmail-1.06
+
cd /usr/local/src
 +
wget https://www.fehcom.de/ipnet/fehQlibs/fehQlibs-${FEQLIBS_VER}.tgz
 +
tar xzf fehQlibs-${FEQLIBS_VER}.tgz
 +
mv fehQlibs-${FEQLIBS_VER} ..
 +
cd ..
 +
chown -R root:root fehQlibs-${FEQLIBS_VER}
 +
cd fehQlibs-${FEQLIBS_VER}
 
</pre>
 
</pre>
  
==Software Installation==
+
Change the installation folder modifing the file '''conf-build''' as
 
+
<pre>
===daemontools===
+
LIBDIR=/usr/local/lib
 +
HDRDIR=/usr/local/include
 +
</pre>
 +
Compile and install:
  
 
<pre>
 
<pre>
rpm -Uvh  http://repo.openfusion.net/centos7-x86_64//daemontools-0.76-9.of.el7.x86_64.rp
+
make -C src
 
+
make -C src shared
mkdir /service
+
make -C src install
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
 
  
 +
cd ..
 +
ln -s fehQlibs-${FEQLIBS_VER} qlibs
 
</pre>
 
</pre>
 
+
Damit die qlibs beim Compilieren von ucspi-tcp6 gefunden werden, müssen diese in /etc/ld.so.conf.d/ bekannt gegeben werden.
Prüfen ob die daemontools laufen, als Beispiel:
 
 
<pre>
 
<pre>
# ps ax|grep svs
+
echo "/usr/local/qlibs" >> /etc/ld.so.conf.d/qlibs.conf
24648 ?        Ss    0:00 /bin/sh /command/svscanboot
+
ldconfig
24650 ?        S      0:00 svscan /service
 
5109 pts/0    S+    0:00 grep svs
 
 
</pre>
 
</pre>
  
===ucspi-tcp===
+
==ucspi-tcp6==
 +
ucspi-tcp6 is a fork of Bernsteins' ucspi-tcp 0.88 program, which includes, among the other things, ipv6 capabilities to the original ucspi-tcp. tcpserver and tcpclient are easy-to-use command-line tools for building TCP client-server applications.
  
 
<pre>
 
<pre>
cd /var/src/
+
TCP6_VER=1.13.02
tar -xzf tar/ucspi-tcp-0.88.tar.gz
+
cd /var/qmail/  
cd ucspi-tcp-0.88
+
wget https://www.fehcom.de/ipnet/ucspi-tcp6/ucspi-tcp6-${TCP6_VER}.tgz
patch -p1 < /var/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
+
tar xzf ucspi-tcp6-${TCP6_VER}.tgz
 +
cd net/ucspi-tcp6/ucspi-tcp6-${TCP6_VER}/
 +
./package/install
 +
/bin/rm /var/qmail/ucspi-tcp6-${TCP6_VER}.tgz
 +
</pre>
  
# NOTE: If you are on the x86_64 platform, you need to remove the
+
==ucspi-ssl==
# "-02" argument to gcc in conf-cc. See this for details
+
With sslserver we can have a secure connection on port 465 to receive our emails.
# http://marc.theaimsgroup.com/?l=qmail&m=111725518121864&w=2
 
  
make
+
You have already installed fehQlibs, which are supplementary C libraries needed for ucspi-ssl.
make setup check
+
<pre>
 +
UCSPISSL_VER=0.13.03
 +
cd /var/qmail
 +
wget -O /usr/local/src/ucspi-ssl-${UCSPISSL_VER}.tgz https://www.fehcom.de/ipnet/ucspi-ssl/ucspi-ssl-${UCSPISSL_VER}.tgz
 +
tar xzf /usr/local/src/ucspi-ssl-${UCSPISSL_VER}.tgz
 +
cd host/superscript.com/net/ucspi-ssl-${UCSPISSL_VER}
 +
./package/install
 
</pre>
 
</pre>
  
===qmail===
+
==qmail==
  
 +
User und Gruppen für QMail anlegen und anschließend netqmail samt aller Patches installieren.
 
<pre>
 
<pre>
mkdir /var/qmail
 
 
groupadd nofiles
 
groupadd nofiles
 
useradd -g nofiles -d /var/qmail/alias alias
 
useradd -g nofiles -d /var/qmail/alias alias
Zeile 236: Zeile 277:
 
useradd -g qmail -d /var/qmail qmails
 
useradd -g qmail -d /var/qmail qmails
  
cd /var/src
+
cd /usr/local/src
tar -xzf tar/toaster-scripts-0.9.2.tar.gz
+
git clone -b netqmail-1.06 https://github.com/sagredo-dev/qmail.git
cd netqmail-1.06
+
cd qmail
 +
make setup check
 +
</pre>
  
# NOTE: RedHat/Fedora users may need to link certain include files for the TLS patch.
+
Symbolischen Link für '''sendmail''' einrichten
# Issue the command below only if make fails:
+
<pre>
ln -s /usr/kerberos/include/com_err.h /usr/kerberos/include/krb5.h /usr/kerberos/include/profile.h /usr/include/
+
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
# as well as remove the sendmail link if it still exists:
+
</pre>
rm /usr/sbin/sendmail
 
 
 
make
 
make setup check
 
# NOTE: qmail will be patched AFTER vpopmail is installed
 
  
# turn on SPF checking
+
Pfad und Manpage Pfad für QMail anpassen
echo 3 > /var/qmail/control/spfbehavior
 
  
Optional SPF abschalten, da schon mal Probleme damit aufgetaucht sind!
+
<pre>
 +
cat > /etc/profile.d/qmail.sh << __EOF__
 +
PATH=$PATH:/var/qmail/bin
 +
export PATH
 +
MANPATH=$MANPATH:/var/qmail/man
 +
export MANPATH
 +
__EOF__
 +
</pre>
  
echo 0 > /var/qmail/control/spfbehavior
+
netqmail wird nach der Installation von VPopmail konfiguriert und installiert.
  
# turn on mfcheck
+
===Vpopmail===
echo 1 > /var/qmail/control/mfcheck
 
  
# E-Mail Adressen entsprechend anpassen!
+
Vpopmail provides an easy way to manage virtual email domains and non /etc/passwd email accounts on your mail servers.
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
+
===== User anlegen =====
  
# Den vollen Hostnamen entsprechend anpassen!
+
Ggf. existiert bereits ein User mit der uid 89, wenn ja entfernen
 +
<pre>
 +
userdel postfix
 +
</pre>
  
# Hostname ausgeben
+
<pre>
[root@web1 alias]# hostname
+
groupadd -g 89 vchkpw
web1.braunschweig-lions.de
+
useradd -u 89 -g vchkpw vpopmail
 
 
./config-fast web1.braunschweig-lions.de
 
 
</pre>
 
</pre>
  
qmail-man-pages Pfad in man.config hinzufügen:
 
 
<pre>
 
<pre>
vi /vi /etc/man.config
+
VPOPMAIL_VERSION=5.6.3
 +
cd /usr/local/src
 +
wget https://github.com/sagredo-dev/vpopmail/archive/refs/tags/v${VPOPMAIL_VERSION}.tar.gz
 +
tar xzf v${VPOPMAIL_VERSION}.tar.gz
 +
cd vpopmail-${VPOPMAIL_VERSION}
 +
chown -R root:root .
  
...
+
./configure \
MANPATH_MAP    /opt/sbin              /opt/man
+
        --enable-qmaildir=/var/qmail/ \
MANPATH_MAP    /var/qmail/bin         /var/qmail/man
+
        --enable-qmail-newu=/var/qmail/bin/qmail-newu \
 +
        --enable-qmail-inject=/var/qmail/bin/qmail-inject \
 +
        --enable-qmail-newmrh=/var/qmail/bin/qmail-newmrh \
 +
        --disable-roaming-users \
 +
        --enable-auth-module=mysql \
 +
        --enable-incdir=/usr/include/mysql \
 +
        --enable-libdir=/usr/lib64 \
 +
        --enable-logging=p \
 +
        --disable-clear-passwd \
 +
        --enable-auth-logging \
 +
        --enable-sql-logging \
 +
        --disable-passwd \
 +
        --enable-qmail-ext \
 +
        --enable-learn-passwords \
 +
        --enable-mysql-limits \
 +
        --enable-valias \
 +
        --enable-sql-aliasdomains \
 +
        --enable-defaultdelivery \
 +
        --disable-min-pwd-length
 +
 
 +
make install-strip
 
</pre>
 
</pre>
  
Qmail konfigurieren:
+
Cron-Job für POP after SMTP einrichten:
 
<pre>
 
<pre>
cd /var/src
+
cat > /etc/cron.d/clearopensmtp << __EOF__
cp toaster-scripts-0.9.2/rc /var/qmail/rc
+
# vpopmail: clear open-smtp
chmod 755 /var/qmail/rc
+
40 * * * * root /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
mkdir /var/log/qmail
+
__EOF__
echo ./Maildir/ >/var/qmail/control/defaultdelivery
+
</pre>
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:
+
==== vusaged ====
mkdir -p /var/qmail/supervise/qmail-send/log
+
vusaged looks up every vpopmail user and tracks how much storage space they’re using. It requires libev.
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
+
===== libev =====
# instead of pop3ds.run below.
+
libev installieren
# Type "stunnel -V" (v. 3) or "stunnel -version" (v. 4) to see what version is installed.
+
<pre>
# You will also need to copy over stunnel.conf like so:
+
cd /usr/local/src
#
+
wget  http://dist.schmorp.de/libev/libev-4.33.tar.gz
# cp /var/src/toaster-scripts-0.9.2/stunnel.conf /var/qmail/supervise/qmail-pop3ds/
+
tar xzvf libev-4.33.tar.gz
 +
cd libev-4.33
 +
chown -R root.root .
 +
./configure
 +
make
 +
make install
 +
ldconfig
 +
</pre>
  
cp /var/src/toaster-scripts-0.9.2/pop3ds.run /var/qmail/supervise/qmail-pop3ds/run
+
vusaged installieren und konfigurieren
  
cp /var/src/toaster-scripts-0.9.2/pop3ds.log.run /var/qmail/supervise/qmail-pop3ds/log/run
+
<pre>
echo 20 > /var/qmail/control/concurrencyincoming
+
VPOPMAILDIR=/home/vpopmail
chmod 644 /var/qmail/control/concurrencyincoming
+
cd /usr/local/src/vpopmail-${VPOPMAIL_VERSION}/vusaged
chmod 755 /var/qmail/supervise/qmail-send/run
+
CFLAGS=-I/usr/local/include/libev LIBS=`head -1 $VPOPMAILDIR/etc/lib_deps` ./configure --with-vpopmail=$VPOPMAILDIR
chmod 755 /var/qmail/supervise/qmail-send/log/run
+
make
chmod 755 /var/qmail/supervise/qmail-smtpd/run
+
cp -f vusaged ~vpopmail/bin
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
+
cp -f etc/vusaged.conf ~vpopmail/etc
chmod 755 /var/qmail/supervise/qmail-pop3d/run
+
</pre>
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
 
  
 +
==== Konfiguration ====
  
# 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
+
weiter gehts mit vpopmail
sleep 5
+
<pre>
 +
echo '127.:allow,RELAYCLIENT=""' > ~vpopmail/etc/tcp.smtp
 +
(cd ~vpopmail/etc ; tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp)
 +
</pre>
  
[root@web1 src]# qmailctl stat
+
<pre>
/service/qmail-send: up (pid 8592) 103 seconds
+
echo "| /home/vpopmail/bin/vdelivermail '' delete" > /var/qmail//control/defaultdelivery
/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
 
 
</pre>
 
</pre>
  
====Domainkeys installieren====
+
==== MySQL/MariaDB ====
 +
 
 +
===== Generelles Setup =====
 
<pre>
 
<pre>
cd /var/src/tar
+
systemctl start mariadb.service
wget https://notes.sagredo.eu/files/qmail/tar/libdomainkeys-0.69.tar.gz
+
systemctl enable mariadb.service
wget https://notes.sagredo.eu/files/qmail/patches/libdomainkeys/libdomainkeys-openssl-1.1.patch
+
mariadb-secure-installation
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
 
 
</pre>
 
</pre>
oder
+
 
 +
===== Connection einrichten =====
 +
 
 
<pre>
 
<pre>
rpm -Uvh http://repo.whitehorsetc.com/7/current/x86_64/libdomainkeys-devel-0.69-1.qt.el7.x86_64.rpm
+
mysql -h localhost -u root -p
 +
 
 +
CREATE USER 'vpopmail'@'localhost' IDENTIFIED BY 'VPop2024';
 +
 
 +
GRANT USAGE ON * . * TO 'vpopmail'@'localhost' IDENTIFIED BY 'VPop2024' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
 +
CREATE DATABASE IF NOT EXISTS vpopmail;
 +
GRANT ALL PRIVILEGES ON `vpopmail` . * TO 'vpopmail'@'localhost';
 +
exit
 +
 
 +
echo "localhost|0|vpopmail|VPop2024|vpopmail" > ~vpopmail/etc/vpopmail.mysql
 
</pre>
 
</pre>
  
 +
===== Virtual domain and virtual users erzeugen =====
  
====Installing libsrs2====
 
 
<pre>
 
<pre>
cd  /var/src/tar
+
cd ~vpopmail/bin/
 +
</pre>
 +
 
 +
To add/delete a virtual domain
 +
 
 +
<pre>
 +
./vadddomain afdb.de [./vdeldomain afdb.de]
 +
</pre>
 +
 
 +
To add/delete a virtual user
 +
 
 +
<pre>
 +
./vadduser postmaster@afdb.de [./vdeluser postmaster@afdb.de]
 +
</pre>
 +
 
 +
To view information about user email accounts:
 +
<pre>
 +
./vuserinfo postmaster@afdb.de
 +
name:  postmaster
 +
passwd: $6$gGYFkrBW$veJzkVDhKc0x8gVolp.jj8LHiFlw2nwYfb7Rw9lz0EKe.oPKzg5l0r6W.UY4y5nnE2Kz9QX0pNUqqJ1R5wizx.
 +
clear passwd:
 +
comment/gecos: Postmaster
 +
uid:    0
 +
gid:    0
 +
flags: 0
 +
gecos: Postmaster
 +
limits: No user limits set.
 +
dir:      /home/vpopmail/domains/afdb.de/postmaster
 +
quota:    NOQUOTA
 +
usage:    NOQUOTA
 +
last auth: Sun Oct 20 11:57:32 2024
 +
last auth ip: 127.0.0.1
 +
 
 +
</pre>
 +
 
 +
=== Upgrade Qmail ===
 +
 
 +
==== libsrs2 ====
 +
This library is a prerequisite of the SRS patch, which is part of my package. You must install this, otherwise the compilation will break.
 +
 
 +
<pre>
 +
cd /usr/local/src
 
wget http://www.libsrs2.org/srs/libsrs2-1.0.18.tar.gz
 
wget http://www.libsrs2.org/srs/libsrs2-1.0.18.tar.gz
cd ..
+
tar xzf libsrs2-1.0.18.tar.gz
tar xzf tar/libsrs2-1.0.18.tar.gz
 
 
cd libsrs2-1.0.18
 
cd libsrs2-1.0.18
 
./configure
 
./configure
 
make
 
make
 
make install
 
make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
 
 
ldconfig
 
ldconfig
 
cd ../
 
cd ../
 +
</pre>
  
 
+
Füge das Verzeichnis /usr/local/lib zum 'LD_LIBRARY_PATH' hinzu
 +
<pre>
 +
echo "/usr/local/lib" >> /etc/ld.so.conf.d/usr-local-lib.x86_64.conf
 +
ldconfig
 
</pre>
 
</pre>
  
prüfen
+
Prüfen, ob libsrs2 Bibliotheken gefunden werden
 
<pre>
 
<pre>
 
ldconfig -p|grep libsrs2
 
ldconfig -p|grep libsrs2
Zeile 398: Zeile 491:
 
</pre>
 
</pre>
  
====SMTP/TLS Korrektur====
+
==== Sourcen herunterladen ====
Da SMTP/TLS normalerweise auf Port 465 (beim Standard Toaster auf 25) läuft, passen wir das an.
 
 
 
 
<pre>
 
<pre>
mkdir -p /var/qmail/supervise/qmail-smtpds/log
+
cd /usr/local/src
cp /var/src/toaster-scripts-0.9.2/smtpd.run /var/qmail/supervise/qmail-smtpds/run
+
QMAIL_VERSION=2024.06.08
cp /var/src/toaster-scripts-0.9.2/smtpd.log.run /var/qmail/supervise/qmail-smtpds/log/run
+
wget https://github.com/sagredo-dev/qmail/archive/refs/tags/v${QMAIL_VERSION}.tar.gz
chmod 755 /var/qmail/supervise/qmail-smtpds/run
+
tar xzf v${QMAIL_VERSION}.tar.gz
chmod 755 /var/qmail/supervise/qmail-smtpds/log/run
+
cd qmail-${QMAIL_VERSION}
 
</pre>
 
</pre>
  
Anschließend in '''/var/qmail/supervise/qmail-smtpds/run''' die Zeile
+
==== Installieren ====
 
<pre>
 
<pre>
    -u "$QMAILDUID" -g "$NOFILESGID" 0 smtps \
+
make setup check
 
 
durch
 
    -u "$QMAILDUID" -g "$NOFILESGID" 0 465 \
 
 
</pre>
 
</pre>
ersetzen
 
  
In '''/var/qmail/supervise/qmail-smtps/log/run''' die Zeile
+
==== Zertifikate für SSL erzeugen ====
 
<pre>
 
<pre>
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t n20 s4999999 /var/log/qmail/smtpd
+
make cert
 +
# Daten entsprechend eintragen
 +
make tmprsadh
 +
# Hinweis: Dieser Vorgang dauert einige Zeit.
 +
chown vpopmail.vchkpw /var/qmail/control/*.pem
 +
# Cron Eintrag erzeugen
 +
echo "03 05 * * * /var/qmail/bin/update_tmprsadh > /dev/null 2>&1" >> /etc/cron.d/update_tmprsadh
 +
</pre>
  
durch
+
=== Konfiguration ===
  
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t n20 s4999999 /var/log/qmail/smtpds
+
==== Control Dateien anlegen====
 +
<pre>
 +
echo 3 > /var/qmail/control/spfbehavior
 +
echo "| /home/vpopmail/bin/vdelivermail '' delete" > /var/qmail/control/defaultdelivery
 +
echo 200 > /var/qmail/control/concurrencyincoming
 +
echo postmaster > /var/qmail/control/bouncefrom
 +
echo 20000000 > /var/qmail/control/databytes
 +
echo afdb.de > /var/qmail/control/doublebouncehost
 +
echo postmaster > /var/qmail/control/doublebounceto
 +
echo 272800 > /var/qmail/control/queuelifetime
 +
echo 30000000 > /var/qmail/control/softlimit
 +
echo 100 > /var/qmail/control/maxrcpt
 +
echo 2 > /var/qmail/control/brtlimit
 +
echo 10000000 > /var/qmail/control/simsizelimit
 
</pre>
 
</pre>
  
und in '''/usr/bin/qmailctl''' die Zeile
+
==== Qmail Schnellkonfiguration ausführen ====
 
<pre>
 
<pre>
svclist="qmail-send qmail-smtpd"
+
cd /usr/local/src/qmail-2024.06.08
 
+
./config-fast mail1.afdb.de
durch
 
svclist="qmail-send qmail-smtpd qmail-smtpds"
 
 
 
 
</pre>
 
</pre>
ersetzen.
 
  
Anschließend
+
==== Alias anlegen====
 
<pre>
 
<pre>
ln -s /var/qmail/supervise/qmail-smtpds /service
+
cd /var/qmail/alias
 +
echo "postmaster@afdb.de" > .qmail-postmaster
 +
ln -s .qmail-postmaster .qmail-mailer-daemon
 +
ln -s .qmail-postmaster .qmail-root
 +
chmod 644 .qmail*
 
</pre>
 
</pre>
ausführen.
 
  
=====TLS Cipher anpassen=====
+
==== erste Domain anlegen====
 +
<code>
 +
/home/vpopmail/bin/vadddomain afdb.de
 +
</code>
  
Alte und nicht benötigter Cipher ausschalten, dazu folgende Zeile einfügen
+
==== Verzeichnis für die Logdateien anlegen ====
 
<pre>
 
<pre>
vi /var/qmail/control/tlsserverciphers
+
mkdir -p /var/log/qmail
ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM:-SSLv2:-SSLv3
+
 
 +
cd /var/log/qmail
 +
chown -R qmaill.nofiles .
 +
chgrp root .
 +
chmod -R og-wrx .
 +
chmod g+rx .
 
</pre>
 
</pre>
  
===Vpopmail===
+
==== Die supervise Skripte anlegen ====  
 
 
User anlegen
 
 
 
Ggf. existiert bereits ein User mit der uid 89, wenn ja entfernen
 
 
<pre>
 
<pre>
userdel postfix
+
cd /var/qmail
 +
wget https://notes.sagredo.eu/files/qmail/supervise.tar.gz
 +
tar xzf supervise.tar.gz
 +
chown -R root:root rc supervise
 +
rm supervise.tar.gz
 
</pre>
 
</pre>
  
 
<pre>
 
<pre>
groupadd -g 89 vchkpw
+
ln -s /usr/bin/setuidgid /usr/local/bin/setuidgid
useradd -u 89 -g vchkpw vpopmail
+
ln -s /usr/bin/multilog /usr/local/bin/multilog
 +
ln -s /usr/bin/softlimit /usr/local/bin/softlimit
 +
cd /service
 +
ln -s /var/qmail/supervise/qmail-smtpd      /service
 +
ln -s /var/qmail/supervise/qmail-smtpsd    /service
 +
ln -s /var/qmail/supervise/qmail-submission /service
 +
ln -s /var/qmail/supervise/qmail-send      /service
 +
ln -s /var/qmail/supervise/vpopmaild        /service
 +
ln -s /var/qmail/supervise/vusaged          /service
 +
ln -s /var/qmail/supervise/clear                /service
 +
</pre>
  
cd /var/src
+
==== Logdateien täglich rotieren und Zeitstempel lesbar anpassen (convert-multilog) ====
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
+
Das Skript '''convert-multilog''' sucht in den Ordnern '''/service/*/log/main''' nach den Qmail-typischen Logdateien (@4*) und konvertiert die Zeitstempel in den Dateien in lesbare Form und legt im Ordner '''/var/log/qmail/backup''' täglich jeweils eine Datei vom Namen ''' /var/log/{service}.{date}''' an.
# CFLAGS compiler environment by prefacing the next command with
 
# "CFLAGS=-fPIC", like so: "CFLAGS=-fPIC ./configure ..."
 
</pre>
 
  
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.
+
===== Einstellungen =====
 
<pre>
 
<pre>
CFLAGS=-fPIC ./configure --enable-logging=v --enable-roaming-users --enable-relay-clear-minutes=15 --enable-spamassassin
+
mkdir -p /var/log/qmail/backup
make
+
wget -O  /usr/local/bin/convert-multilog https://notes.sagredo.eu/files/qmail/convert-multilog
make install-strip
+
chmod +x /usr/local/bin/convert-multilog
  
# NOTE: If you are on the x86_64 platform, you need to edit
+
ln -s /var/log/qmail/send /service/qmail-send/log/main
# cdb/compile to add the -fPIC argument to cc. It should look
+
ln -s /var/log/qmail/smtpd /service/qmail-smtpd/log/main
# something like this: 'exec gcc -fPIC -02 -c ${1+"$@"}'
+
ln -s /var/log/qmail/smtpsd /service/qmail-smtpsd/log/main
# After editing compile, do "make && make install-strip" again.
+
ln -s /var/log/qmail/submission /service/qmail-submission/log/main
# see this post for more details
 
# http://forum.qmailrocks.org/showthread.php?p=12293
 
 
</pre>
 
</pre>
  
Cron-Job für POP after SMTP einrichten:
+
===== Cronjob =====
Mit <code>vi /etc/crontab</code> folgendes in <code>/etc/crontab</code> einfügen:
+
und den Cronjob anlegen
 +
 
 
<pre>
 
<pre>
# vpopmail: clear open-smtp
+
cat > /etc/cron.d/qmail-logging << __EOF__
40 * * * * root /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
+
59 2 * * * /usr/bin/convert-multilog 1> /dev/null
 +
0 0 * * * /usr/local/bin/svc -a /service/qmail-submission/log
 +
0 0 * * * /usr/local/bin/svc -a /service/qmail-smtpd/log
 +
0 0 * * * /usr/local/bin/svc -a /service/qmail-smtpsd/log
 +
0 0 * * * /usr/local/bin/svc -a /service/qmail-send/log
 +
0 0 * * * /usr/local/bin/svc -a /service/vpopmaild/log
 +
0 0 * * * /usr/local/bin/svc -a /service/vusaged/log
 +
__EOF__
 
</pre>
 
</pre>
  
weiter gehts mit vpopmail
+
==== qmailctl  ====
 +
 
 +
Das modifizierte '''qmailctl''' Skript herunterladen und installieren.
 
<pre>
 
<pre>
echo '127.:allow,RELAYCLIENT=""' > ~vpopmail/etc/tcp.smtp
+
wget -O /usr/bin/qmailctl https://notes.sagredo.eu/files/qmail/qmailctl
(cd ~vpopmail/etc ; tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp)
+
chmod +x /usr/bin/qmailctl
 +
</pre>
 +
 
 +
Dieses Skript beinhalten folgendes
  
#  install the vpopmail start script
+
* Start/Stops der Dienste
cp ../toaster-scripts-0.9.2/vpopmailctl /var/qmail/bin/vpopmailctl
+
* Aufruf der '''tcprules'''. Damit werden die beiden Dateien tcp.smtp.cdb and tcp.submission.cdb neu geladen
 +
* Statusanzeige für die einzelen Dienste und der Queue
 +
* Anzeige des Status weitere benötigter Dienste
 +
* Informationen zum Antivirus-Dienst clamav und der entsprechenden Virusdatenbank
  
chmod 755 /var/qmail/bin/vpopmailctl
 
ln -s /var/qmail/bin/vpopmailctl /usr/bin
 
  
# add qmail toaster patch now that vpopmail is installed
+
Eine entsprechen Ausgabe sieht in etwa wie folgt aus:
cd /var/src/netqmail-1.06
+
<pre>
bunzip2 -c ../tar/qmail-toaster-0.9.2.patch.bz2 | patch -p0
+
qmailctl stat
make clean
+
qmail-smtpd:          [ up ] (pid 435784) 1 seconds
make
+
qmail-smtpd/log:      [ up ] (pid 426723)  0 day(s), 00:07:17
qmailctl stop
+
qmail-smtpsd:          [ up ] (pid 435776) 1 seconds
make setup check
+
qmail-smtpsd/log:      [ up ] (pid 426722)  0 day(s), 00:07:17
 +
qmail-submission:      [ up ] (pid 435782) 1 seconds
 +
qmail-submission/log:  [ up ] (pid 426724)  0 day(s), 00:07:17
 +
qmail-send:            [ up ] (pid 426763)  0 day(s), 00:07:13
 +
qmail-send/log:        [ up ] (pid 426719)  0 day(s), 00:07:17
 +
vpopmaild:            [ up ] (pid 435783) 1 seconds
 +
vpopmaild/log:        [ up ] (pid 426721)  0 day(s), 00:07:17
 +
vusaged:              [ up ] (pid 399660)  0 day(s), 00:25:56
 +
vusaged/log:          [ up ] (pid 426720)  0 day(s), 00:07:17
  
# NOTE: the following command needs to be run after any future
+
dovecot status:       [ down ]
# re-installs of qmail as it will chown this directory back to qmail
+
clamd status:          [ down ]
 +
freshclam status:      [ down ]
 +
spamd status:          [ down ]
 +
httpd status:          [ down ]
 +
solr status:          [ down ]
 +
mariadb status:        [ up ]
 +
fail2ban status:      [ down ]
 +
Total Domains: 2
  
chown -R vpopmail:vchkpw /var/qmail/spam
+
messages in queue: 0
 +
messages in queue but not yet preprocessed: 0
 
</pre>
 
</pre>
  
Zertifikate für SSL erzeugen
+
==== svtools ====
 
<pre>
 
<pre>
make cert
+
cd /usr/local/src/
# Daten entsprechend eintragen
+
wget https://github.com/kayahr/svtools/archive/master.zip
make tmprsadh
+
unzip master.zip
# Hinweis: Dieser Vorgang dauert einige Zeit.
+
cd svtools-master
 +
make
 +
make install
 +
mkdir /etc/sv /var/log/sv
 +
chown root.root /etc/sv /var/log/sv
 +
cd /usr/local/bin
 +
rm mlcat
 +
wget https://notes.sagredo.eu/files/qmail/mlcat
 +
chmod +x mlcat
 
</pre>
 
</pre>
  
Mit <code>vi /etc/crontab</code> in <code>/etc/crontab</code> eine Eintragung machen, damit die Keys jede Nacht aktualisiert werden. Nach der letzten Zeile muss ein Zeilenumbruch folgen:
+
==== tcp.smtp ====
 +
 
 +
Die Datei '''/home/vpopmail/etc/tcp.smtp''' anpassen
 
<pre>
 
<pre>
# Added by Dirk for qmail, 2006-03-24
+
vim /home/vpopmail/etc/tcp.smtp
01 01 * * * /var/qmail/bin/update_tmprsadh > /dev/null 2>&1
 
  
 +
127.:allow,RELAYCLIENT=""
 +
:allow,CHKUSER_WRONGRCPTLIMIT="3"
 
</pre>
 
</pre>
  
qmail starten, vpopmail mit daemontools starten und überprüfen ob alles rennt:
+
anschließend die Datei '''/home/vpopmail/etc/tcp.submission''' anpassen (chkuser lässt für eine Client IP nur 3 Fehlversuche bei der Anmeldung zu).
 +
 
 
<pre>
 
<pre>
qmailctl start
+
echo ":allow,CHKUSER_WRONGRCPTLIMIT=\"3\"" > /home/vpopmail/etc/tcp.submission
 +
</pre>
  
#allow daemontools to start vpopmail
+
<pre>
ln -s /var/qmail/supervise/qmail-pop3d /var/qmail/supervise/qmail-pop3ds /service
+
ln -s /home/vpopmail/etc/tcp.smtp /var/qmail/control/tcp.smtp
 +
ln -s /home/vpopmail/etc/tcp.submission /var/qmail/control/tcp.submission
 +
ln -s /home/vpopmail/etc/tcp.smtp.cdb /var/qmail/control/tcp.smtp.cdb
 +
</pre>
  
sleep 5
+
Anschließend '''tcp.rules''' neu bauen.
 +
<pre>
 +
root@h2859558 (FF)[/etc/logrotate.d] # qmailctl cdb
 +
Updated tcp.smtp.cdb.
 +
Updated tcp.submission.cdb.
 +
Ran clearopensmtp
 +
</pre>
  
vpopmailctl stat
+
===Testing qmail, SMTP and auth===
# 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
+
==== Swaks ====
# 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
 
</pre>
 
  
==== Nachträgliches ändern des Zertifikates für den Mailversand (SMTP) ====
+
swaks ist ein SMTP test Tool, mit dem man einfach alle folgenden Telnet Tests auf einmal ausführen kann.
  
Um ein Zertifikat zu ändern oder zu erneuern kann folgendes ausgeführt werden:
+
<pre>
 +
cd /usr/local/bin
 +
wget http://www.jetmore.org/john/code/swaks/latest/swaks
 +
chown root:root swaks
 +
chmod +x swaks
 +
</pre>
  
 
<pre>
 
<pre>
cd /var/qmail/control
+
swaks \
mv servercert.pem servercert_old.pem
+
        --to someone@somewhere.net \
rm clientcert.pem
+
        --from postmaster@afdb.de \
 
+
        --server localhost \
cd /var/src/netqmail-1.06-mit-greylisting
+
        --port 587 \
make cert
+
        --ehlo test \
 
+
        -tls \
# Abfragen beantworten
+
        --auth login \
 +
        --auth-user postmaster@afdb.de \
 +
        --auth-password [PASSWORD]
 
</pre>
 
</pre>
  
Das Zertifikat ist im Anschluss sofort gültig, der Mailserver muss nicht neu gestartet werden.
+
==== Überprüfung mit Bordmittel ====
 
 
====Quota Support einbauen====
 
  
 +
Einmal stoppen und starten der Daemontools, um zu schauen, ob noch Fehler vorhanden sind ( readproctitle service errors: .....)
 
<pre>
 
<pre>
cd /var/src/tar/vpopmail-5.4.33/vusaged
+
systemctl stop daemontools
./configure
+
systemctl start daemontools
 
</pre>
 
</pre>
  
 
<pre>
 
<pre>
make
+
ps axfww
cp -f vusaged /home/vpopmail/bin
+
1655990 ?        Ss    0:00 /bin/sh /usr/bin/svscanboot
cp -f etc/vusaged.conf /home/vpopmail/etc
+
1655992 ?        S      0:00  \_ svscan /service
 +
1655994 ?        S      0:00  |  \_ supervise qmail-submission
 +
1656007 ?        S      0:00  |  |  \_ /usr/local/bin/tcpserver -v -R -l mail.afdb.de -x /home/vpopmail/etc/tcp.submission.cdb -c 20 -u 89 -g 89 0 587 /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true
 +
1655995 ?        S      0:00  |  \_ supervise log
 +
1656010 ?        S      0:00  |  |  \_ /usr/bin/multilog t s16000000 n200 /var/log/qmail/submission
 +
1655996 ?        S      0:00  |  \_ supervise qmail-send
 +
1656004 ?        S      0:00  |  |  \_ qmail-send
 +
1656018 ?        S      0:00  |  |      \_ qmail-lspawn | /home/vpopmail/bin/vdelivermail '' delete
 +
1656019 ?        S      0:00  |  |      \_ qmail-rspawn
 +
1656020 ?        S      0:00  |  |      \_ qmail-clean
 +
1656021 ?        S      0:00  |  |      \_ qmail-todo
 +
1656022 ?        S      0:00  |  |      \_ qmail-clean
 +
1655997 ?        S      0:00  |  \_ supervise log
 +
1656008 ?        S      0:00  |  |  \_ /usr/bin/multilog t s16000000 n200 /var/log/qmail/send
 +
1655998 ?        S      0:00  |  \_ supervise qmail-smtpd
 +
1656005 ?        S      0:00  |  |  \_ /usr/local/bin/tcpserver -v -R -l mail.afdb.de -x /home/vpopmail/etc/tcp.smtp.cdb -c 20 -u 89 -g 89 0 25 /var/qmail/bin/qmail-smtpd
 +
1655999 ?        S      0:00  |  \_ supervise log
 +
1656003 ?        S      0:00  |  |  \_ /usr/bin/multilog t s16000000 n200 /var/log/qmail/smtpd
 +
1656000 ?        S      0:00  |  \_ supervise clear
 +
1656001 ?        S      0:00  |  \_ supervise vpopmaild
 +
1656009 ?        S      0:00  |  |  \_ /usr/local/bin/tcpserver -v -H -R -l 0 -u 0 -g 0 0 89 /home/vpopmail/bin/vpopmaild
 +
1656002 ?        S      0:00  |  \_ supervise log
 +
1656006 ?        S      0:00  |      \_ /usr/bin/multilog t /var/log/qmail/vpopmaild
 +
1655993 ?        S      0:00  \_ readproctitle service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................
 
</pre>
 
</pre>
  
===ZWISCHENDURCH: Security-Check auf Offens-Relay von externem Rechner===
+
==== Überprüfung mit qmailctl ====
 +
<pre>
 +
qmailctl stat
 +
qmail-smtpd:          [ up ] (pid 1656005)  0 day(s), 00:03:50
 +
qmail-smtpd/log:       [ up ] (pid 1656003)  0 day(s), 00:03:50
 +
qmail-submission:      [ up ] (pid 1656007)  0 day(s), 00:03:50
 +
qmail-submission/log:  [ up ] (pid 1656010)  0 day(s), 00:03:50
 +
qmail-send:            [ up ] (pid 1656004)  0 day(s), 00:03:50
 +
qmail-send/log:        [ up ] (pid 1656008)  0 day(s), 00:03:50
 +
vpopmaild:            [ up ] (pid 1656009)  0 day(s), 00:03:50
 +
vpopmaild/log:        [ up ] (pid 1656006)  0 day(s), 00:03:50
  
 +
dovecot status:        [ down ]
 +
clamd status:          [ down ]
 +
freshclam status:      [ down ]
 +
spamd status:          [ down ]
 +
vusaged status:        [ down ]
 +
httpd status:          [ up ]
 +
mysql status:          [ up ]
 +
fail2ban status:      [ up ]
  
----
+
messages in queue: 6
'''HINWEIS''': Sollte der Server die SMTP-Verbindung sofort wieder beenden, mal in <code>/var/log/qmail/smtpd/current</code> schauen. Findet sich dort folgende Fehlermeldung. Aufgetreten auf FC4/x86_64:
+
messages in queue but not yet preprocessed: 0
<pre>
 
/var/qmail/bin/qmail-smtpd: error while loading shared libraries: libc.so.6:
 
failed to map segment from shared object: Cannot allocate memory
 
</pre>
 
 
 
und/oder
 
<pre>
 
/var/qmail/bin/qmail-smtpd: error while loading shared libraries: libkrb5support.so.0:
 
failed to map segment from shared object: Cannot allocate memory
 
 
</pre>
 
</pre>
  
dann muss das ''softlimit'' in <code>/var/qmail/supervise/qmail-smtpd/run</code> erhöht werden, z.B. von ''8000000'' auf ''80000000''.
+
==== Verschiedende Checks von externem Rechner ====
 
 
----
 
  
 +
'''1. Check''': Relaying
  
 
Mit ''telnet'' wird geprüft ob man den Server als offenes Relay benutzen kann. Kommen die 553-Fehlermeldungen ist alles OK.
 
Mit ''telnet'' wird geprüft ob man den Server als offenes Relay benutzen kann. Kommen die 553-Fehlermeldungen ist alles OK.
 
<pre>
 
<pre>
[dirk@wizard ~]$ telnet web1.braunschweig-lions.de 25
+
[ktsadmin@truhe ~]$ telnet mail1.afdb.de 25
Trying 212.68.65.193...
+
Trying 85.214.138.131...
Connected to web1.braunschweig-lions.de (212.68.65.193).
+
Connected to mail.afdb.de.
 
Escape character is '^]'.
 
Escape character is '^]'.
220 web1.braunschweig-lions.de ESMTP
+
220 mail.afdb.de ESMTP
helo dirk
+
helo karl
250 web1.braunschweig-lions.de
+
250 mail.afdb.de
mail from:dirk@schlicker.org
+
mail from:karl@schlicker.org
 
250 ok
 
250 ok
rcpt to:schlueter@link-innovation.de
+
rcpt to:info@schlicker.org
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.5.3 - chkuser)
+
553 5.7.1 sorry, that domain isn't in my list of allowed rcpthosts (chkuser)
 
quit
 
quit
221 web1.braunschweig-lions.de
+
221 mail.afdb.de
 
Connection closed by foreign host.
 
Connection closed by foreign host.
 
</pre>
 
</pre>
  
2. Check
+
'''2. Check''' : Relaying
 
<pre>
 
<pre>
[dirk@wizard ~]$ telnet web1.braunschweig-lions.de 25
+
[ktsadmin@truhe ~]$ telnet mail.afdb.de 25
Trying 212.68.65.193...
+
Trying 85.214.138.131...
Connected to web1.braunschweig-lions.de (212.68.65.193).
+
Connected to mail.afdb.de.
 
Escape character is '^]'.
 
Escape character is '^]'.
220 web1.braunschweig-lions.de ESMTP
+
220 mail.afdb.de ESMTP
helo dirk
+
helo karl
250 web1.braunschweig-lions.de
+
250 mail.afdb.de
mail from:postmaster@braunschweig-lions.de
+
mail from:karl@schlicker.org
 
250 ok
 
250 ok
rcpt to:schlueter@link-innovation.de
+
rcpt to:info@schlicker.org
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.5.3 - chkuser)
+
553 5.7.1 sorry, that domain isn't in my list of allowed rcpthosts (chkuser)
 
quit
 
quit
221 web1.braunschweig-lions.de
+
221 mail.afdb.de
 
Connection closed by foreign host.
 
Connection closed by foreign host.
 
</pre>
 
</pre>
  
===IMAP===
+
'''3. Check''': vpopmail auth
====Courier-IMAP====
+
<pre>
 +
[ktsadmin@truhe ~]$ telnet mail.afdb.de 89
 +
Trying 85.214.138.131...
 +
Connected to mail.afdb.de.
 +
Escape character is '^]'.
 +
+OK
 +
login postmaster@afdb.de PASSWORD
 +
+OK+
 +
vpopmail_dir /home/vpopmail
 +
domain_dir /home/vpopmail/domains/afdb.de
 +
uid 89
 +
gid 89
 +
name postmaster
 +
comment Postmaster
 +
quota NOQUOTA
 +
user_dir /home/vpopmail/domains/afdb.de/postmaster
 +
encrypted_password $1$vNEhZgIz$rL7zT3TcSpIsXhVOeky6g.
 +
clear_text_password PASSWORD
 +
no_password_change 0
 +
no_pop 0
 +
no_webmail 0
 +
no_imap 0
 +
bounce_mail 0
 +
no_relay 0
 +
no_dialup 0
 +
user_flag_0 0
 +
user_flag_1 0
 +
user_flag_2 0
 +
user_flag_3 0
 +
no_smtp 0
 +
domain_admin_privileges 1
 +
override_domain_limits 0
 +
no_spamassassin 0
 +
delete_spam 0
 +
no_maildrop 0
 +
system_admin_privileges 0
 +
.
 +
quit
 +
+OK
 +
Connection closed by foreign host.
 +
</pre>
  
Courier's Auth Library:
+
'''4. Check''': No mailbox test
 
<pre>
 
<pre>
cd /var/src
+
[ktsadmin@truhe ~]$ telnet mail.afdb.de 25
tar -xjf tar/courier-authlib-0.59.1.tar.bz2
+
Trying 85.214.138.131...
cd courier-authlib-0.59.1
+
Connected to mail.afdb.de.
patch -p0 < ../tar/vpopmail_courier_cram-1.diff
+
Escape character is '^]'.
./configure --with-redhat
+
220 mail.afdb.de ESMTP
# NOTE: RedHat/Fedora users need to add "--with-redhat"
+
mail from:info@schlicker.org
 +
250 ok
 +
rcpt to:nobody@afdb.de
 +
550 5.1.1 sorry, no mailbox here by that name (chkuser)
 +
quit
 +
221 mail.afdb.de
 +
Connection closed by foreign host.
 +
</pre>
  
 +
=== autorespond ===
 +
<pre>
 +
cd /usr/local/src
 +
AR_VERSION=2.0.7
 +
wget https://github.com/sagredo-dev/autorespond/archive/refs/tags/v${AR_VERSION}.tar.gz
 +
tar xzf v${AR_VERSION}.tar.gz
 +
cd autorespond-${AR_VERSION}
 +
chown -R root:root .
 
make
 
make
make install-strip
+
make install
make install-configure
+
/bin/rm /usr/local/src/v${AR_VERSION}.tar.gz
 
 
cp courier-authlib.sysvinit /etc/init.d/courier-authlib
 
chmod 755 /etc/init.d/courier-authlib
 
chkconfig courier-authlib on
 
 
</pre>
 
</pre>
  
<code>/usr/local/etc/authlib/authdaemonrc</code> editieren:
+
=== ezmlm-idx ===
 
<pre>
 
<pre>
Change authmodulelist="..." to authmodulelist="authvchkpw"
+
cd /usr/local/src
 +
wget https://notes.sagredo.eu/files/qmail/tar/ezmlm-idx-7.2.2.tar.gz
 +
tar xzf ezmlm-idx-7.2.2.tar.gz
 +
cd ezmlm-idx-7.2.2
 +
chown -R root:root .
 +
cd lang
 +
ln -s de de_DE
 +
ln -s de_DE default
 +
cd ..
 +
make
 +
make man
 
</pre>
 
</pre>
  
Authlib's Authdaemon Server starten:
+
Test:
 
<pre>
 
<pre>
/etc/init.d/courier-authlib start
+
# ./ezmlm-test
 +
getconfopt library:  OK
 +
ezmlm-make:          OK
 +
Using subdb plugin:  std
 +
ezmlm-reject:        OK
 +
ezmlm-[un|is]sub[n]:  OK
 +
ezmlm-checksub:      OK
 +
ezmlm-send:          OK
 +
ezmlm-tstdig:        OK
 +
ezmlm-weed:          OK
 +
ezmlmrc contents:    OK
 +
ezmlm-clean:          OK
 +
ezmlm-store:          OK
 +
ezmlm-return:        OK
 +
ezmlm-warn (1/2):    OK
 +
ezmlm-manage (1/2):  OK
 +
ezmlm-request:        OK
 +
ezmlm-split:          OK
 +
ezmlm-gate:          OK
 +
ezmlm-idx:            OK
 +
ezmlm-get (index):    OK
 +
ezmlm-get (get):      OK
 +
ezmlm-get (thread):  OK
 +
ezmlm-get (digest):  OK
 +
ezmlm-manage (2/2):  OK
 +
ezmlm-moderate:      OK
 +
ezmlm-warn (2/2):    OK
 +
ezmlm-archive:        OK
 +
ezmlm-dispatch:      OK
 +
dispatch editor:      OK
 +
....
 
</pre>
 
</pre>
  
Courier-IMAP installieren:
+
====MYSQL Support====
 
<pre>
 
<pre>
cd /var/src
+
mysql -u root -p
tar -xjf tar/courier-imap-4.1.2.tar.bz2
+
 
cd courier-imap-4.1.2
+
CREATE USER 'ezmlm'@'localhost' IDENTIFIED BY '4EZMLM2024';
# 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
+
GRANT USAGE ON * . * TO 'ezmlm'@'localhost' IDENTIFIED BY '4EZMLM2024' WITH MAX_QUERIES_PER_HOUR 0
exit
+
MAX_CONNECTIONS_PER_HOUR 0
make install-strip
+
MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
make install-configure
 
  
cp courier-imap.sysvinit /etc/init.d/courier-imap
+
CREATE DATABASE IF NOT EXISTS `ezmlm` ;
chmod 755 /etc/init.d/courier-imap
+
GRANT ALL PRIVILEGES ON `ezmlm` . * TO 'ezmlm'@'localhost';
chkconfig courier-imap on
 
 
</pre>
 
</pre>
  
Konfigurieren:
+
Die Datei conf-cc anpassen:
<code>/usr/lib/courier-imap/etc/imapd</code> editieren:
 
 
<pre>
 
<pre>
Change 'IMAPDSTART=NO' to 'IMAPDSTART=YES'
+
gcc -O -g -I/usr/include/mysql -I/usr/include/pgsql
add " AUTH=CRAM-MD5" to IMAP_CAPABILITY to enable secure authentication (CRAM-MD5)
 
 
</pre>
 
</pre>
  
<code>/usr/lib/courier-imap/etc/imapd-ssl</code> editieren:
+
Die Datei conf-ld anpassen:
 
<pre>
 
<pre>
Change 'IMAPDSSLSTART=NO' to 'IMAPDSSLSTART=YES'
+
cc -g -rdynamic -B /usr/lib64/mysql
 
</pre>
 
</pre>
  
'''Security'''
+
Kompilieren und Installieren:
Wenn der Server mehrere IP-Adressen hat, IMAP nur auf der gewollten Adresse aktivieren
 
 
 
<code>/usr/lib/courier-imap/etc/imapd</code> editieren:
 
 
<pre>
 
<pre>
Change 'ADDRESS=0' to 'ADDRESS=<IPADDR>'
+
make mysql
 +
make install
 
</pre>
 
</pre>
  
<code>/usr/lib/courier-imap/etc/imapd-ssl</code> editieren:
+
=== qmailadmin ===
 +
 
 +
==== cracklib ====
 +
 
 +
Cracklib sorgt für '''bessere''' Passwörter, weil bei der Anlage neuer Passwört mit eine Wortliste verglichen wird.
 +
 
 +
Dieses wird bei '''Qmailadmin''' bei der Anlage neuer Accounts benutzt.
 +
 
 +
===== Quellen installieren =====
 
<pre>
 
<pre>
Change 'SSLADDRESS=0' to 'SSLADDRESS=<IPADDR>'
+
dnf -y install cracklib cracklib-dicts.x86_64
 
</pre>
 
</pre>
  
'''WICHTIG:''' Vor dem ersten Start die SSL-Profile editieren damit sie zum Hostnamen passen:
+
===== Wörterbuch aufbauen =====
 +
 
 
<pre>
 
<pre>
# optional: The first time courier-imap is started, the SSL certificate
+
mkdir /usr/share/cracklib
# is first created using "localhost" as the "common name".
+
cd /usr/share/cracklib
# If you want to change this to match your hostname, you can customize
+
wget https://github.com/cracklib/cracklib/releases/download/v${CRACKLIB_VER}/cracklib-words-${CRACKLIB_VER}.bz2
# the CN line in /usr/lib/courier-imap/etc/imapd.cnf (and pop3d.cnf of
+
bunzip2 cracklib-words-${CRACKLIB_VER}.bz2
# 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
 
 
</pre>
 
</pre>
  
Start IMAP server:
+
=====  Cracklib testen =====
 +
 
 
<pre>
 
<pre>
/etc/init.d/courier-imap start
+
cracklib-check
</pre>
 
  
=====Nachträgliches Ändern des SSL-Zertifikates=====
 
<pre>
 
cd /usr/lib/courier-imap/share
 
mv imapd.pem imapd.pem.old
 
</pre>
 
Mit <code>vi /usr/lib/courier-imap/etc/imapd.cnf</code> die Datei <code>/usr/lib/courier-imap/etc/imapd.cnf</code> editieren und im Bereich <code>[ req_dn ]</code> die Vorgaben entsprechend ändern, z.B.:
 
<pre>
 
[ 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
 
 
</pre>
 
</pre>
  
SSL-Zertifikat neu erstellen:
+
==== Installation ====
 
<pre>
 
<pre>
./mkimapdcert
+
QMA_VERSION=1.2.23
</pre>
+
cd /usr/local/src
  
=====WICHTIG: Courier-IMAP IMAP-Account Begrenzung pro IP-Adresse aufheben=====
+
touch /var/log/qma-auth.log
 +
chgrp apache /var/log/qma-auth.log
 +
chmod g+w /var/log/qma-auth.log
  
Courier-IMAP begrenzt die Anzahl der IMAP-Accounts die von einer IP-Adresse gleichzeitig genutzt werden können.  
+
wget https://github.com/sagredo-dev/qmailadmin/archive/refs/tags/v${QMA_VERSION}.tar.gz
 +
tar xzf v${QMA_VERSION}.tar.gz
 +
cd qmailadmin-${QMA_VERSION}
 +
chown -R root:root .
  
Per Default steht dieser Wert auf 4 und sollte angepasst werden. Dazu mit <code>vi /usr/lib/courier-imap/etc/imapd</code> die Konfigurationsdatei editieren, nach '''MAXPERIP''' suchen und anpassen, z.B.:
+
mkdir -p /var/www/qmail/images
<pre>
 
##NAME: MAXPERIP:0
 
#
 
#  Maximum number of connections to accept from the same IP address
 
  
MAXPERIP=50
+
QMAILROOT=/var/www/qmail
 +
./configure \
 +
  --enable-htmldir=${QMAILROOT} \
 +
  --enable-cgibindir=${QMAILROOT}/cgi-bin \
 +
  --enable-cgipath=/cgi-bin/qmailadmin \
 +
  --enable-imagedir=${QMAILROOT}/qmailadmin/files \
 +
  --enable-imageurl=/qmailadmin/files \
 +
  --enable-htmllibdir=${QMAILROOT}/qmailadmin \
 +
  --enable-qmaildir=/var/qmail \
 +
  --enable-domain-autofill \
 +
  --enable-vpopuser=vpopmail \
 +
  --enable-vpopgroup=vchkpw \
 +
  --enable-autoresponder-path=/usr/local/bin \
 +
  --enable-ezmlmdir=/usr/local/bin/ezmlm \
 +
  --enable-modify-quota \
 +
  --disable-ezmlm-mysql \
 +
  --disable-trivial-password \
 +
  --disable-catchall \
 +
  --enable-cracklib=/usr/share/cracklib/pw_dict
 
</pre>
 
</pre>
  
Die Datei speichern und Courier-IMAP neu starten:
+
Die QMAIL-Image Dateien im '''images''' Ordner speichern
 
<pre>
 
<pre>
/etc/init.d/courier-imap restart
+
cd /var/www/qmail/images
 +
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/favicon-16x16.png
 +
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/favicon-32x32.png
 +
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/logo.png
 +
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/logo_big.png
 
</pre>
 
</pre>
  
====Dovecot====
+
Kompilieren und installieren
Als Alternative zu Courier-IMAP kann man auch dovecot installiseren.
 
 
<pre>
 
<pre>
cd /var/src/tar
+
cd /usr/local/src/qmailadmin-${QMA_VERSION}
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
make install
+
make install-strip
 
</pre>
 
</pre>
=====Konfiguration=====
 
  
Benutzer und Gruppe anlegen
+
=== Erweiterungen (Add-Ons) ===
 +
 
 +
==== Realtime Block List (RBL) ====
 
<pre>
 
<pre>
groupadd dovecot
+
cat > /var/qmail/control/dnsbllist << __EOF__
useradd -g dovecot dovecot
+
-b.barracudacentral.org
useradd -g dovecot dovenull
+
-zen.spamhaus.org
 +
-psbl.surriel.com
 +
-bl.spamcop.net
 +
__EOF__
 
</pre>
 
</pre>
  
Benötigte Verzeichniss und dir Log-Datei anlegen
 
 
<pre>
 
<pre>
mkdir -p /var/run/dovecot
+
qmailctl restart
mkdir -p /var/log/dovecot
+
qmail-showctl |grep dnsbl
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
+
List at -b.barracudacentral.org configured for dnsbl check.
ln -s /usr/local/dovecot/bin/doveadm /usr/bin/doveadm
+
List at -zen.spamhaus.org configured for dnsbl check.
ln -s /usr/local/dovecot/bin/doveconf /usr/sbin/doveconf
+
List at -psbl.surriel.com configured for dnsbl check.
ln -s /usr/local/dovecot/bin/dsync /usr/sbin/dsync
+
List at -bl.spamcop.net configured for dnsbl check.
ln -s /usr/local/dovecot/etc/dovecot /etc/dovecot
 
  
 
</pre>
 
</pre>
  
Konfigurationsbeispiele kopieren
+
==== Greetdelay ====
 +
 
 +
Um Greetdelay zu aktivieren müssen in den beiden Dateien '''qmail-smtpd/run''' und '''qmail-submission/run''' die nachfolgenden Werte aktiviert werden.
 +
 
 
<pre>
 
<pre>
cd /usr/local/dovecot/etc/dovecot
+
export SMTPD_GREETDELAY=15
cp -rp /usr/local/dovecot/share/doc/dovecot/example-config/* .
+
export DROP_PRE_GREET=1
 
</pre>
 
</pre>
  
MAN-Pages für dovecot anpassen
+
 
Mit vi /etc/man.config die Datei /etc/man.config öffnen und folgende Zeile entsprechend hinzufügen:  
+
==== SPF ====
 +
 
 +
The SPF behavior of your mail server is controlled by the file '''/var/qmail/control/spfbehavior'''. You can specify a value between 0 and 6:
 +
 
 +
    0 disabled (Default). Never do SPF lookups, don't create Received-SPF headers
 +
    1 selects 'annotate-only' mode,  where  qmail-smtpd  will  annotate  incoming  email with Received-SPF fields, but will not reject any messages.
 +
    2 will produce temporary failures on DNS lookup problems so you can make sure you always have meaningful Received-SPF headers.
 +
    3 selects  'reject'  mode,  where  incoming  mail  will be rejected if the SPF record says 'fail'.
 +
    4 selects a more stricter rejection mode, which is like 'reject' mode, except that incoming mail will also be rejected when the SPF record says 'softfail'.
 +
    5 will also reject when the SPF record says 'neutral'
 +
    6 if no SPF records are available at all (or a syntax error was encountered).
 +
 
 +
 
 +
==== Sender Rewriting Scheme (SRS)  ====
 +
 
 
<pre>
 
<pre>
MANPATH /usr/local/dovecot/share/man
+
echo "| /var/qmail/bin/srsfilter" > /var/qmail/alias/.qmail-srs-default
 +
SRSDOMAIN=srs.afdb.de
 +
echo $SRSDOMAIN:srs >> /var/qmail/control/virtualdomains
 +
echo $SRSDOMAIN >> /var/qmail/control/rcpthosts
 +
echo $SRSDOMAIN > /var/qmail/control/srs_domain
 +
echo "$( echo $RANDOM|md5sum|head -c 10)" > /var/qmail/control/srs_secrets
 
</pre>
 
</pre>
  
=====local.conf=====
+
Im DNS müssen wir dann für die Domain afdb.de noch folgenden Eintrag hinzufügen:
Da in der Standard-Konfiurationsdatei dovecot.conf am Ende die Zeile
+
 
!include_try local.conf
+
<pre>
steht, werden alle Anpassungen nun in der Datei '''local.conf''' gemacht.
+
srs.afdb.de. IN TXT "v=spf1 a mx -all"
Die entsprechenden Zeilen sollten in den angegebenen Dateien im Verzeichnis '''conf.d''' auskommentiert werden.
+
</pre>
 +
 
 +
==== DKIM  ====
 +
 
 +
Zuerst einen neuen Ordner für die Domainkeys anlegen
  
 
<pre>
 
<pre>
cd /usr/local/dovecot/etc/dovecot
+
mkdir /var/qmail/control/domainkeys
cat > local.conf << EOF
+
chown -R qmailr:qmail /var/qmail/control/domainkeys
#--------------------------------------------------------
+
</pre>
# dovecot.conf
 
#--------------------------------------------------------
 
protocols = imap sieve
 
base_dir = /var/run/dovecot
 
  
#--------------------------------------------------------
+
Anschließend für jede Domain ein Domainkey erzeugen
# 10.auth.conf
 
#--------------------------------------------------------
 
disable_plaintext_auth = yes
 
auth_mechanisms = plain login cram-md5
 
  
#--------------------------------------------------------
+
<pre>
# 10-ssl.conf
+
dknewkey -d afdb.de -t rsa -b 2048 default
#--------------------------------------------------------
+
</pre>
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
 
  
#--------------------------------------------------------
+
und anzeigen mit nachfolgenden Befehl
# 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"
 
  
#--------------------------------------------------------
+
<pre>
# 10-mail.conf
+
dknewkey -p -d afdb.de -e
#--------------------------------------------------------
+
DKIM TXT record for afdb.de with selector=default file /var/qmail/control/domainkeys/afdb.de/default.pub
mail_uid = 89
+
default._domainkey.afdb.de. IN TXT ("v=DKIM1; k=rsa; t=y; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuXnfA8SYIXOy+ZwKTTmHHOtnFbD9kte9pQNUYAMsFnHC5s64b1ZQwPfhtGa+8rVUm3+cu3ugMcVH5DqJuIWU+o7CJhVMYFLCfm49vxB44xyYLn+yPSge8hqxTz91yn9CqydZDT0s4pQp8nnOBs8VJIndxnFztIRSFKcVhshwpB8aeKJyb+m3sdReYkin" "dimQHKRqS3M4sf4dly/l0i/66jmljNCsvaaTLw6BJAWGSKsokiKWWws2buNxAI2+nYUVnOGHyjeUxpn1J0f4eDoxTQ9YSBPIj9RFYEhuIck5MkoL3Mzv7OBHRs/6wPsu40eqhqrgQLbJ0O8QY9U1A/283QIDAQAB")
mail_gid = 89
+
-rw-r--r--. 1 root qmail 458  3. Jan 12:42 /var/qmail/control/domainkeys/afdb.de/default.pub
first_valid_uid = 89
+
-rw-r-----. 1 root qmail 1704  3. Jan 12:42 /var/qmail/control/domainkeys/afdb.de/default
last_valid_uid = 89
+
------------------------------------------------------
first_valid_gid = 89
+
</pre>
last_valid_gid = 89
+
 
mail_plugins = $mail_plugins quota zlib
+
Im DNS der Domain (hier afdb.sw) muss dann noch folgenden TXT Eintrag hinterlegt werden.
  
#--------------------------------------------------------
+
<pre>
# 10-master.conf
+
default._domainkey.afdb.de. IN TXT ("v=DKIM1; k=rsa;  p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuXnfA8SYIXOy+ZwKTTmHHOtnFbD9kte9pQNUYAMsFnHC5s64b1ZQwPfhtGa+8rVUm3+cu3ugMcVH5DqJuIWU+o7CJhVMYFLCfm49vxB44xyYLn+yPSge8hqxTz91yn9CqydZDT0s4pQp8nnOBs8VJIndxnFztIRSFKcVhshwpB8aeKJyb+m3sdReYkin" "dimQHKRqS3M4sf4dly/l0i/66jmljNCsvaaTLw6BJAWGSKsokiKWWws2buNxAI2+nYUVnOGHyjeUxpn1J0f4eDoxTQ9YSBPIj9RFYEhuIck5MkoL3Mzv7OBHRs/6wPsu40eqhqrgQLbJ0O8QY9U1A/283QIDAQAB")
#--------------------------------------------------------
+
</pre>
default_login_user = vpopmail
 
default_internal_user = vpopmail
 
  
service auth {
+
Anschließend kommentiert man im Skript '''/var/qmail/rc''' die Zeile '''#DKIM_ON=1''' aus.
  unix_listener auth-userdb {
 
    mode = 0600
 
    user = vpopmail
 
    group = vchkpw
 
  }
 
}
 
  
#--------------------------------------------------------
+
<pre>
# 15-lda.conf
+
#!/bin/sh
#--------------------------------------------------------
+
 
postmaster_address = postmaster@afdb.de
+
QMAILDIR=/var/qmail
hostname = mail.afdb.de
+
 
# the next two to auto create folders
+
# Comment out DKIM_ON=1 to disable dkim sign at qmail-remote level
lda_mailbox_autocreate = yes
+
# You have to define your variables in control/filterargs (DKIM page for more info)
lda_mailbox_autosubscribe = yes
+
# echo "*:remote:/var/qmail/bin/qmail-dkim:DKIMQUEUE=/bin/cat,DKIMSIGN=/var/qmail/control/domainkeys/%/default,DKIMSIGNOPTIONS=-z 2" > /var/qmail/control/filterargs
 +
 
 +
DKIM_ON=1
  
protocol lda {
+
if [ -r $QMAILDIR/control/filterargs ] &&<feff><200b> [ -n "$DKIM_ON" ]; then
   # Space separated list of plugins to load (default is global mail_plugins).
+
  exec env - PATH="$QMAILDIR/bin:$PATH" \
   mail_plugins = $mail_plugins sieve quota autocreate
+
  QMAILREMOTE=$QMAILDIR/bin/spawn-filter \
}
+
  qmail-start "`cat $QMAILDIR/control/defaultdelivery`"
 +
else
 +
   # Use this if you are signing at qmail-smtpd level or you don't want to sign at all
 +
   exec env - PATH="$QMAILDIR/bin:$PATH" \
 +
  qmail-start "`cat $QMAILDIR/control/defaultdelivery`"
 +
fi
 +
</pre>
  
#--------------------------------------------------------
+
und danach erzeugt man die Datei '''control/filterargs'''
# 20-imap.conf
 
#--------------------------------------------------------
 
mail_max_userip_connections = 40
 
protocol imap {
 
  mail_plugins = $mail_plugins imap_zlib
 
}
 
  
#--------------------------------------------------------
+
<pre>
# 90-plugin.conf
+
echo "*:remote:/var/qmail/bin/qmail-dkim:DKIMQUEUE=/bin/cat,DKIMSIGN=/var/qmail/control/domainkeys/%/default,DKIMSIGNOPTIONS=-z 2" > /var/qmail/control/filterargs
#--------------------------------------------------------
+
</pre>
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
 
}
 
  
#--------------------------------------------------------
+
Normalerweise muss man nun noch das '''qmail-smtpd run script''' anpassen, aber das ist bei uns schon vorkonfiguriert.
# 90-quota.conf
 
#--------------------------------------------------------
 
#quota = maildir:User quota
 
  
 +
==Dovecot==
 +
Als Alternative zu Courier-IMAP kann man auch dovecot installiseren.
  
#--------------------------------------------------------
+
=== Installation ===
# auth-vpopmail.conf
 
#--------------------------------------------------------
 
passdb {
 
  driver = vpopmail
 
}
 
  
userdb {
+
<pre>
  driver = vpopmail
+
DOVECOT_VER=2.3.21.1
  args = quota_template=quota_rule=*:backend=%q
+
cd /usr/local/src
}
+
wget https://www.dovecot.org/releases/2.3/dovecot-${DOVECOT_VER}.tar.gz
 +
tar xzf dovecot-${DOVECOT_VER}.tar.gz
 +
chown -R root.root dovecot-${DOVECOT_VER}
 +
cd dovecot-${DOVECOT_VER}
  
 +
./configure \
 +
        --prefix=/usr/local/dovecot \
 +
        --with-sql \
 +
        --with-mysql \
 +
        --with-docs \
 +
        --with-ssl \
 +
        --without-shadow \
 +
        --without-pam \
 +
        --without-ldap \
 +
        --without-pgsql \
 +
        --without-sqlite \
 +
        --with-solr \
 +
        --with-systemd systemdsystemunitdir=/lib/systemd/system
 +
</pre>
  
 +
und kompilieren und installieren
 +
<pre>
 +
make
 +
make install
  
EOF
 
 
</pre>
 
</pre>
  
Anschließend '''postmaster_address''' und '''hostname''' entsprechend anpassen.
+
==== Pigeonhole für Dovecot ====
 +
<pre>
 +
PIGEONHOLE_VER=0.5.21.1
 +
cd /usr/local/src
 +
wget https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}.tar.gz
 +
tar xvzpf dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}.tar.gz
 +
cd dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}
 +
./configure --prefix=/usr/local/dovecot-2-3-pigeonhole --with-dovecot=/usr/local/dovecot/lib/dovecot/
 +
make
 +
make install
  
=====10-auth.conf=====
+
cd /usr/local
Hier wird am Ende folgendes gemacht:
+
ln -s /usr/local/dovecot-pigeonhole-2.3-pigeonhole /usr/local/dovecot-pigeonhole
<pre>
 
#!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
 
 
</pre>
 
</pre>
Also auth-system wird deaktiviert!
 
  
 +
===Konfiguration===
 +
 +
====Benutzer und Gruppen ====
  
=====10-ssl.conf=====
+
Die Genutzer und Gruppen RHEL-Konform anlegen
hier die Pfade zu den Zertifikaten auskommentieren, stehen nun in local.conf
 
 
<pre>
 
<pre>
#ssl_cert = </etc/ssl/certs/dovecot.pem
+
groupadd --gid 97 dovecot
#ssl_key = </etc/ssl/private/dovecot.pem
+
groupadd --gid 988 dovenull
</pre>
 
  
=====Start/Stop-Script=====
+
useradd -g dovecot --uid 97 dovecot
Das init-Skript erzeugen, in dem man den Editor vi öffnen und nachfolgende Zeilen einfügt.
+
useradd -g dovenull --uid 991 dovenull
  
<pre>
+
mkdir -p /var/log/dovecot
vi etc/init.d/dovecot  
+
touch /var/log/dovecot/dovecot.log
#!/bin/bash
+
chgrp vchkpw /var/log/dovecot/dovecot.log
#
+
chmod 660 /var/log/dovecot/dovecot.log
#      /etc/rc.d/init.d/dovecot
+
</pre>
#
+
 
# Starts the dovecot daemon
+
====Konfigurationsdateien kopieren ====
#
+
und Standardkonformen Verlinkung einrichten
# chkconfig: - 65 35
+
<pre>
# description: Dovecot Imap Server
+
cd /etc
# processname: dovecot
+
ln -s /usr/local/dovecot/etc/dovecot  
# config: /usr/local/dovecot/etc/dovecot/dovecot.conf
+
</pre>
# pidfile: /var/run/dovecot/master.pid
 
  
### BEGIN INIT INFO
+
<pre>
# Provides: dovecot
+
cd /etc/dovecot
# Required-Start: $local_fs $network
+
cp -rp /usr/local/dovecot/share/doc/dovecot/example-config/* .
# Required-Stop: $local_fs $network
+
</pre>
# 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
+
Sieve Konfigurationsdateien
#              a small POP3 server.
+
<pre>
### END INIT INFO
+
cd /etc/dovecot/conf.d
 +
cp /usr/local/dovecot/share/doc/dovecot/example-config/conf.d/20-managesieve.conf .
 +
cp /usr/local/dovecot/share/doc/dovecot/example-config/conf.d/90-sieve.conf .
 +
</pre>
  
# Source function library.
 
. /etc/init.d/functions
 
  
RETVAL=0
+
und '''/etc/profile''' anpassen
prog="Dovecot Imap"
+
<pre>
exec="/usr/local/dovecot/sbin/dovecot"
+
echo "export PATH=\$PATH:/usr/local/dovecot/bin" >> /etc/profile
config="/usr/local/dovecot/etc/dovecot/dovecot.conf"
+
echo "export MANPATH=\$MANPATH:/usr/local/dovecot/share/man" >> /etc/profile
pidfile="/var/run/dovecot/master.pid"
+
</pre>
lockfile="/var/lock/subsys/dovecot"
 
  
start() {
+
==== Ordner und Dateien für local.conf ====
        [ $UID -eq 0 ] || exit 4
 
        [ -x $exec ] || exit 5
 
        [ -f $config ] || exit 6
 
  
        echo -n $"Starting $prog: "
+
'''Achtung:'''
        daemon --pidfile $pidfile $exec $OPTIONS
 
        RETVAL=$?
 
        [ $RETVAL -eq 0 ] && touch  $lockfile
 
        echo
 
}
 
  
stop() {
+
81.169.197.241 ist die aktuelle IP des Mailservers und muss dann evtl. im Nachfolgenden ausgetauscht werden.
        [ $UID -eq 0 ] || exit 4
+
<pre>
        echo -n $"Stopping $prog: "
+
cat > /etc/dovecot/dovecot-sql.conf.ext << __EOT__
        killproc -p $pidfile $exec
+
driver = mysql
        RETVAL=$?
+
connect = host=localhost dbname=vpopmail user=vpopmail password=VPop2024
        [ $RETVAL -eq 0 ] && rm -f $lockfile
+
default_pass_scheme = SHA512-CRYPT
        echo
 
}
 
  
reload() {
+
password_query = \
        [ $UID -eq 0 ] || exit 4
 
        echo -n $"Reloading $prog: "
 
        killproc -p $pidfile $exec -HUP
 
        RETVAL=$?
 
        echo
 
}
 
  
#
+
SELECT \
#      See how we were called.
+
CONCAT(vpopmail.pw_name, '@', vpopmail.pw_domain) AS user, \
#
+
  vpopmail.pw_passwd AS password, \
case "$1" in
+
                vpopmail.pw_dir AS userdb_home, \
  start)
+
                89 AS userdb_uid, \
        start
+
                89 AS userdb_gid, \
        ;;
+
                CONCAT('*:bytes=', REPLACE(SUBSTRING_INDEX(vpopmail.pw_shell, 'S', 1), 'NOQUOTA', '0')) AS userdb_quota_rule \
  stop)
+
FROM vpopmail \
        stop
+
LEFT JOIN aliasdomains ON aliasdomains.alias='%d' \
        ;;
+
                LEFT JOIN limits ON limits.domain='%d' \
  reload)
+
WHERE \
        reload
+
vpopmail.pw_name='%n' \
        ;;
+
AND \
  force-reload|restart)
+
(vpopmail.pw_domain='%d' OR vpopmail.pw_domain=aliasdomains.domain) \
        stop
+
                AND \
        sleep 1
+
                ('%a'!='995' OR !(vpopmail.pw_gid & 2)) \
        start
+
                AND \
        RETVAL=$?
+
                ('%r'!='81.169.197.241' OR !(vpopmail.pw_gid & 4)) \
        ;;
+
                AND \
  condrestart|try-restart)
+
                ('%r'='81.169.197.241' OR '%a'!='993' OR !(vpopmail.pw_gid & 8)) \
        if [ -f $lockfile ]; then
+
                AND \
            stop
+
                ('%r'!='81.169.197.241' OR COALESCE(disable_webmail,0)!=1) \
            sleep 3
+
                AND \
            start
+
                ('%r'='81.169.197.241' OR COALESCE(disable_imap,0)!=1)
        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
+
</pre>
+
user_query = \
 +
  SELECT \
 +
      vpopmail.pw_dir AS home, \
 +
      89 AS uid, \
 +
      89 AS gid \
 +
  FROM vpopmail \
 +
  WHERE \
 +
      vpopmail.pw_name='%n' \
 +
      AND \
 +
      vpopmail.pw_domain='%d'
  
Anschließend macht man das Skript ausführbar und legt es in den Runleveln an
+
iterate_query = SELECT CONCAT(pw_name,'@',pw_domain) AS user FROM vpopmail
<pre>
+
__EOT__
chmod +x /etc/init.d/dovecot
 
chkconfig dovecot on
 
</pre>
 
  
Nun könnte man dovecot mit
+
chmod go-wrx /etc/dovecot/dovecot-sql.conf.ext
<pre>
 
service dovecot start
 
 
</pre>
 
</pre>
starten, aber da '''sieve''' noch nicht installiert ist, würde man nur Fehler sehen.
 
  
=====SSL-Zertifikat=====
+
Create the run folder:
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.
 
 
<pre>
 
<pre>
cd /var/src/dovecot-2.2.13/doc
+
ln -s /var /usr/local/dovecot/var
vi dovecot-openssl.cnf
+
mkdir -p /usr/local/dovecot/var/run/dovecot
 
</pre>
 
</pre>
  
Anschließend passt man den Pfad im Skript '''mkcert.sh''' entsprechend an:
+
# erzeuge besseren DH Key
 
<pre>
 
<pre>
vi mkcert.sh
+
openssl dhparam -out /usr/local/dovecot/etc/dh.pem 4096
alt:
 
SSLDIR=${SSLDIR-/etc/ssl}
 
neu:
 
SSLDIR=${SSLDIR-/etc/pki/dovecot}
 
 
</pre>
 
</pre>
  
erzeugt die benötigten Verzeichnisse
+
====local.conf====
<pre>
+
Da in der Standard-Konfiurationsdatei dovecot.conf am Ende die Zeile
mkdir -p /etc/pki/dovecot/certs
+
!include_try local.conf
mkdir -p /etc/pki/dovecot/private
+
steht, werden alle Anpassungen nun in der Datei '''local.conf''' gemacht.
</pre>
+
Die entsprechenden Zeilen sollten in den angegebenen Dateien im Verzeichnis '''conf.d''' auskommentiert werden.
  
und führt anschließend das Skript aus:
 
 
<pre>
 
<pre>
sh mkcert.sh
+
cd /etc/dovecot
</pre>
+
cat > local.conf << __EOF__
 +
#--------------------------------------------------------
 +
# dovecot.conf
 +
#--------------------------------------------------------
 +
protocols = imap pop3 sieve
 +
listen=127.0.0.1,81.169.197.241
 +
base_dir = /var/run/dovecot/
 +
state_dir = /var/lib/dovecot
  
Sollte man bereits im SSLDIR-Pfad Zertifikate für dovecot liegen haben, so sollte man diese vorher woanders hin kopieren oder löschen.
+
#--------------------------------------------------------
 +
# auth-sql.conf.ext
 +
# ------------------------------------------------------
 +
passdb {
 +
  driver = sql
 +
  args = /etc/dovecot/dovecot-sql.conf.ext
 +
}
  
=====logrotate=====
+
userdb {
Logrotate konfigurieren
+
  driver = prefetch
 +
}
  
<pre>
+
userdb {
cat > /etc/logrotate.d/dovecot << EOF
+
  driver = sql
/var/log/dovecot/*.log {
+
  args = /etc/dovecot/dovecot-sql.conf.ext
  missingok
 
  notifempty
 
  delaycompress
 
  sharedscripts
 
  postrotate
 
    doveadm log reopen
 
  endscript
 
 
}
 
}
EOF
 
</pre>
 
=====TEST=====
 
Um sich mal die einstellungen von Dovecot anzuschauen, ist das Tool '''doveconf''' gut geeignet.
 
<pre>
 
doveconf|more
 
  
</pre>
 
  
====Pigeonhole Sieve====
+
#--------------------------------------------------------
Nur für dovecot
+
# 10.auth.conf
<pre>
+
#--------------------------------------------------------
cd /var/src/tar
+
disable_plaintext_auth = no
wget http://pigeonhole.dovecot.org/releases/2.2/dovecot-2.2-pigeonhole-0.4.3.tar.gz
+
auth_mechanisms = plain login # the sql drivers requires that the pwd is transmitted with no encryption
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
 
</pre>
 
  
# Konfigurationen kopieren
+
#--------------------------------------------------------
<pre>
+
# 10-ssl.conf
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/
+
ssl=yes
</pre>
+
ssl_cert = </etc/letsencrypt/live/mail.schlicker.org/fullchain.pem
 +
ssl_key = </etc/letsencrypt/live/mail.schlicker.org/privkey.pem
 +
ssl_cipher_list = DHE-RSA-AES256-SHA:DHE-RSA-AES128 SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!PSK:!SRP:!DSS:!SSLv2:!RC4
 +
ssl_dh = </usr/local/dovecot/etc/dh.pem
  
und anschließend kann man dann Dovecot endgültig starten
+
#--------------------------------------------------------
<pre>
+
# 10-logging.conf
service dovecot start
+
#--------------------------------------------------------
</pre>
+
log_path = /var/log/dovecot/dovecot.log
 +
login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k"
  
===autorespond===
+
#--------------------------------------------------------
 +
# 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
  
<pre>
+
#--------------------------------------------------------
cd /var/src
+
# 10-master.conf
tar -xzf tar/autorespond-2.0.4.tar.gz
+
#--------------------------------------------------------
cd autorespond-2.0.4
+
default_login_user = vpopmail
patch -p1 < ../tar/autorespond-2.0.4-2.0.5.patch
+
default_internal_user = vpopmail
make
 
make install
 
</pre>
 
  
===ezmlm-idx===
+
service auth {
 
+
  unix_listener auth-userdb {
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.
+
    mode = 0600
 
+
    user = vpopmail
:* http://cr.yp.to/ezmlm.html
+
    group = vchkpw
:* http://www.ezmlm.org
+
  }
 
+
}
====ezmlm-idx OHNE MySQL-Unterstützung====
+
service stats {
 
+
    unix_listener stats-reader {
<pre>
+
    user = vpopmail
cd /var/src
+
    group = vchkpw
tar -xzf tar/ezmlm-0.53.tar.gz
+
    mode = 0660
tar -xzf tar/ezmlm-idx-0.443.tar.gz
+
  }
mv -f ezmlm-idx-0.443/* ezmlm-0.53/
+
  unix_listener stats-writer {
cd ezmlm-0.53
+
    user = vpopmail
patch -p0 < idx.patch
+
    group = vchkpw
make
+
    mode = 0660
</pre>
+
  }
 +
}
  
Möchte man das EZMLM z.B. deutsche Texte enthält, führt man an dieser Stelle folgenden Befehl aus:
+
#--------------------------------------------------------
<pre>
+
# 15-lda.conf
make de
+
#--------------------------------------------------------
</pre>
+
postmaster_address = postmaster@afdb.de
 +
hostname = mail.afdb.de
 +
# the next two to auto create folders
 +
lda_mailbox_autocreate = yes
 +
lda_mailbox_autosubscribe = yes
  
<pre>
+
submission_host = 85.214.138.131:25
make setup
 
</pre>
 
  
====ezmlm-idx MIT MySQL-Unterstützung====
+
protocol lda {
 +
  # Space separated list of plugins to load (default is global mail_plugins).
 +
  mail_plugins = $mail_plugins sieve quota autocreate
 +
}
  
Das Paket ''mysql-devel'' muss installiert sein:
+
#--------------------------------------------------------
<pre>
+
# 15-mailboxes.conf
yum install mysql-devel
+
#--------------------------------------------------------
</pre>
+
namespace inbox {
 +
  mailbox Drafts {
 +
    special_use = \Drafts
 +
    auto = subscribe
 +
  }
 +
  mailbox Junk {
 +
    special_use = \Junk
 +
    auto = subscribe
 +
    autoexpunge = 30d
 +
  }
 +
  mailbox Trash {
 +
    special_use = \Trash
 +
    auto = subscribe
 +
    autoexpunge = 60d
 +
  }
 +
}
  
<pre>
+
#--------------------------------------------------------
cd /var/src
+
# 20-imap.conf
tar -xzf tar/ezmlm-0.53.tar.gz
+
#--------------------------------------------------------
tar -xzf tar/ezmlm-idx-0.443.tar.gz
+
mail_max_userip_connections = 40
mv -f ezmlm-idx-0.443/* ezmlm-0.53/
+
protocol imap {
cd ezmlm-0.53
+
  mail_plugins = $mail_plugins imap_zlib
patch -p0 < idx.patch
+
}
</pre>
 
  
Die Datei <code>conf-sub</code> editieren und <code>std</code> gegen <code>mysql</code> austauschen:
+
#--------------------------------------------------------
<pre>
+
# 20-pop3.conf
mysql
+
#--------------------------------------------------------
 
+
protocol pop3 {
Choose a subscription database support. Available supports are:
+
  mail_plugins = $mail_plugins quota
* std    (Default) filesystem
+
}
* mysql  MySQL database
+
service pop3-login {
* pgsql  Postgres database
+
  inet_listener pop3 {
</pre>
+
    port = 110
 
+
  }
Die Datei <code>sub_mysql/conf-sqlld</code> editieren:
+
  inet_listener pop3s {
<pre>
+
    port = 995
# Diese Zeile:
+
    ssl = yes
-L/usr/lib/mysql -lmysqlclient -lnsl -lm
+
  }
 
+
}
# gegen diese tauschen:
+
#--------------------------------------------------------
-L/usr/lib/mysql -lmysqlclient -lz
+
# 90-plugin.conf
# 64bit
+
#--------------------------------------------------------
-L/usr/lib64/mysql -lmysqlclient -lz
+
plugin {
</pre>
+
  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
  
Kompilieren und Installieren:
 
<pre>
 
make
 
</pre>
 
  
Möchte man das EZMLM z.B. deutsche Texte enthält, führt man an dieser Stelle folgenden Befehl aus:
+
#--------------------------------------------------------
<pre>
+
# 90-sieve.conf
make de
+
#--------------------------------------------------------
</pre>
+
sieve_extensions = +spamtest +spamtestplus +relational +comparator-i;ascii-numeric
 +
sieve_before = /etc/dovecot/sieve
 +
 
  
<pre>
+
#--------------------------------------------------------
make setup
+
# auth-vpopmail.conf
</pre>
+
#--------------------------------------------------------
 +
passdb {
 +
  driver = vpopmail
 +
}
  
==WICHTIGE Konfigurationen==
+
userdb {
 +
  driver = vpopmail
 +
  args = quota_template=quota_rule=*:backend=%q
 +
}
  
===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:
+
__EOF__
<pre>
 
# stunnel -version
 
stunnel 4.08 on i386-redhat-linux-gnu PTHREAD+POLL+IPv4+LIBWRAP with OpenSSL 0.9.7f 22 Mar 2005
 
(...)
 
 
</pre>
 
</pre>
  
Wenn der POP3S-Dienst nicht funktioniert, findet man in <code>/var/log/qmail/pop3ds/current</code> entsprechende Fehlermeldungen:
+
Anschließend '''postmaster_address''' und '''hostname''' entsprechend anpassen.
 +
 
 +
====10-auth.conf====
 +
Hier wird am Ende folgendes gemacht:
 
<pre>
 
<pre>
2006-03-27 11:37:52.805674500 tcpserver: status: 1/40
+
#!include auth-system.conf.ext
2006-03-27 11:37:52.806051500 tcpserver: pid 30432 from 84.133.222.79
+
#!include auth-sql.conf.ext
2006-03-27 11:37:52.806091500 tcpserver: ok 30432 0:212.68.65.193:995 :84.133.222.79::34515
+
#!include auth-ldap.conf.ext
2006-03-27 11:37:52.813089500 2006.03.27 11:37:52 LOG3[30432:3085924032]: -f: No such file or directory (2)
+
#!include auth-passwdfile.conf.ext
2006-03-27 11:37:52.813108500
+
#!include auth-checkpassword.conf.ext
2006-03-27 11:37:52.813122500 Syntax:
+
#!include auth-vpopmail.conf.ext
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
 
 
</pre>
 
</pre>
 +
Also auth-system wird deaktiviert!
  
Damit der POP3S-Dienst wie gewünscht funktioniert, sind einige Anpassungen nötig.
 
  
====stunnel Konfigurationsdatei anlegen====
+
====10-ssl.conf====
 
+
hier die Pfade zu den Zertifikaten auskommentieren, stehen nun in local.conf
Ab Version 4 benötigt ''stunnel'' eine eigene Konfigurationsdatei. Mit <code>vi /var/qmail/supervise/qmail-pop3ds/stunnel.conf</code> eine Datei mit folgendem Inhalt anlegen. Der Hostname <code>web1.braunschweig-lions.de</code> ist dabei mit dem entsprechenden Hostnamen des Servers zu ersetzen. Siehe auch [[Qmail-Toaster auf Fedora Core Linux#DNS prüfen]]
 
 
<pre>
 
<pre>
# stunnel configuration for pop3s
+
#ssl_cert = </etc/ssl/certs/dovecot.pem
# last update: 2006-03-27 Dirk Schlueter
+
#ssl_key = </etc/ssl/private/dovecot.pem
 
 
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
 
 
</pre>
 
</pre>
  
====POP3S Supervise-Run-Script anpassen====
+
===Logdatei und logrotate===
  
Mit <code>vi /var/qmail/supervise/qmail-pop3ds/run</code> öffnen und folgende Änderungen vornehmen:
+
Logdatei anlegen
 
 
'''ORIGINAL:'''
 
 
<pre>
 
<pre>
#!/bin/sh
+
mkdir -p /var/log/dovecot
 
+
touch /var/log/dovecot/dovecot.log
VPOPMAILUID=`id -u vpopmail`
+
chgrp vchkpw /var/log/dovecot/dovecot.log
VPOPMAILGID=`id -g vpopmail`
+
chmod 660 /var/log/dovecot/dovecot.log
 
 
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
 
 
</pre>
 
</pre>
  
'''GEÄNDERTE VERSION:'''
+
Logrotate konfigurieren
 
<pre>
 
<pre>
#!/bin/sh
+
cat > /etc/logrotate.d/dovecot << __EOF__
 
+
/var/log/dovecot/*.log {
VPOPMAILUID=`id -u vpopmail`
+
  missingok
VPOPMAILGID=`id -g vpopmail`
+
  notifempty
 +
  delaycompress
 +
  sharedscripts
 +
  postrotate
 +
    doveadm log reopen
 +
  endscript
 +
}
 +
__EOF__
 +
</pre>
  
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
 
</pre>
 
  
Wie man sieht wurden die letzten drei Zeilen modifiziert, da die Konfigurations von ''stunnel'' ja nun über die neue Konfiguratiosdatei erledigt wird.
+
===Pidgeon Sieve anpassen===
  
====Neustart und Funktionstest====
+
Info: http://tools.ietf.org/html/rfc5235 - http://wiki2.dovecot.org/Pigeonhole/Sieve/Examples
  
Nun muss der Dienst neu gestartet werden und dann POP3S richtig funktionieren:
+
Zuerst ein neuen Ordner für globale Sieve-Regeln anlegen
 
<pre>
 
<pre>
# vpopmailctl restart
+
cd /etc/dovecot/
Stopping qmail-pop3d:
+
mkdir sieve
* Stopping qmail-pop3d.
+
chown -R vpopmail.vchkpw sieve
Stopping qmail-pop3ds:
 
* Restarting qmail-pop3d.
 
* Restarting qmail-pop3ds.
 
 
</pre>
 
</pre>
  
Nun sollte das Logfile ungefähr so aussehen und die POP3S-Verbindung geklappt haben:
+
Erste Regel-Datei anlegen, erkannte SPAMs in den JUNK Ordner verschieben.
 
<pre>
 
<pre>
# tail -f /var/log/qmail/pop3ds/current | /usr/local/bin/tai64nlocal
+
cat > /etc/dovecot/sieve/move-spam.sieve << __EOF__
 
+
require ["fileinto"];
2006-03-27 12:00:31.094113500 tcpserver: status: 1/40
+
if anyof (header :contains "X-Spam-Flag" "YES")
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
+
fileinto "Junk";
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
+
/* Other messages get filed into INBOX */
2006-03-27 12:00:31.110836500 2006.03.27 12:00:31 LOG5[30917:3086091968]: stunnel connected from 84.133.222.79:50608
+
__EOF__
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
 
 
</pre>
 
</pre>
  
=Funktionstest=
+
und anschließend als User vpopmail die Regeln compilieren
 +
<pre>
 +
su vpopmail
 +
cd /etc/dovecot/sieve
 +
/usr/local/dovecot-2-3-pigeonhole/bin/sievec .
 +
</pre>
  
==DNS-Konfiguration==
+
===Einstellungen überprüfen===
 +
Um sich mal die Einstellungen von Dovecot anzuschauen, ist das Tool '''doveconf''' gut geeignet.
 +
<pre>
 +
doveconf|more
 +
</pre>
  
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.
 
  
 +
===Start Dovecot===
 +
und anschließend kann man dann Dovecot endgültig starten
 
<pre>
 
<pre>
(...)
+
systemctl enable dovecot
; eigener MX zum testen fuer test.braunschweig-lions.de
+
systemctl start dovecot
test            IN A            212.68.65.193
 
                IN MX 10        www.braunschweig-lions.de.
 
(...)
 
 
</pre>
 
</pre>
  
Nach dem der BIND die Änderungen übernommen hat, sollte man die korrekte DNS-Konfiguration von einem anderen Rechner aus testen:
+
===Indizierung (Apache SOLR) ===
<pre>
 
[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:
+
Solr is a Lucene indexing server. Dovecot communicates to it using HTTP/XML queries. With this indexing server, you can do text searches in your emails.
;test.braunschweig-lions.de.   IN      MX
 
  
;; ANSWER SECTION:
+
==== Voraussetzung Java ====
test.braunschweig-lions.de. 86400 IN    MX      10 www.braunschweig-lions.de.
 
  
;; AUTHORITY SECTION:
+
<pre>
braunschweig-lions.de.  86400  IN      NS      ns3.bcc.de.
+
dnf install -y java-latest-openjdk.x86_64
braunschweig-lions.de.  86400  IN      NS      ns.braunschweig-lions.de.
+
</pre>
braunschweig-lions.de.  86400  IN      NS      ns2.bcc.de.
 
  
;; ADDITIONAL SECTION:
+
Test
www.braunschweig-lions.de. 86400 IN    A      212.68.65.193
+
<pre>
 +
java -version
 +
openjdk version "23.0.1" 2024-10-15
 +
OpenJDK Runtime Environment (Red_Hat-23.0.1.0.11-1) (build 23.0.1+11)
 +
OpenJDK 64-Bit Server VM (Red_Hat-23.0.1.0.11-1) (build 23.0.1+11, mixed mode, sharing)
 +
</pre>
  
;; Query time: 299 msec
+
==== Installation ====
;; SERVER: 192.168.201.1#53(192.168.201.1)
+
<pre>
;; WHEN: Mon Mar 27 10:43:16 2006
+
cd /usr/local/src
;; MSG SIZE  rcvd: 137
+
SOLR_VER=9.5.0
 +
wget https://www.apache.org/dyn/closer.lua/solr/solr/${SOLR_VER}/solr-${SOLR_VER}.tgz?action=download -O solr-${SOLR_VER}.tgz
 +
tar xzf solr-${SOLR_VER}.tgz
 +
solr-${SOLR_VER}/bin/install_solr_service.sh --strip-components=2
 +
bash ./install_solr_service.sh solr-${SOLR_VER}.tgz -f -n
 
</pre>
 
</pre>
  
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:
+
Der letzte Aufruf erzeugt einige Fehler, weil wir hier auf einem systemd-System sind, daher nach Abbruch des Skripts ein paar manuelle Anpassungen
 +
 
 
<pre>
 
<pre>
[dirk@wizard ~]$ dig -x 212.68.65.193
+
cat > /etc/systemd/system/solr.service << __EOF__
 +
[Unit]
 +
Description=Apache SOLR
  
; <<>> DiG 9.3.1 <<>> -x 212.68.65.193
+
[Service]
;; global options:  printcmd
+
Type=forking
;; Got answer:
+
User=solr
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11072
+
Environment=SOLR_INCLUDE=/etc/default/solr.in.sh
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 2
+
ExecStart=/opt/solr/bin/solr start
 +
ExecStop=/opt/solr/bin/solr stop
 +
Restart=on-failure
 +
LimitNOFILE=65000
 +
LimitNPROC=65000
 +
TimeoutSec=180s
  
;; QUESTION SECTION:
+
[Install]
;193.65.68.212.in-addr.arpa.    IN      PTR
+
WantedBy=multi-user.target
 +
__EOF__
 +
</pre>
  
;; ANSWER SECTION:
+
==== Konfiguration ====
193.65.68.212.in-addr.arpa. 86400 IN    PTR    www.braunschweig-lions.de.
 
  
;; AUTHORITY SECTION:
+
Standard Konfiguration anpassen
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:
+
<pre>
ns2.bcc.de.            86370  IN      A      212.68.65.2
+
cat >> /etc/default/solr.in.sh << __EOF__
ns3.bcc.de.             86370  IN      A      212.68.88.12
+
SOLR_TIMEZONE="Europe/Berlin"
 
+
SOLR_IP_ALLOWLIST="127.0.0.1"
;; Query time: 642 msec
+
SOLR_SECURITY_MANAGER_ENABLED=true
;; SERVER: 192.168.201.1#53(192.168.201.1)
+
SOLR_OPTS="$SOLR_OPTS -Dsolr.allowUrls=http://localhost:8983"
;; WHEN: Mon Mar 27 10:43:46 2006
+
__EOF__
;; MSG SIZE  rcvd: 201
 
 
</pre>
 
</pre>
  
==SSL-Connection==
+
System Limits anpassen
Um die Verschlüsselung bei den einzelnen Protokollen zu testen, kann man folgende Befehle aufrufen.
 
 
 
===POP3S===
 
<pre>
 
# for pop:
 
openssl s_client -connect localhost:995
 
</pre>
 
  
===IMAPSSL===
 
 
<pre>
 
<pre>
openssl s_client -connect localhost:993
+
cat > /etc/security/limits.d/90-solr.conf << __EOF__
 +
solr    soft    nofile  65536
 +
solr    soft    nproc  65536
 +
solr    hard    nofile  65536
 +
solr    hard    nproc  65536
 +
__EOF__
 
</pre>
 
</pre>
  
===SMTP/TLS (STARTTLS)===
+
==== Starten ====
 
<pre>
 
<pre>
openssl s_client -crlf -starttls smtp -connect localhost:25
+
systemctl daemon-reload
 +
systemctl enable solr.service
 +
systemctl start solr.service
 +
systemctl status -l solr
 
</pre>
 
</pre>
  
oder bei korrekten Port 465
 
<pre>
 
openssl s_client -crlf -starttls smtp -connect localhost:465
 
</pre>
 
  
====Fehlermeldungen====
+
==== Dovecot Anpassungen ====
<pre>
 
CONNECTED(00000768)
 
11128:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:.\ssl\s23_clnt.c:583:
 
</pre>
 
Diese Fehler tritt auf, wenn die Rechte des Server-Zertifikats '''/var/qmail/control/servercert.pem''' nicht korrekt sind.
 
  
==Virtuelle Mail-Domain mit vpopmail anlegen==
+
SOLR muss laufen um die Grundanpassungen für dovecot vorzunehmen
  
 
<pre>
 
<pre>
# /home/vpopmail/bin/vadddomain test.braunschweig-lions.de
+
sudo -u solr /opt/solr/bin/solr create -c dovecot
Please enter password for postmaster:
 
enter password again:
 
 
</pre>
 
</pre>
  
Nun ist die Test-Domain in vpopmail angelegt, was man auch nochmal leicht überprüfen kann:
 
 
<pre>
 
<pre>
# /home/vpopmail/bin/vdominfo test.braunschweig-lions.de
+
cd /var/solr/data/dovecot/conf
domain: test.braunschweig-lions.de
+
rm -f schema.xml managed-schema.xml solrconfig.xml
uid:   89
+
wget https://notes.sagredo.eu/files/qmail/solr/9.5/solr-schema-9.5.0.xml -O schema.xml
gid:    89
+
wget https://notes.sagredo.eu/files/qmail/solr/9.5/solrconfig-9.5.0.xml -O solrconfig.xml
dir:    /home/vpopmail/domains/test.braunschweig-lions.de
+
chown solr:solr solrconfig.xml schema.xml
users: 1
 
 
</pre>
 
</pre>
  
==Test-Mailaccount anlegen==
+
anschließend die Datei '''/etc/dovecot/local.conf''' anpassen
  
 
<pre>
 
<pre>
# /home/vpopmail/bin/vadduser dirk@test.braunschweig-lions.de
+
vim /etc/dovecot/local.conf
Please enter password for dirk@test.braunschweig-lions.de:
+
...
enter password again:
+
#--------------------------------------------------------
 +
# 10-mail.conf
 +
#--------------------------------------------------------
 +
...
 +
mail_plugins =  $mail_plugins quota zlib fts fts_solr
 +
..
 +
#--------------------------------------------------------
 +
# 90-plugin.conf
 +
#--------------------------------------------------------
 +
plugin {
 +
...
 +
  # solr
 +
  fts = solr
 +
  fts_solr = url=http://localhost:8983/solr/dovecot/
 +
..
 +
}
 
</pre>
 
</pre>
  
==Mailaccount/Mailserver testen==
+
==== Control panel setup ====
  
Nun kann mit einem Mailprogramm die Funktion getestet werden, folgende Daten sind dabei in diesem Beispiel als Mail-Konto einzutragen:
+
===== virtuellen Host anlegen =====
  
 
<pre>
 
<pre>
Posteingangsserver (POP3/IMAP/PO3S/IMAPS): test.braunschweig-lions.de
+
cat > /etc/httpd/cond.d/solr.afdb.de.conf << __EOF__
Postausgangsserver (SMTP)                : test.braunschweig-lions.de
+
<VirtualHost 81.169.197.241:443>
 +
#-------------------------------------------------------------------------
 +
# solr.afdb.de
 +
#
 +
# webmaster        : webmaster@schlicker.org
 +
# betreiber [email] : karl
 +
# angelegt [von]    : 2024-10-06 [karl]
 +
# gruppe            : wwwgrp01
 +
#
 +
#-------------------------------------------------------------------------
  
Benutzername (POP/IMAP/SMTP-AUTH)        : dirk@test.braunschweig-lions.de (Volle E-Mail Adresse)
+
#  General setup for the virtual host
Kennwort                                : (wie oben festgelegt)
+
DocumentRoot /www/solr.afdb.de/www
</pre>
+
ServerName solr.afdb.de
 +
ServerAlias solr.afdb.de
 +
ServerAdmin karl@schlicker.org
  
Folgende Core-Tests sollten durchgeführt werden:
+
CustomLog /www/solr.afdb.de/logs/access.log combined
 +
ErrorLog  /www/solr.afdb.de/logs/error.log
  
:* E-Mail von extern an die neue Test-Adresse versenden (dirk@test.braunschweig-lions.de)
+
SSLEngine on
:* E-Mail von der Test-Adresse an externen Empfänger versenden, z.B. web.de, link-innovation.de etc.
+
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
:* Die Protokolle POP3, IMAP und SMTP mit und ohne SSL testen
+
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
:* Die verschiendenen Authentifizierungen (PLAIN, CRAM-MD5...)
+
SSLHonorCipherOrder on
:* SMTP after POP und SMTP mit Authentifizierung testen
+
SSLCompression      off
 +
SSLSessionTickets  off
  
:* Server erneut auf offenes Relay überprüfen
+
SSLCertificateFile /etc/letsencrypt/live/solr.afdb.de/cert.pem
  z.B. mit http://www.abuse.net/relay.html
+
SSLCertificateKeyFile /etc/letsencrypt/live/solr.afdb.de/privkey.pem
 +
SSLCertificateChainFile /etc/letsencrypt/live/solr.afdb.de/fullchain.pem
  
Eine Liste der Features die man überprüfen sollte findet sich hier:
+
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
:* http://www.shupp.org/toaster/#what
+
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
  
==qmail-Logfiles beobachten==
+
DirectoryIndex index.html index.php
  
Hier einige Beispiele wie die Logfiles aussehen sollten.
+
<Directory "/www/mail.afdb.de/www/">
 +
  Require all granted
 +
  RewriteEngine On
 +
</Directory>
  
Logfile beim Empfang einer Mail von Extern:
+
SSLProxyEngine On
<pre>
+
ProxyRequests Off
# tail -f /var/log/qmail/current | /usr/local/bin/tai64nlocal
+
ProxyPass        / http://localhost:8983/
 +
ProxyPassReverse / http://localhost:8983/
  
2006-03-27 07:50:05.411625500 delivery 41: success: 213.252.153.34_accepted_message./Remote_host_said:_250_ok_1143438605_qp_17747/
+
</VirtualHost>
2006-03-27 07:50:05.411645500 status: local 0/10 remote 0/20
+
__EOF__
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
 
 
</pre>
 
</pre>
  
Logfile beim Antworten auf die eben erhaltene Mail:
+
===== SOLR absichern =====
 
<pre>
 
<pre>
# tail -f /var/log/qmail/current | /usr/local/bin/tai64nlocal
+
cat > /var/solr/data/security.json << __EOF__
 +
{
 +
"authentication":{
 +
"blockUnknown": true,
 +
"class":"solr.BasicAuthPlugin",
 +
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="},
 +
"realm":"My Solr users",
 +
"forwardCredentials": false
 +
},
 +
"authorization":{
 +
"class":"solr.RuleBasedAuthorizationPlugin",
 +
"permissions":[{"name":"security-edit","role":"admin"}],
 +
"user-role":{"solr":"admin"}
 +
},
 +
"auditlogging":{
 +
"class": "solr.SolrLogAuditLoggerPlugin",
 +
"async": true,
 +
"blockAsync" : false,
 +
"numThreads" : 2,
 +
"queueSize" : 4096,
 +
"eventTypes": ["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"]
 +
}
 +
}
 +
__EOF__
  
2006-03-27 11:08:03.335850500 new msg 24841546
+
chown solr:solr /var/solr/data/security.json
2006-03-27 11:08:03.335868500 info msg 24841546: bytes 775 from <dirk@test.braunschweig-lions.de> qp 29760 uid 89
+
chmod o-r /var/solr/data/security.json
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
 
</pre>
 
  
Den Timestamp kann man zu einem lesbaren Text umwandeln, indem man die Ausgabe durch <code>/usr/local/bin/tai64nlocal</code> "piped", wie oben zu sehen. In <code>/var/log/qmail/smtpd/current</code> kann man den SMTP-Server beobachten.:
+
systemctl restart solr
<pre>
 
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
 
 
</pre>
 
</pre>
  
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:
+
Anschließend kann sich über '''https://solr.afdb.de''' anmelden, und die Anpassungen machen und einen User '''dovecot''' wie gezeigt konfigurieren.
  
:* <code>/var/log/qmail/*</code>
+
[[Datei:Solr control panel.png|1200px]]
:* <code>/var/log/maillog</code>
 
  
=Optionales=
+
zum Schluß in der Daeit '''/etc/dovecot/local.conf''' die SOLR Einstellungen anpassen
  
==Spam- und Virenfilter mit SpamAssassin und ClamAV==
+
<pre>
 +
vim /etc/dovecot/local.conf
 +
..
 +
#--------------------------------------------------------
 +
# 90-plugin.conf
 +
#--------------------------------------------------------
 +
plugin {
 +
...
 +
  # solr
 +
  fts = solr
 +
  fts_solr = url=http://dovecot:4Dovecot2024!@localhost:8983/solr/dovecot/
 +
..
 +
}
  
'''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 <code>arch</code> abfragen. <code>cat /etc/issue</code> gibt Informationen zum Betriebssystem aus.
+
systemctl restart dovecot
 +
</pre>
  
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.  
+
==== Test ====
 
+
<pre>
Siehe dazu auch:
+
telnet 0 143
 
+
Trying 0.0.0.0...
:* [http://www.nrg4u.com/qmail/the-big-qmail-picture-103-a4.pdf The big qmail picture (PDF)]
+
Connected to 0.
 +
Escape character is '^]'.
 +
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
 +
a login postmaster@afdb.de 4Postmaster2024!
 +
a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE COMPRESS=DEFLATE] Logged in
 +
a select Inbox
 +
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
 +
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
 +
* 9 EXISTS
 +
* 0 RECENT
 +
* OK [UNSEEN 1] First unseen.
 +
* OK [UIDVALIDITY 1730639884] UIDs valid
 +
* OK [UIDNEXT 42] Predicted next UID
 +
* OK [HIGHESTMODSEQ 19] Highest
 +
a OK [READ-WRITE] Select completed (0.001 + 0.000 secs).
 +
a SEARCH text "Dovecot"
 +
* SEARCH
 +
a OK Search completed (0.002 + 0.000 + 0.001 secs).
 +
a logout
 +
* BYE Logging out
 +
a OK Logout completed (0.001 + 0.000 secs).
 +
Connection closed by foreign host.
 +
</pre>
  
===Installation der nötigen RPM-Pakete===
+
===Automatischen Löschen (expunge) ===
  
'''i386'''
+
Skript für das automatische löschen anlegen
 
<pre>
 
<pre>
yum install clamav clamd clamav-db spamassassin perl-suidperl pcre-devel pcre
+
cd /usr/local/dovecot/bin/
 +
wget https://notes.sagredo.eu/files/qmail/dovecot_expunge/dovecot_expunge-cb
 +
mv dovecot_expunge-cb dovecot_expunge.sh
 +
chmod +x /usr/local/dovecot/bin/dovecot_expunge.sh
 
</pre>
 
</pre>
  
'''X86_64''' (Hinweis in der Einleitung beachten)
+
und Cronjob definieren
 
<pre>
 
<pre>
yum install spamassassin clamav clamd clamav-db  perl-suidperl pcre pcre-devel
+
cat > /etc/cron.d/dovecot_expunge << __EOF__
 +
# Dovecot expunge (Trash und Junk leeren)
 +
40 3 * * Sun /usr/local/dovecot/bin/dovecot_expunge.sh >> /var/log/dovecot/dovecot_expunge.log 2>&1
 +
__EOF__
 
</pre>
 
</pre>
  
===SpamAssassin===
+
=Funktionstest=
 +
 
 +
==DNS-Konfiguration==
  
Starten und für den Systemstart konfigurieren:
+
 
 +
Nach dem der BIND die Änderungen übernommen hat, sollte man die korrekte DNS-Konfiguration von einem anderen Rechner aus testen:
 
<pre>
 
<pre>
/etc/init.d/spamassassin start
+
[ktsadmin@truhe ~]$ dig afdb.de mx
chkconfig spamassassin on
+
 
</pre>
+
; <<>> DiG 9.11.25-RedHat-9.11.25-2.fc33 <<>> afdb.de mx
 +
;; global options: +cmd
 +
;; Got answer:
 +
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42743
 +
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
 +
 
 +
;; OPT PSEUDOSECTION:
 +
; EDNS: version: 0, flags:; udp: 65494
 +
;; QUESTION SECTION:
 +
;afdb.de. IN MX
  
====PLUGINS====
+
;; ANSWER SECTION:
 +
afdb.de. 86400 IN MX 10 mail.afdb.de.
 +
afdb.de. 86400 IN MX 40 old.afdb.de.
  
=====RelayCountry=====
+
;; Query time: 24 msec
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.  
+
;; SERVER: 127.0.0.53#53(127.0.0.53)
 +
;; WHEN: Di Dez 29 14:57:50 CET 2020
 +
;; MSG SIZE  rcvd: 77
  
<pre>
 
yum install geoipupdate-cron geoipupdate-cron6 geoipupdate php-pecl-geoip GeoIP-GeoLite-data-extra GeoIP-GeoLite-data
 
 
</pre>
 
</pre>
  
Danach sollten unter folgende Verzeichnis die GeoIP-DBs enthalten sein
+
Anschließend die IP-Addresse des Mailservers feststellen
 
<pre>
 
<pre>
cd /usr/share/GeoIP/
+
ktsadmin@truhe ~]$ dig mail.afdb.de
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
 
</pre>
 
  
Anschließend fügt man folgende Zeile in die Datei '''/etc/mail/spamassassin/init.pre''' ein:
+
; <<>> DiG 9.11.25-RedHat-9.11.25-2.fc33 <<>> mail.afdb.de
<pre>
+
;; global options: +cmd
loadplugin Mail::SpamAssassin::Plugin::RelayCountry
+
;; Got answer:
</pre>
+
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3256
 +
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
  
und legt unter */etc/mail/spamassassin/ eine Konfigurationsdatei namens '''RelayCountry.cf''' mit folgenden Inhalt an:
+
;; OPT PSEUDOSECTION:
<pre>
+
; EDNS: version: 0, flags:; udp: 65494
ifplugin Mail::SpamAssassin::Plugin::RelayCountry
+
;; QUESTION SECTION:
add_header all Relay-Country _RELAYCOUNTRY_
+
;mail.afdb.de. IN A
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
 
</pre>
 
  
Anschließend führt man folgende Befehle aus:
+
;; ANSWER SECTION:
<pre>
+
mail.afdb.de. 5566 IN A 85.214.138.131
sa-update
 
service spamassassin restart
 
</pre>
 
  
=====eXtremSHOk=====
+
;; Query time: 0 msec
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.  
+
;; SERVER: 127.0.0.53#53(127.0.0.53)
 +
;; WHEN: Di Dez 29 14:59:20 CET 2020
 +
;; MSG SIZE  rcvd: 57
  
<pre>
 
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
 
 
</pre>
 
</pre>
  
 +
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:
 +
<pre>
 +
dig -x 85.214.138.131
 +
 +
; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8 <<>> -x 85.214.138.131
 +
;; global options: +cmd
 +
;; Got answer:
 +
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4278
 +
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 +
 +
;; OPT PSEUDOSECTION:
 +
; EDNS: version: 0, flags:; udp: 4096
 +
; COOKIE: 78173c5c83c23f47f7e89df15feb45ba1306ae8d8730e6f4 (good)
 +
;; QUESTION SECTION:
 +
;131.138.214.85.in-addr.arpa. IN PTR
 +
 +
;; ANSWER SECTION:
 +
131.138.214.85.in-addr.arpa. 1800 IN PTR mail.afdb.de.
  
[https://www.syn-flut.de/spamassassin-erkennungsrate-deutlich-verbessern https://www.syn-flut.de/spamassassin-erkennungsrate-deutlich-verbessern]
+
;; Query time: 1 msec
 +
;; SERVER: 81.169.163.106#53(81.169.163.106)
 +
;; WHEN: Di Dez 29 16:05:30 CET 2020
 +
;; MSG SIZE  rcvd: 110
  
====Probleme====
 
Häufig hilft es, bevor man lange nach der Fehlerursache im Qmail-Scanner zu suchen, einfach zuerst Spamassassin upzudaten.
 
<pre>
 
sa-update
 
/etc/init.d/spamassassin restart
 
</pre>
 
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.
 
<pre>
 
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
 
 
</pre>
 
</pre>
  
===ClamAV konfigurieren===
+
==SSL-Connection==
 +
Um die Verschlüsselung bei den einzelnen Protokollen zu testen, kann man folgende Befehle aufrufen.
  
Der Benutzer/die Gruppe qscand müssen bereits angelegt sein, siehe auch Qmail-Scanner Installation.
+
===POP3S===
 
<pre>
 
<pre>
groupadd qscand
+
# for pop:
useradd -c "Qmail-Scanner Account" -g qscand -d /home/qscand -s /bin/false qscand
+
openssl s_client -connect localhost:995
 
</pre>
 
</pre>
  
Mit <code>vi /etc/group</code> editieren und den Benutzer ''clamav'' in die Benutzer-Gruppe ''qscand'' aufnehmen. Beispiel:
+
===IMAPSSL===
 
<pre>
 
<pre>
(...)
+
openssl s_client -connect localhost:993
qscand:x:510:clamav
 
 
</pre>
 
</pre>
  
Den clamd-Benutzer einstellen. Mit <code>vi /etc/clamd.conf</code> die Konfigurationsdatei öffen und folgende Änderung vornehmen:
+
===SMTP/TLS (STARTTLS)===
 
<pre>
 
<pre>
# Run as a selected user (clamd must be started by root).
+
openssl s_client -crlf -starttls smtp -connect localhost:587
# Default: disabled
 
#User clamav
 
User qscand
 
 
</pre>
 
</pre>
  
Berechtigungen setzen, clamd starten und für den Systemstart konfigurieren:
+
==Virtuelle Mail-Domain mit vpopmail anlegen==
<pre>
 
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
 
</pre>
 
  
Prüfen ob clamd wirklich als Benutzer ''qscand'' gestartet wurde, das vermeidet spätere Probleme:
 
 
<pre>
 
<pre>
ps waux|grep clamd
+
# /home/vpopmail/bin/vadddomain afdb.de
qscand    1689  0.0  1.0  14248 10344 ?        Ss  14:24  0:00 clamd
+
Please enter password for postmaster:
root      1703  0.0  0.0  3784  768 pts/1    S+  14:25  0:00 grep clamd
+
enter password again:
 
</pre>
 
</pre>
  
====Freshclam====
+
Nun ist die Test-Domain in vpopmail angelegt, was man auch nochmal leicht überprüfen kann:
Mit '''freshclam''' werden die Virensignaturen aktualisiert.
 
 
 
Mit <code>vi /etc/freshclam.conf</code> die Konfigurationsdatei öffen und folgende Änderung vornehmen:
 
 
<pre>
 
<pre>
# Comment or remove the line below.
+
# /home/vpopmail/bin/vdominfo afdb.de
Example
+
domain: afdb.de
#Example
+
uid:    89
....
+
gid:    89
# Uncomment the following line and replace XY with your country
+
dir:   /home/vpopmail/domains/afdb.de
# code. See http://www.iana.org/cctld/cctld-whois.htm for the full list.
+
users: 1
# Default: There is no default, which results in an error when running freshclam
+
</pre>
#DatabaseMirror db.XY.clamav.net
 
DatabaseMirror db.DE.clamav.net
 
  
# Send the RELOAD command to clamd.
+
==Test-Mailaccount anlegen==
# Default: disabled
 
#NotifyClamd
 
NotifyClamd
 
  
# By default when started freshclam drops privileges and switches to the
+
<pre>
# "clamav" user. This directive allows you to change the database owner.
+
# /home/vpopmail/bin/vadduser dirk@test.braunschweig-lions.de
# Default: clamav (may depend on installation options)
+
Please enter password for dirk@test.braunschweig-lions.de:
#DatabaseOwner clamav
+
enter password again:
DatabaseOwner qscand
 
 
</pre>
 
</pre>
  
und dann einmal die Datenbank manuell aktualisieren.
+
==Mailaccount/Mailserver testen==
<pre>
+
 
# freshclam
+
Nun kann mit einem Mailprogramm die Funktion getestet werden, folgende Daten sind dabei in diesem Beispiel als Mail-Konto einzutragen:
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)
 
</pre>
 
  
====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'''.
 
 
<pre>
 
<pre>
chown qscand /usr/sbin/clamd*
+
Posteingangsserver (POP3/IMAP/PO3S/IMAPS): mail.afdb.de
chown qscand /var/clam*
+
Postausgangsserver (SMTP)                : mail.afdb.de
chown qscand /var/run/clam*
 
chown -R qscand /var/log/clamav/
 
chown -R qscand /var/lib/clamav/
 
  
/etc/init.d/clamd restart
+
Benutzername (POP/IMAP/SMTP-AUTH)        : postmaster@afdb.de (Volle E-Mail Adresse)
freshclam -v
+
Kennwort                                : (wie oben festgelegt)
 
</pre>
 
</pre>
  
'''WICHTIG''':
+
Folgende Core-Tests sollten durchgeführt werden:
  
Anscheinend hat sich ab Version 0.9 die Konfigurationsdatei geändert. Jetzt muss hinter jeden Parameter immer ein '''yes''' oder ein '''no''' folgen.
+
:* 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
  
Beispiel:
+
=Erweiterungen=
  
'''vor Version 0.9'''
+
Den Qmail-Toaster um zusätzliche Erweiterungen und Funkionen bzgl. SPAM-Prävention und Viren-Überprüfung erweitern.
<pre>
 
ScanMail
 
</pre>
 
  
'''ab Version 0.9'''
+
== Letsencrypt Zertifikate einbauen ==
<pre>
 
ScanMail yes
 
</pre>
 
  
Ansonsten startet der Clamav-Daemon nicht.
+
Als erstes beantragt man ein Zertifikat für den Mailserver (mail.afdb.de) bei Letencrypt, wie [[Letsencrypt|hier]] beschrieben
  
====WICHTIG: Logrotate für ClamAV auf den qscand-User anpassen====
+
=== Zertifikate automatisch erneuern ===
  
Wenn Logrotate die Logfiles in <code>/var/log/clamav</code> rotiert, hat der User "qscand", unter dem ClamAV läuft, keine Berechtigung mehr. Clamd startet nicht korrekt und freshclam kann kein Update mehr einspielen.  
+
Zuerst legt man ein Skript unter '''/var/qmail/bin/''' an, welches automatisch das Letsencrypt zertifikat korrekt verteilt.
  
Für die Anpassung folgende Änderungen vornehmen:
 
 
Mit <code>vi /etc/logrotate.d/clamav</code> die Konfigurationsdatei öffnen und die Zeile <code>create</code> entsprechend anpassen:
 
 
<pre>
 
<pre>
/var/log/clamav/clamd.log {
+
cat > /var/qmail/bin/renew_cert.sh << __EOT__
    missingok
+
#!/bin/bash
    notifempty
+
############################################################################
    create 664 qscand clamav
+
#
    postrotate
+
#  @description:        build the servercert for qmail from letsencrypt cert
        killall -HUP clamd 2>/dev/null || :
+
#  @author:            Karl Schlicker
    endscript
+
#  @history:           
}
+
#      20170708        First Version
</pre>
+
#
 +
############################################################################
 +
SERVER_CERT="servercert.pem"
 +
QMAIL_CONTROL_DIR="/var/qmail/control"
 +
BACKUP_DIR="\${QMAIL_CONTROL_DIR}/backup"
 +
BACKUP_FILE="\${BACKUP_DIR}/${SERVER_CERT}.$( date +%F)"
 +
LETSENCRYPT_CERT_PATH="/etc/letsencrypt/live/mail.schlicker.org"
 +
 
 +
# check, if backup dir exist
 +
if [ ! -d "${BACKUP_DIR}" ]; then
 +
        /bin/mkdir "\${BACKUP_DIR}"
 +
fi
  
 +
# first make a backup
 +
/bin/cp "\${QMAIL_CONTROL_DIR}/\${SERVER_CERT}"  "\${BACKUP_FILE}"
  
Mit <code>vi /etc/logrotate.d/freshclam</code> die Konfigurationsdatei öffnen und die Zeile <code>create</code> entsprechend anpassen:
+
echo "\$(date +%F):"
<pre>
 
/var/log/clamav/freshclam.log {
 
    missingok
 
    notifempty
 
    create 664 qscand clamav
 
}
 
</pre>
 
  
====WICHTIG: Berechtigungen anpassen, auch nach jedem ClamAV Update nötig!====
+
# concat the cert and the key
 +
/bin/cat "\${LETSENCRYPT_CERT_PATH}/fullchain.pem" "\${LETSENCRYPT_CERT_PATH}/privkey.pem" > "\${QMAIL_CONTROL_DIR}/\${SERVER_CERT}"
  
<pre>
+
# Qmail restart & Dovecot restart
chown -R qscand /var/clamav/ /var/log/clamav/ /var/run/clamav/
+
/usr/bin/qmailctl restart
chmod -R g+w /var/clamav/ /var/log/clamav/ /var/run/clamav/
+
systemctl restart dovecot
</pre>
 
  
ClamAV Neustarten und mit freshclam testen ob ein Update klappt.
+
__EOT__
  
<pre>
+
chmod +x /var/qmail/bin/renew_cert.sh
service clamd restart
 
freshclam
 
 
</pre>
 
</pre>
  
In der Datei <code>/var/spool/qscan/qmail-queue.log</code> 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:
+
Per Cronjob jeden Sonntag erneuern lassen
 
<pre>
 
<pre>
Wed, 03 Sep 2008 09:53:36 CEST:22725: clamdscan: finished scan in 0.033611 secs
+
# Qmail Cert renew
 +
0 0 * * Sun root /var/qmail/bin/renew_cert.sh >> /var/log/letsencrypt/renew_qmail_cert.log 2>&1
 
</pre>
 
</pre>
  
===Qmail-Scanner (Salvatore Toribio Patch Version) installieren===
+
=== Zertifikatablauf überwachen ===
  
User anlegen, falls noch nicht vorhanden:
+
Den Ablauf der Zertifikate kann man über folgenden Webseite kostenlos überwachen lassen.
<pre>
+
 
groupadd qscand
+
[https://redsift.com/pulse-platform/certificates RedSift]
useradd -c "Qmail-Scanner Account" -g qscand -d /home/qscand -s /bin/false qscand
+
 
</pre>
+
==SpamAssassin==
  
====Abhängigkeit: maildrop installieren====
+
===Referenzen===
 +
* Info: http://spamassassin.apache.org/
 +
* Docs: http://spamassassin.apache.org/full/3.4.x/doc/
 +
* https://www.syn-flut.de/spamassassin-erkennungsrate-deutlich-verbessern
  
Der Qmail-Scanner benötigt ''reformime'' aus dem ''maildrop'' Paket.
+
===Installation der nötigen RPM-Pakete===
  
Hier '''immer''' nach der aktuellsten Version von ''maildrop'' schauen und diese benutzen. Entsprechend den wget-Befehl anpassen!
+
Wir installieren zuerst die RPM-Pakete, später bauen wir aus perl CPAN spamassassin neu.
:* http://prdownloads.sourceforge.net/courier
 
 
<pre>
 
<pre>
cd /var/src/
+
dnf -y install spamassassin spamassassin-iXhash2 perl-Razor-Agent pyzor  p7zip
mkdir maildrop
+
</pre>
cd maildrop/
 
  
Immer nach aktuellster Version schauen (siehe oben)
+
=== Verzeichnisse, User und Gruppen anlegen ===
 +
<pre>
 +
mkdir -p /etc/mail/spamassassin /home/spamd /var/log/spamassassin
  
wget http://downloads.sourceforge.net/project/courier/maildrop/2.7.1/maildrop-2.7.1.tar.bz2
+
groupadd spamd
tar xjf maildrop-2.7.1.tar.bz2
+
useradd -g spamd -d /home/spamd spamd
cd maildrop-2.7.1/
+
chown -R spamd:spamd /home/spamd
  
./configure
+
chgrp apache /var/log/spamassassin
make
+
chmod g+w /var/log/spamassassin
make install-strip
 
make install-man
 
 
</pre>
 
</pre>
  
====Qmail-Scanner konfigurieren und installieren====
+
===Plugins===
 +
 
 +
SpamAssassin lässt sich mit vielen Plugins aufwerten und damit die Erkennungsrate von SPAMs verbessern
  
'''Hinweis:''' Auch beim Qmail-Scanner immer nach der aktuellsten Version schauen!
+
====Razor====
  
:* http://toribio.apollinare.org/qmail-scanner/
+
Konfiguration für Razor anlegen
 
<pre>
 
<pre>
cd /var/src/
+
mkdir -p /etc/mail/spamassassin/.razor
mkdir qmail-scanner
+
razor-admin -home=/etc/mail/spamassassin/.razor -register
cd qmail-scanner
+
razor-admin -home=/etc/mail/spamassassin/.razor -create
 +
razor-admin -home=/etc/mail/spamassassin/.razor -discover
 
</pre>
 
</pre>
  
 +
Set up permissions
 
<pre>
 
<pre>
wget http://toribio.apollinare.org/qmail-scanner/download/q-s-2.11st-20130319.tgz
+
chgrp apache /etc/mail/spamassassin/.razor/identity-*
tar xvzpf q-s-2.11st-20130319.tgz
+
chmod 640 /etc/mail/spamassassin/.razor/identity-*
cd qmail-scanner-2.11st
+
chmod 644 /etc/mail/spamassassin/.razor/razor-agent.log
 
</pre>
 
</pre>
  
Nun muss der Qmail-Scanner konfiguriert werden. Folgende Optionen haben sich bewährt.  
+
'''/etc/sysconfig/spamassassin''' anpassen
 +
<pre>
 +
# Options to spamd
 +
#SPAMDOPTIONS="-c -m5 -H --razor-home-dir='/var/lib/razor/' --razor-log-file='sys-syslog'"
 +
SPAMDOPTIONS="-c -m5 -u spamd -H /home/spamd --razor-home-dir='/etc/mail/spamassassin/.razor/' --razor-log-file='/var/log/spamassassin/razor_agent.log'"
 +
</pre>
  
Die Optionen:
+
====Pyzor====
:* --domain braunschweig-lions.de
+
<pre>
:* --admin-fromname "Braunschweig Lions Postmaster"
+
mkdir -p /etc/mail/spamassassin/.pyzor
:* --local-domains braunschweig-lions.de
+
chown spamd:spamd /etc/mail/spamassassin/.pyzor
 +
</pre>
  
müssen entsprechend der Installation angepasst werden.
+
====RelayCountry====
 +
Für SpamAssassin gibt es ein Plugin namens RelayCountry, 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.  
  
 +
===== Benötigte Pakete installieren =====
 +
Da dieses nicht im RPM-Paket von SpamAssassin enthalten ist, müssen wir hier SpamAssassin neu bauen. Dazu müssen wir zuerst perl-CPAN installieren und konfigurieren.
 +
Zuerst installiert man die dafür benötigten Pakete
 
<pre>
 
<pre>
./configure --qs-user qscand --qs-group qscand --spooldir /var/spool/qscan --qmaildir /var/qmail --bindir /var/qmail/bin
+
dnf -y install perl-CPAN perl-YAML perl-JSON-PP perl-Test perl-Socket6 perl-IO-Socket-INET6
--qmail-queue-binary /var/qmail/bin/qmail-queue  --admin alert --domain mailx.link-innovation.com --admin-fromname "Link Innovation
+
dnf -y install perl-BerkeleyDB perl-DBD-MySQL
Postmaster" --notify sender,nmlvadm,precips --local-domains mailx.link-innovation.com --silent-viruses auto --virus-to-delete 1
+
dnf -y install perl-Net-Patricia perl-Mail-SPF_XS perl-Mail-SPF perl-Net-IP perl-Net-DNS
--skip-text-msgs 1 --lang de_DE --debug 0 --minidebug 1 --add-dscr-hdrs 0 --dscr-hdrs-text "X-Qmail-Scanner" --archive 0 
+
dnf -y install perl-Geo-IP GeoIP-GeoLite-data-extra geoipupdate
--settings-per-domain 1 --unzip 0 --max-zip-size 1000000000 --max-unpacked-files 10000 --redundant 1 --log-details syslog --log-crypto 0
+
dnf -y install perl-Time-HiRes perl-Devel-Peek perl-open
--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
 
 
</pre>
 
</pre>
  
'''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.
+
===== CPAN Module installieren und RelayCount in SpamAssassin bauen =====
 +
und anschließend installiert man über CPAN die fehlenden Module und installiert am Schluß RelayCountry.
 +
<pre>
 +
cpan -i IP::Country::Fast
 +
cpan -i Devel::Cycle
 +
cpan -i IO::String
 +
cpan -i Test::Taint
 +
cpan -i Readonly
 +
cpan -i Params::Validate
 +
cpan -i Specio
 +
cpan -i Params::ValidationCompiler
 +
cpan -i DateTime::Locale
 +
cpan -i DateTime::TimeZone
 +
cpan -i MaxMind::DB::Metadata
 +
cpan -i MaxMind::DB::Reader
 +
cpan -i GeoIP2::Database::Reader
 +
cpan -i Mail::SpamAssassin::Plugin::RelayCountry
 +
</pre>
  
oder man benutzt folgendes Skript:
+
Danach sollten unter folgende Verzeichnis die GeoIP-DBs enthalten sein
 
<pre>
 
<pre>
#!/bin/sh
+
cd /usr/share/GeoIP/
./configure    --qs-user qscand \
+
ls -l
                --qs-group qscand \
+
insgesamt 113328
                --spooldir /var/spool/qscan \
+
lrwxrwxrwx 1 root root      16 28. Nov 2019 GeoIPASNum.dat -> GeoLiteASNum.dat
                --qmaildir /var/qmail \
+
-rw-r--r-- 1 root root  5628114 19. Jun 2018  GeoIPASNumv6.dat
                --bindir /var/qmail/bin \
+
lrwxrwxrwx 1 root root      15 28. Nov 2019  GeoIPCity.dat -> GeoLiteCity.dat
                --qmail-queue-binary /var/qmail/bin/qmail-queue \
+
lrwxrwxrwx 1 root root      17 28. Nov 2019  GeoIPCityv6.dat -> GeoLiteCityv6.dat
                --admin alert \
+
lrwxrwxrwx 1 root root      18 22. Mär 2020  GeoIP.dat -> GeoLiteCountry.dat
                --domain braunschweig-lions.de \
+
-rw-r--r-- 1 root root  2322773 19. Jun 2018  GeoIPv6.dat
                --admin-fromname "Braunschweig Lions Postmaster" \
+
-rw-r--r-- 1 root root 56548946  7. Jun 2018  GeoLite2-City.mmdb
                --notify sender,nmlvadm,precips \
+
-rw-r--r-- 1 root root  3423846  7. Jun 2018  GeoLite2-Country.mmdb
                --local-domains mailx.braunschweig-lions.de \
+
-rw-r--r-- 1 root root  4638365  4. Apr 2018 GeoLiteASNum.dat
                --silent-viruses auto \
+
lrwxrwxrwx 1 root root      16 28. Nov 2019  GeoLiteASNumv6.dat -> GeoIPASNumv6.dat
                --virus-to-delete 1 \
+
-rw-r--r-- 1 root root 20539238  4. Apr 2018  GeoLiteCity.dat
                --skip-text-msgs 1 \
+
-rw-r--r-- 1 root root 21684452 19. Jun 2018  GeoLiteCityv6.dat
                --lang de_DE \
+
-rw-r--r-- 1 root root  1242574  4. Apr 2018  GeoLiteCountry.dat
                --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
 
 
</pre>
 
</pre>
Nun geht es mit der interaktiven Konfiguration des configure-Scripts weiter.
 
  
:* 1. Schritt: Mit [RETURN] bestätigen
+
===== Konfiguration =====
:* 2. Schritt: Mit [y] und [RETURN] bestätigen
+
Anschließend fügt man folgende Zeile in die Datei '''/etc/mail/spamassassin/init.pre''' ein:
 +
<pre>
 +
#
 +
# Relay Country
 +
loadplugin Mail::SpamAssassin::Plugin::RelayCountry
 +
</pre>
  
 +
und fügt am Ende von  '''/etc/mail/spamassassin/local.cf''' folgenden Inhalt hinzu:
 +
<pre>
 +
vim /etc/mail/spamassassin/local.cf
 +
...
  
:* 3. Schritt: Mit [y] und [RETURN] bestätigen
+
ifplugin Mail::SpamAssassin::Plugin::RelayCountry
:* 4. Schritt: Das anlegen der Dateien mit [RETURN] bestätigen
+
add_header all Relay-Country _RELAYCOUNTRY_
:* 5. Schritt: Das Routieren der Logfiles einstellen
+
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
 +
</pre>
  
<pre>
 
# cp contrib/logrotate.qmail-scanner /etc/logrotate.d/qmailscanner
 
 
</pre>
 
</pre>
  
Links:
+
===Konfiguration===
:* http://toribio.apollinare.org/qmail-scanner/index.html
 
:* http://qmail-scanner.sourceforge.net/
 
  
====Einbinden des Qmail-Scanner in die Mail-Queue von qmail====
+
Die Konfigurationsdateien befinden sich im Ordner '''/etc/mail/spamassassin'''.
  
Mit <code>vi /var/qmail/supervise/qmail-smtpd/run</code> das smtp-Runscript bearbeiten und nach <code>#!/bin/sh</code> die folgenden Zeilen einfügen:
+
====local.cf====
 
<pre>
 
<pre>
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
+
# These values can be overridden by editing ~/.spamassassin/user_prefs.cf
export QMAILQUEUE
+
# (see spamassassin(1) for details)
</pre>
 
  
Nun muss noch das ''softlimit'' deutlich erhöht werden. Dazu mit <code>vi /var/qmail/supervise/qmail-smtpd/run</code> das Supervise-Run-Script bearbeiten und den Wert von ''softlimit -m {Wert}'' erhöhen. Z.B. auf '''softlimit -m 80000000'''
+
# These should be safe assumptions and allow for simple visual sifting
 +
# without risking lost emails.
  
Jetzt qmail neu starten:
+
required_hits 5
<pre>
+
report_safe 0
# qmailctl restart
+
rewrite_header Subject [SPAM]
 +
use_bayes 1
 +
bayes_auto_learn 1
 +
use_txrep 1
 +
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
 
</pre>
 
</pre>
  
====Testen====
+
====init.pre====
 +
 
 +
init.pre um das RelayCountry Plugin erweitern.
  
Nun das Senden und Empfangen von Mail ausgiebig testen und dabei aus Ausgabe in <code>/var/spool/qmailscan/qmail-queue.log</code> und <code>/var/log/qmail/smtpd/current</code> beobachten:
 
 
<pre>
 
<pre>
# tail -f /var/spool/qscan/qmail-queue.log /var/log/qmail/smtpd/current
+
# This is the right place to customize your installation of SpamAssassin.
 +
#
 +
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
 +
# tweaked.
 +
#
 +
# This file contains plugin activation commands for plugins included
 +
# in SpamAssassin 3.0.x releases.  It will not be installed if you
 +
# already have a file in place called "init.pre".
 +
#
 +
# There are now multiple files read to enable plugins in the
 +
# /etc/mail/spamassassin directory; previously only one, "init.pre" was
 +
# read.  Now both "init.pre", "v310.pre", and any other files ending in
 +
# ".pre" will be read.  As future releases are made, new plugins will be
 +
# added to new files, named according to the release they're added in.
 +
###########################################################################
 +
 
 +
# URIDNSBL - look up URLs found in the message against several DNS
 +
# blocklists.
 +
#
 +
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
 +
 
 +
# Hashcash - perform hashcash verification.
 +
#
 +
loadplugin Mail::SpamAssassin::Plugin::Hashcash
 +
 
 +
# SPF - perform SPF verification.
 +
#
 +
loadplugin Mail::SpamAssassin::Plugin::SPF
 +
 
 +
# RelayCountry - add metadata for Bayes learning, marking the countries
 +
# a message was relayed through
 +
#
 +
# Note: This requires the IP::Country::Fast Perl module
 +
#
 +
loadplugin Mail::SpamAssassin::Plugin::RelayCountry
 +
 
 
</pre>
 
</pre>
  
Ein- und ausgehende Mails tragen nun im Header eine entsprechende Information, z.B.:
+
=== Benutzereinstellungen (Userpref) ===
 +
Um die SPAM-Erkennung auf Benutzer/Domain-Ebene einstellen zu können, wird eine Datenbank mit den entsprechenden Werten angelegt.
 +
 
 +
==== Datenbank anlegen ====
 
<pre>
 
<pre>
Received: from 85.214.36.143 by web1.braunschweig-lions.de (envelope-from <dirk@example.com>, uid 89) with qmail-scanner-1.25st
+
mysql -u root -p
  (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
+
CREATE DATABASE spamassassin;
X-Spam-Status: No, hits=0.0 required=5.0
+
CREATE USER 'spamassassin'@'127.0.0.1' IDENTIFIED BY '***';
 +
GRANT USAGE ON * . * TO 'spamassassin'@'127.0.0.1' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
 +
USE spamassassin;
 +
CREATE TABLE userpref (
 +
  username varchar(100) NOT NULL default '',
 +
  preference varchar(30) NOT NULL default '',
 +
   value varchar(100) NOT NULL default '',
 +
  prefid int(11) NOT NULL auto_increment,
 +
  PRIMARY KEY (prefid),
 +
  KEY username (username)
 +
) ENGINE=InnoDB;
 +
GRANT ALL PRIVILEGES ON `spamassassin` . * TO 'spamassassin'@'127.0.0.1';
 
</pre>
 
</pre>
  
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.
+
==== Konfigurationsdatei erzeugen ====
: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 <code> /var/spool/qmailscan/qmail-queue.log</code> findet man einen Eintrag dazu:
 
 
<pre>
 
<pre>
Mon, 27 Mar 2006 15:15:26 CEST:1548: +++ starting debugging for process 1548 (ppid=1546) by uid=89
+
cd /etc/mail/spamassassin
Mon, 27 Mar 2006 15:15:26 CEST:1548: w_c: elapsed time from start 0.007668 secs
+
cat > 90-sql.cf << __EOF__
Mon, 27 Mar 2006 15:15:26 CEST:1548: return-path='dirk@test.braunschweig-lions.de', recips='Dirk@example.com'
+
user_scores_dsn                  DBI:mysql:spamassassin:127.0.0.1:3306
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
+
user_scores_sql_password        <password>
Virus', via SMTP from 84.133.206.49
+
user_scores_sql_username        spamassassin
Mon, 27 Mar 2006 15:15:26 CEST:1548: clamdscan: there be a virus! (Eicar-Test-Signature)
+
user_scores_sql_custom_query    SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC
Mon, 27 Mar 2006 15:15:26 CEST:1548: clamdscan: finished scan in 0.017235 secs
+
__EOF__
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
 
 
</pre>
 
</pre>
  
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.:
+
==== Beispieleinträge erzeugen ====
 +
Die Tabelle '''userpref''' mit Mustereinträgen füllen
 
<pre>
 
<pre>
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
+
mysql -h localhost -u root -p
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
+
USE spamassassin;
  1.5 DRUG_ED_CAPS          BODY: Erwähnt Medikament gegen Erektionsstörung
+
INSERT INTO `userpref` VALUES ('$GLOBAL','required_hits','5.0'),('%afdb.de','required_hits','4.0'),('news@footballforum.de',' required_hits','2.5'),('karl@schlicker.org',' required_hits','2.5'),('%afdb.de','blacklist_from','ben@hamsamail.us');
  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
 
 
</pre>
 
</pre>
  
Diese Punkte findet man im Mail-Header der empfangenen Mail wieder:
+
=== Spamassassin TxRep Reputation and Bayesean (SQL) ===
 +
 
 +
Die Bayes-DB für die SPAM-Erkennung und das Lernen von SPAM/HAM-Mails wird in eine Datenbank verschoben/aufgebaut.
 +
 
 +
==== DB-Tabellen anlegen ====
 
<pre>
 
<pre>
X-Spam-Status: No, hits=0.8 required=5.0
+
# mysql -h localhost -u root -p
</pre>
+
 
 +
USE spamassassin;
 +
CREATE TABLE txrep (
 +
username varchar(100) NOT NULL default '',
 +
email varchar(255) NOT NULL default '',
 +
ip varchar(40) NOT NULL default '',
 +
msgcount int(11) NOT NULL default '0',
 +
totscore float NOT NULL default '0',
 +
signedby varchar(255) NOT NULL default '',
 +
last_hit timestamp NOT NULL default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 +
PRIMARY KEY (username,email,signedby,ip),
 +
KEY last_hit (last_hit)
 +
) ENGINE=InnoDB;
  
Bei über 5.0 Punkten (siehe Qmail-Scanner Konfiguration) wird der <code>X-Spam-Status</code> auf <code>Yes</code> gesetzt und der Betreff einer Mail mit ''SPAM ***'' gekennzeichnet. Anhand eines dieser Merkmale, vorzugsweise des Mail-Headers <code>X-Spam-Status</code>, kann der Benutzer erkannten Spam mit seinem Mailprogramm filtern.
+
CREATE TABLE bayes_expire (
 +
  id int(11) NOT NULL default '0',
 +
  runtime int(11) NOT NULL default '0',
 +
  KEY bayes_expire_idx1 (id)
 +
) ENGINE=InnoDB;
  
====SpamAssassin Bayes-Datenbank====
+
CREATE TABLE bayes_global_vars (
 +
  variable varchar(30) NOT NULL default '',
 +
  value varchar(200) NOT NULL default '',
 +
  PRIMARY KEY  (variable)
 +
) ENGINE=InnoDB;
  
SpamAssassin lernt selbst und kann über eine Bayes-Datenbank trainiert werden. Die genaue Funktion kann im SpamAssassin Manual nachgelesen werden http://spamassassin.apache.org/.
+
INSERT INTO bayes_global_vars VALUES ('VERSION','3');
  
Mit dem Bayes-Filter kann die Wirksamkeit der Spam-Erkennung erhöht werden, wenn sie entsprechend trainiert wird.
+
CREATE TABLE bayes_seen (
 +
  id int(11) NOT NULL default '0',
 +
  msgid varchar(200) binary NOT NULL default '',
 +
  flag char(1) NOT NULL default '',
 +
  PRIMARY KEY  (id,msgid)
 +
) ENGINE=InnoDB;
  
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.
+
CREATE TABLE bayes_token (
 +
  id int(11) NOT NULL default '0',
 +
  token char(5) NOT NULL default '',
 +
  spam_count int(11) NOT NULL default '0',
 +
  ham_count int(11) NOT NULL default '0',
 +
  atime int(11) NOT NULL default '0',
 +
  PRIMARY KEY  (id, token),
 +
  INDEX bayes_token_idx1 (token),
 +
  INDEX bayes_token_idx2 (id, atime)
 +
) ENGINE=InnoDB;
  
'''Auf anderem Qmail-Toaster wo Spam gelernt wird das Paket erstellen:'''
+
CREATE TABLE bayes_vars (
<pre>
+
  id int(11) NOT NULL AUTO_INCREMENT,
# cd /home/
+
  username varchar(200) NOT NULL default '',
# tar cfpvz home-qscand-20060327.tar.gz qscand/
+
  spam_count int(11) NOT NULL default '0',
 +
  ham_count int(11) NOT NULL default '0',
 +
  token_count int(11) NOT NULL default '0',
 +
  last_expire int(11) NOT NULL default '0',
 +
  last_atime_delta int(11) NOT NULL default '0',
 +
  last_expire_reduce int(11) NOT NULL default '0',
 +
  oldest_token_age int(11) NOT NULL default '2147483647',
 +
  newest_token_age int(11) NOT NULL default '0',
 +
  PRIMARY KEY  (id),
 +
  UNIQUE bayes_vars_idx1 (username)
 +
) ENGINE=InnoDB;
 
</pre>
 
</pre>
  
Das Paket auf den neuen Qmail-Toaster übertragen und nach <code>/home/</code> kopieren. Dann entpacken und Berechtigungen richtig setzen:
+
==== Konfiguration ====
 +
 
 +
TxRep in der Datei '''local.cf''' aktivieren
 
<pre>
 
<pre>
# cd /home/
+
use_txrep 1
# tar xzf home-qscand-20060327.tar.gz
+
txrep_factory Mail::SpamAssassin::SQLBasedAddrList
# chown -R qscand.qscand qscand/
 
 
</pre>
 
</pre>
  
Die SpamAssassion-Konfiguration und Bayes-Datenbank des Users ''qscand'' ist in <code>/home/qscand/.spamassassin/</code> zu finden. SpamAssassin neu starten:
+
anschließend '''v341.pre''' anpassen
 +
 
 
<pre>
 
<pre>
# /etc/init.d/spamassassin restart
+
# TxRep - Reputation database that replaces AWL
 +
loadplugin Mail::SpamAssassin::Plugin::TxRep
 
</pre>
 
</pre>
  
In <code>/var/spool/qscan/qmail-queue.log</code> sollte nun der Bayes-Scan beim Empfang einer Mail aufgeführt sein:
+
und anschlie0end das AWL-Plugin in  '''/etc/mail/spamassassin/v310.pre''' auskommentieren
 +
 
 
<pre>
 
<pre>
(...)
+
# loadplugin Mail::SpamAssassin::Plugin::AWL
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
 
(...)
 
 
</pre>
 
</pre>
  
''TODO: Beschreibung wie man Spam lernt...''
+
Zum Schluß folgende Zeilen der Datei '''/etc/mail/spamassassin/90-sql.cf''' am Ende hinzufügen (Passwort entsprechend anpassen):
  
==Qmailadmin==
+
<pre>
 +
# txrep
 +
txrep_factory                  Mail::SpamAssassin::SQLBasedAddrList
 +
user_awl_dsn                    DBI:mysql:spamassassin:localhost
 +
user_awl_sql_username          spamassassin
 +
user_awl_sql_password          SApassword
 +
user_awl_sql_table              txrep
 +
 
 +
# bayesean
 +
bayes_store_module              Mail::SpamAssassin::BayesStore::MySQL
 +
bayes_sql_dsn                  DBI:mysql:spamassassin:localhost
 +
bayes_sql_username              spamassassin
 +
bayes_sql_password              SApassword
 +
</pre>
  
Apache Direktiven für einen virtuellen Host:
+
===Tests===
 +
 
 +
Die Debug-Ausgaben anschauen
 
<pre>
 
<pre>
ScriptAlias /qmailadmin "/var/www/cgi-bin/qmailadmin"
+
sudo -u spamd -H spamassassin -D --lint
ScriptAlias /cgi-bin/qmailadmin "/var/www/cgi-bin/qmailadmin"
 
Alias /images/qmailadmin/ /var/www/html/images/qmailadmin/
 
 
</pre>
 
</pre>
  
Alternativ die letzte Stable-Version 1.2.16 verwenden, wenn beim kompilieren von 1.2.16 Fehler auftreten.
+
==== Test1: Header ====
  
:* http://sourceforge.net/projects/qmailadmin
+
Prüfen, ob die Header hinzugefügt werden, '''required''' noch bei 5.0 (Standard)
  
 
<pre>
 
<pre>
cd /var/src/tar
+
root@h2859558 (FF)[/etc/mail/spamassassin] # echo -e "From: postmaster@afdb.de\nTo:info@schlicker.org\nSubject: test\n\n" | spamc
wget http://downloads.sourceforge.net/project/qmailadmin/qmailadmin-devel/qmailadmin-1.2.16.tar.gz
+
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
wget http://sourceforge.net/projects/qmailadmin/files/qmailadmin-help/1.0.8/qmailadmin-help-1.0.8.tar.gz
+
h2859558.stratoserver.net
cd ..
+
X-Spam-Level: ***
tar -xzf tar/qmailadmin-1.2.16.tar.gz
+
X-Spam-Status: No, score=3.5 required=5.0 tests=MISSING_DATE,MISSING_MID,
cd qmailadmin-1.2.16
+
NO_RECEIVED,NO_RELAYS,PYZOR_CHECK autolearn=no autolearn_force=no
./configure --enable-help --enable-htmldir=/var/www/html --enable-cgibindir=/var/www/cgi-bin --enable-modify-quota --enable-no-cache
+
version=3.4.2
make
+
From: postmaster@afdb.de
make install-strip
+
To:info@schlicker.org
 
+
Subject: test
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
 
 
</pre>
 
</pre>
  
Link:
+
==== Test 2: Benutzereinstellung - Domain ====
:* http://sourceforge.net/projects/qmailadmin
 
  
==VQAdmin==
+
Der '''required''' Wert sollte nun auf 4.0 sein
  
* http://www.inter7.com/index.php?page=vqadmin
 
Mit VQAdmin kann man für vpopmail mehrere Domains veralten, immer beim Link nach neuster Version schauen
 
 
<pre>
 
<pre>
cd /var/src/tar
+
echo -e "From: postmaster@afdb.de\nTo:info@schlicker.org\nSubject: test\n\n" | spamc -u '%afdb.de'
wget http://www.inter7.com/vqadmin/vqadmin-2.3.7.tar.gz
+
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
cd ..
+
h2859558.stratoserver.net
tar xvzpf tar/vqadmin-2.3.7.tar.gz
+
X-Spam-Level: ***
cd vqadmin-2.3.7
+
X-Spam-Status: No, score=3.5 required=4.0 tests=FSL_BULK_SIG,MISSING_DATE,
./configure
+
MISSING_MID,NO_RECEIVED,NO_RELAYS,PYZOR_CHECK autolearn=no
make
+
autolearn_force=no version=3.4.2
make install-strip
+
X-Spam-Relay-Country:
 +
From: postmaster@afdb.de
 +
To:info@schlicker.org
 +
Subject: test
 
</pre>
 
</pre>
  
'''Achtung:'''
+
==== Test 3: Benutzereinstellung - badmail ====
 
 
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.
 
  
+
Der '''score''' muss nun >100 sein
  
Dann in der Apache-Konfiguration des Web, worüber man die Administration aufrufen will, folgende eintragen:
 
 
<pre>
 
<pre>
<Directory "/var/www/cgi-bin/vqadmin">
+
root@h2859558 (FF)[/etc/logrotate.d] # echo -e "From: ben@hamsamail.us\nTo:postmaster@afdb.de\nSubject: test\n\n" | spamc -u 'postmaster@afdb.de'
    deny from all
+
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
    Options ExecCGI
+
h2859558.stratoserver.net
    AllowOverride AuthConfig
+
X-Spam-Flag: YES
    Order deny,allow
+
X-Spam-Level: **************************************************
</Directory>
+
X-Spam-Status: Yes, score=104.3 required=4.0 tests=DKIM_ADSP_NXDOMAIN,
 +
FSL_BULK_SIG,MISSING_DATE,MISSING_MID,NO_RECEIVED,NO_RELAYS,
 +
PYZOR_CHECK,USER_IN_BLACKLIST autolearn=no autolearn_force=no
 +
version=3.4.2
 +
X-Spam-Report:
 +
*  100 USER_IN_BLACKLIST From: address is in the user's black-list
 +
*  0.8 DKIM_ADSP_NXDOMAIN No valid author signature and domain not in
 +
*      DNS
 +
* -0.0 NO_RELAYS Informational: message was not relayed via SMTP
 +
*  2.0 PYZOR_CHECK Gelistet im Pyzor-System
 +
*      (https://pyzor.readthedocs.io/en/latest/)
 +
*  1.4 MISSING_DATE Datumskopfzeile fehlt
 +
* -0.0 NO_RECEIVED Informational: message has no Received headers
 +
*  0.0 FSL_BULK_SIG Bulk signature with no Unsubscribe
 +
*  0.1 MISSING_MID Missing Message-Id: header
 +
X-Spam-Relay-Country:
 +
From: ben@hamsamail.us
 +
To:postmaster@afdb.de
 +
Subject: [SPAM] test
 +
X-Spam-Prev-Subject: test
 
</pre>
 
</pre>
 
und anschließend passt man die .htaccess im Verzeichnis '''/var/www/cgi-bin/vqadmin/''' nach seinen Wünschen an.
 
<pre>
 
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
 
 
</pre>
 
</pre>
  
Hier sollte man '''AuthUserFile''' auf eine gültige Passwort-Datei zeigen lassen, die man mit '''htpasswd''' angelegt hat.
+
===Start/Stop SpamAssassin===
<pre>
 
htpasswd -cb /home/www/mail.marketteam.de/acl/vqadmin.passwd ktsadmin password
 
</pre>
 
  
Anschließend muß man noch die Rechte für diesen User in der Datei '''/var/www/cgi-bin/vqadmin/vqadmin.acl''' setzen.
+
Starten und für den Systemstart konfigurieren:
Hier die Zeilen beginnend mit '''techuser,senior''', bzw '''admin''' und am Ende folgende Zeile hinzufügen.
 
 
<pre>
 
<pre>
vi /var/www/cgi-bin/vqadmin/vqadmin.acl
+
systemctl enable spamassassin
admin * ktsadmin,weiterUser,nochEiner
+
systemctl start spamassassin
 
</pre>
 
</pre>
  
Anschließend kann man z.B. über http://mailx.braunschweig-lions.de/cgi-bin/vqadmin/vqadmin.cgi die Administration aufrufen.
+
=== SpamAssassin update  ===
 
 
'''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.
+
Mit der Installation des Spamassassin-Pakets kommt bei CentOS 8 automatisch ein Systemd-Daemon mit, der jeden Tag die Updates holt.
  
Alternativ kann man auch in das Verzeichnis '''/var/www/cgi-bin/vqadmin/html''' weiter Sprachdateien erzeigen.
 
 
<pre>
 
<pre>
cd /var/www/cgi-bin/vqadmin/html
+
systemctl restart sa-update
cp de de-de
+
systemctl status sa-update
cp de de_DE
 
chown vpopmail.vchkpw *
 
 
</pre>
 
</pre>
  
==SquirrelMail==
+
=== Bayes-DB trainieren ===
  
:* http://www.squirrelmail.org
+
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.
  
 
<pre>
 
<pre>
cd /var/src/tar
+
cd /usr/local/src/
 +
wget http://untroubled.org/spam/2020-12.7z
 +
wget http://untroubled.org/spam/2019.7z
 +
7za x 2020-12.7z
 +
7za x 2019.7z
 +
sa-learn --dbpath /home/spamd/.spamassassin/ --progress --spam /usr/local/src/2019
 +
sa-learn --dbpath /home/spamd/.spamassassin/ --progress --spam /usr/local/src/2020
 +
sa-learn --sync
 +
</pre>
  
# Achtung: Immer nach neuster Version schauen! Siehe Projektlink.
+
=== Update der Plugins etc ===
wget http://mesh.dl.sourceforge.net/sourceforge/squirrelmail/squirrelmail-1.4.15.tar.gz
+
Nach jeder Änderung der Konfigurationsdateien sollte man folgende Befehle ausführen
cd ..
+
<pre>
 +
sudo -u spamd -H spamassassin --lint
 +
systemctl restart spamassassin
 +
</pre>
  
tar xzf tar/squirrelmail-1.4.15.tar.gz
+
==Virenscanner ClamAV==
cd tar/squirrelmail-1.4.15
 
  
./configure
+
=== Installation ===
 +
<pre>
 +
  dnf -y install clamav-unofficial-sigs clamd clamav-update
 +
</pre>
  
# Nun Einstellungen wie gewünscht vornehmen, die folgenden auf jeden Fall
+
=== Konfiguration ===
  
* 2.  Server Settings
+
<pre>
      Ggf. IMAP/SMTP localhost gegen die IP/Hostnamen tauschen, wenn Courier nur auf einer IP und nicht auf allen eingerichtet ist
+
mkdir /var/log/clamd /var/run/freshclam/
 +
chown clamscan: /var/log/clamd /var/lib/clamav /var/run/freshclam/
 +
chmod 2775 /var/log/clamd
 +
</pre>
  
 +
In der Datei '''/etc/freshclam.conf''' die folgenden Zeilen anpassen:
 +
<pre>
 +
UpdateLogFile /var/log/clamd/freshclam.log
 +
PidFile /var/run/freshclam/freshclam.pid
 +
DatabaseOwner clamscan
 +
</pre>
  
* 4. General Options
+
In der Datei '''/etc/clamd.d/scan.conf''' die folgenden Zeilen anpassen:
      Data Directory (1) auf "/var/www/data/"
+
<pre>
      Attach Directory (2) auf "/var/www/attach/"
+
LogFile /var/log/clamd/clamd.log
      Allow server thread sort (10) auf "y"
+
LogTime yes
      Allow server-side sorting (11) auf "y"
+
PidFile /run/clamd.scan/clamd.pid
 +
LocalSocket /run/clamd.scan/clamd.sock
 +
TCPSocket 3310
 +
TCPAddr 127.0.0.1
 +
</pre>
  
      Save data (s)
+
In der Datei '''/etc/clamav-unofficial-sigs/os.conf''' die folgenden Zeilen anpassen:
 +
<pre>
 +
clam_user="clamscan"
 +
clam_group="clamscan"
 +
clamd_socket="/var/run/clamd.scan/clamd.sock"
 +
</pre>
  
* Quit und Save
 
  
mv data/ /var/www/
+
=== Systemd ===
mkdir /var/www/attach
+
<pre>
chown -R apache.apache /var/www/data/ /var/www/attach/
+
systemctl enable clamav-freshclam
mv squirrelmail-1.4.15/ /var/www/html/webmail
+
systemctl enable clamav-unofficial-sigs
 +
systemctl enable clamd@scan
 +
systemctl restart clamav-freshclam
 +
systemctl restart clamav-unofficial-sigs
 +
systemctl restart clamd@scan
 
</pre>
 
</pre>
  
Nun in einem gewünschten Virtuellen Host oder der ssl.conf den Zugriff einrichten, z.B. mit
+
===Logrotate===
 
<pre>
 
<pre>
Alias /webmail/ /var/www/html/webmail/
+
cat > /etc/logrotate.d/clamav-update << __EOF__
Alias /webmail /var/www/html/webmail/
+
/var/log/clamd/freshclam.log /var/log/clamd/clamd.log{
 +
        monthly
 +
        notifempty
 +
        missingok
 +
        postrotate
 +
                systemctl try-restart clamd@scan.service
 +
                systemctl try-restart clamav-freshclam.service
 +
        endscript
 +
}
 +
__EOF__
 +
 
 
</pre>
 
</pre>
  
Natürlich kann jederzeit unter <code>/var/www/html/webmail/</code> das <code>./configure</code> Skript aufgerufen werden und somit die Konfiguration verändert werden.
+
===Test===
 
 
===Sprachen einrichten===
 
 
 
 
<pre>
 
<pre>
cd /var/src/tar/
+
root@h2859558 (FF)[/usr] # cd /usr/local/src
wget http://surfnet.dl.sourceforge.net/sourceforge/squirrelmail/all_locales-1.4.13-20071220.tar.gz
+
root@h2859558 (FF)[/usr/local/src] # wget https://secure.eicar.org/eicar.com.txt
mkdir squirrelmail-locale
+
root@h2859558 (FF)[/usr/local/src] #  clamscan eicar.com.txt
cd squirrelmail-locale
+
/usr/local/src/eicar.com.txt: {HEX}EICAR.TEST.3.UNOFFICIAL FOUND
tar xzf ../tar/all_locales-1.4.13-20071220.tar.gz
 
 
 
./install
 
  
# Dort den Pfad "/var/www/html/webmail/" angeben
+
----------- SCAN SUMMARY -----------
 +
Known viruses: 9003832
 +
Engine version: 0.102.4
 +
Scanned directories: 0
 +
Scanned files: 1
 +
Infected files: 1
 +
Data scanned: 0.05 MB
 +
Data read: 0.05 MB (ratio 1.00:1)
 +
Time: 16.234 sec (0 m 16 s)
 
</pre>
 
</pre>
  
Tipp: Wenn man nicht soviel mit "y" das Kopieren bestätigen möchte, kurz das install-Skript editieren und das <code>-i</code> beim cp entfernen.
+
==SimScan==
  
Nun kann man noch mit dem <code>configure</code> Skript in <code>/var/www/html/webmail/</code> die Default-Sprache auf Deutsch (de_DE) und das Charset z.B. auf iso-8859-15 einstellen.
+
===RipMime===
 +
<pre>
 +
rpm -Uvh http://ftp.halifax.rwth-aachen.de/fedora-epel/8/Everything/SRPMS/Packages/r/ripmime-1.4.0.10-7.el8.src.rpm
 +
dnf -y install ripmime
 +
</pre>
  
  
===SIEVE-Filter Plugin===
+
===Installation ===
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.
+
<pre>
<pre>cd /usr/share/squirrelmail/plugins/
+
cd /var/src/tar
wget "http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Favelsieve-1.9.9.tar.gz"
+
wget https://notes.sagredo.eu/files/qmail/tar/simscan-1.4.1.tar.gz
tar xfz avelsieve-1.9.9.tar.gz
+
wget https://notes.sagredo.eu/files/qmail/patches/simscan/simscan-1.4.1_20200803.patch
cd ./avelsieve/config/
+
tar xzf simscan-1.4.1.tar.gz
cp config_sample.php config.php</pre>
+
cd simscan-1.4.1
 +
chown -R root:root .
 +
patch < ../simscan-1.4.1_20200803.patch
 +
cp configure.ac configure.in
  
==== Änderungen in der Konfiguration ====
+
./configure \
# Mit dem Editor der Wahl nun die frisch kopierte <code>config.php</code> öffnen und den Wert von <code>$sieveport</code> von <code>2000</code> in <code>4190</code> ändern.
+
--enable-user=clamscan \
# Optional können in den Zeilen 151-153 (<code>$avelsieve_hardcoded_capabilities</code>) 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.
+
--enable-clamav=y \
# Vor dem Schließen der Datei muss noch sichergestellt sein, dass die Variable <code>$avelsieve_disabletls</code> auf <code>true</code> gesetzt ist. Anschließend Datei speichern und schließen.
+
--enable-spam=y \
 +
--enable-spam-passthru=y \
 +
--enable-spam-hits=9.5 \
 +
--enable-per-domain=y \
 +
--enable-ripmime \
 +
--enable-attach=y \
 +
--enable-custom-smtp-reject=y \
 +
--enable-spamc-user=y \
 +
--enable-received=y \
 +
--enable-clamavdb-path=/var/lib/clamav
  
==== Aktivierung des Plugins in Squirrelmail ====
+
make
Abschließend ist das Plugin noch über das Squirrelmail Config-Script zu aktivieren. Dazu muss das <code>/usr/share/squirrelmail/config/conf.pl</code> Script aufgerufen werden. Dabei sind in dem Menü-gesteuerten Script folgende Eingaben zu tätigen und jeweils mit ENTER zu bestätigen:
+
make install-strip
* 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 ====
+
</pre>
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==
+
<pre>
 +
mkdir /var/qmail/simscan
 +
chown clamscan:clamscan /var/qmail/simscan
 +
</pre>
  
Whitepaper / Beschreibung über Greylisting:
+
===Konfiguration ===
:* http://projects.puremagic.com/greylisting/whitepaper.html
+
<pre>
 +
cat > /var/qmail/control/simcontrol << __EOF__
 +
:clam=yes,spam=yes,spam_hits=9.5,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif
 +
__EOF__
 +
</pre>
  
Infos:
+
Nach jeder Änderung der Datei '''/var/qmail/control/simcontrol''' muss die Datei '''/var/qmail/control/simcontrol.cdb''' neu generiert werden.
:* http://www.shupp.org/
 
:* http://projects.puremagic.com/greylisting/
 
:* http://www.digitaleveryware.com/projects/greylisting/
 
  
 +
<pre>
 +
/var/qmail/bin/simscanmk
 +
</pre>
  
Greylisting-Patch für  Bill Shupp's netqmail qmail-toaster-0.8 Patch:
+
Understanding the simcontrol file
:* http://shupp.org/patches/greylisting-20060105.patch
 
  
 +
You can setup rules for a specific user, a specific domain and a default rule as follows:
  
Voraussetzungen:
+
<pre>
 +
cat > /var/qmail/control/simcontrol << __EOF__
 +
postmaster@example.com:clam=yes,spam=no,attach=.txt:.com
 +
example.com:clam=no,spam=yes,attach=.mp3
 +
:clam=yes,spam=yes,spam_hits=9.5,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif
 +
__EOF__
 +
</pre>
 +
* The first line sets clam on and spam off for postmaster@example.com and checks for viruses inside attached file .txt and .com names.
 +
* The second line sets clam off and spam on for the example.com domain and disallows .mp3 files for the attachment scanner.
 +
* The third line sets the default for the whole machine to enable clam, spam scanning, and sets the reject level for spam hits to 9.5.
  
Ein MySQL-Server muss installiert sein, zum kompilieren der gepatchten Quellen von netqmail muss das mysql-devel Paket installiert sein:
+
=== Automatisches Update ===
 +
 
 +
Zuerst muss das Update-Skript erzeugt werden
 +
<pre>
 +
cd /var/src/
 +
wget --no-check-certificate https://qmail.jms1.net/simscan/update-simscan.c
 +
gcc -s -o /usr/local/sbin/update-simscan update-simscan.c
 +
chown root:clamscan /usr/local/sbin/update-simscan
 +
chmod 4110 /usr/local/sbin/update-simscan
 +
</pre>
  
Z.B. Fedora Core 4
+
Anschließend wird die Datei '''/etc/freshclam.conf''' angepasst
 
<pre>
 
<pre>
yum install mysql-devel
+
OnUpdateExecute /usr/local/sbin/update-simscan
 
</pre>
 
</pre>
  
 +
und der clamav-update-Daemon restartet
 +
<pre>
 +
systemctl restart clamav-freshclam
 +
</pre>
  
 +
===Test ===
 
<pre>
 
<pre>
cd /var/src
+
cd /usr/local/src
 +
echo "This is a test message" > mailtest.txt
 +
env QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=4 /var/qmail/bin/qmail-inject postmaster@afdb.de < mailtest.txt
 +
</pre>
  
mkdir greylisting-patch
+
== fail2ban==
cd greylisting-patch
+
 
wget http://shupp.org/patches/greylisting-20060105.patch
+
Falls noch nicht bei der Server-Installation installiert, sollte man spätestens jetzt '''fail2ban''' installieren.
cd ..
 
  
cp -ra netqmail-1.06/netqmail-1.06-mit-greylisting/
+
=== Installation ===
cd netqmail-1.06-mit-greylisting/netqmail-1.06
+
<pre>
cat ../../greylisting-patch/greylisting-20060105.patch | patch -p0
+
dnf -y install fail2ban fail2ban-server fail2ban-sendmail
 
</pre>
 
</pre>
  
Datenbank und Benutzer anlegen:
+
=== Konfiguration ===
 +
 
 +
Zuerst passt man die Datei '''/etc/fail2ban/jail.local''' an und fügt folgende Zeilen hinzu:
 +
 
 
<pre>
 
<pre>
mysql -p
+
[qmail-smtp]
 +
enabled  = true
 +
filter  = qmail-smtp
 +
action  = iptables[name=SMTP, port=25, protocol=tcp]
 +
          sendmail-whois-lines[name=SMTP, logpath="%(logpath)s"]
 +
logpath  = /var/log/qmail/smtpd/current
 +
maxretry = 5
 +
bantime  = 1d
 +
findtime = 1h
  
mysql> CREATE DATABASE relaydelay;
+
[qmail-submission]
mysql> use mysql;
+
enabled  = true
mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','milter',PASSWORD('milter'));
+
filter  = qmail-smtp
mysql> grant select,insert,update,delete on relaydelay.* to milter@"localhost" identified by 'milter';
+
action  = iptables[name=SUBMISSION, port=587, protocol=tcp]
mysql> quit
+
          sendmail-whois-lines[name=SUBMISSION, logpath="%(logpath)s"]
 +
logpath  = /var/log/qmail/submission/current
 +
maxretry = 5
 +
bantime  = 1d
 +
findtime = 1h
  
mysql -p mysql < dbdef.sql
 
</pre>
 
  
 +
[vpopmail]
 +
enabled  = true
 +
filter  = vpopmail
 +
action  = iptables[name=VPOPMAIL, port=587, protocol=tcp]
 +
          sendmail-whois-lines[name=VPOPMAIL, logpath="%(logpath)s"]
 +
# check your syslog mail related log (mail.log in some systems)
 +
logpath  = /var/log/maillog
 +
maxretry = 5
 +
bantime  = 86400
 +
findtime = 3600
  
'''Hinweis:''' Auf einem Fedora Core 4 x86_64 und i686 Server war vor dem Kompilieren folgende Änderung am Makefile nötig.
 
  
Mit <code>vi Makefile</code> das ''Makefile'' öffnen und den Pfad zu libmysqlclient.a ändern. Zusätzlich werden noch die Optionen ''-lssl -lcrypto'' hinzugefügt.
+
[dovecot-pop3]
 +
enabled  = true
 +
filter  = dovecot
 +
action  = iptables-multiport[name=POP3, port="110,995", protocol=tcp]
 +
          sendmail-whois-lines[name=POP3, logpath="%(logpath)s"]
 +
logpath  = /var/log/dovecot/dovecot.log
 +
maxretry = 6
 +
bantime  = 1h
 +
findtime = 1h
  
'''ALT'''
 
<pre>
 
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
 
</pre>
 
  
'''NEU (ab CentOS 6)'''
+
[dovecot-imap]
<pre>
+
enabled = true
qmail-envelope-scanner: \
+
filter = dovecot
load qmail-envelope-scanner.o local_scan.o /usr/lib64/mysql/libmysqlclient.so
+
action = iptables-multiport[name=IMAP, port="143,993", protocol=tcp]
        ./load qmail-envelope-scanner -lz -lm -lssl -lcrypto local_scan.o /usr/lib64/mysql/libmysqlclient.so
+
sendmail-whois-lines[name=IMAP, logpath="%(logpath)s"]
 +
logpath = /var/log/dovecot/dovecot.log
 +
maxretry = 6
 +
bantime = 1h
 +
findtime = 1h
 
</pre>
 
</pre>
  
'''NEU'''
+
=== Systemd ===
 
<pre>
 
<pre>
qmail-envelope-scanner: \
+
systemctl restart fail2ban
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
 
 
</pre>
 
</pre>
  
'''NEU (i686)'''
+
=== Test ===
 
<pre>
 
<pre>
qmail-envelope-scanner: \
+
fail2ban-client status
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
 
 
</pre>
 
</pre>
  
 
<pre>
 
<pre>
make clean
+
fail2ban-regex /var/log/qmail/smtpd/current /etc/fail2ban/filter.d/qmail-smtp.conf
make
 
 
 
qmailctl stop
 
make setup check
 
 
 
chown -R vpopmail:vchkpw /var/qmail/spam
 
 
 
qmailctl start
 
 
</pre>
 
</pre>
  
===MySQL Datenbank regelmässig aufräumen===
 
  
local_scan.c, also das eigentliche Greylisting-Programm, räumt abgelaufene Datenbank-Einträge nicht selbstständig auf.
+
=== Manuelles setzen ===
Dieses sollte ein kleines Script übernehmen, welches stündlich ausgeführt wird.
 
  
 
<pre>
 
<pre>
cd /var/src/greylisting-patch/
+
fail2ban-client set apache-typo3 banip 154.196.72.202
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
 
 
</pre>
 
</pre>
  
===Parameter===
+
==SquirrelMail==
  
Einstellungen können '''vor''' dem Kompilieren in der Datei ''local_scan.c'' vorgenommen werden. Z.B. hier die Default-Einstellungen:
+
:* http://www.squirrelmail.org
<pre>
 
/************************/
 
#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 */
 
 
 
/*************************/
 
</pre>
 
  
==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
 
 
<pre>
 
<pre>
yum install netpbm-progs ocrad gifsicle perl-String-Approx perl-MLDBM-Sync giflib-utils gocr ImageMagick
+
cd /var/src/tar
</pre>
 
  
Anschließend lädt man das Paket herunter, entpackt dieses und kopiert die Dateien in den Spamassassin-Ordner
+
# Achtung: Immer nach neuster Version schauen! Siehe Projektlink.
<pre>
+
wget http://mesh.dl.sourceforge.net/sourceforge/squirrelmail/squirrelmail-1.4.15.tar.gz
cd /var/src/tar/
 
wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz
 
 
cd ..
 
cd ..
tar xvzpf tar/fuzzyocr-3.5.1-devel.tar.gz
 
cp -a FuzzyOcr-3.5.1/FuzzyOcr* /etc/mail/spamassassin/
 
</pre>
 
  
Zwischendurch checkt man die Version von Spamassassin
+
tar xzf tar/squirrelmail-1.4.15.tar.gz
<pre>
+
cd tar/squirrelmail-1.4.15
# spamassassin -V
 
SpamAssassin version 3.2.5
 
  running on Perl version 5.8.8
 
</pre>
 
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
+
./configure
<pre>
 
# vi /etc/mail/spamassassin/FuzzyOcr.cf
 
  
focr_logfile /var/log/FuzzyOcr.log
+
# Nun Einstellungen wie gewünscht vornehmen, die folgenden auf jeden Fall
focr_enable_image_hashing 2
 
#focr_bin_helper tesseract
 
  
</pre>
+
* 2.  Server Settings
den Rest lässt man auf den default-Werten. Tesseract nur einschalten, wenn man es installiert hat.
+
      Ggf. IMAP/SMTP localhost gegen die IP/Hostnamen tauschen, wenn Courier nur auf einer IP und nicht auf allen eingerichtet ist
  
Nun testet man, ob alle Abhängigkeiten erfüllt sind.
 
<pre>
 
# spamassassin --lint
 
</pre>
 
Hier sollte nun keine Ausgabe erfolgen.
 
  
Anschließend legt man die Log-Datei mit den korrekten Rechten an, falls diese noch nicht existiert.
+
* 4. General Options
<pre>
+
      Data Directory (1) auf "/var/www/data/"
touch /var/log/FuzzyOcr.log
+
      Attach Directory (2) auf "/var/www/attach/"
chown qscand.qscand /var/log/FuzzyOcr.log
+
      Allow server thread sort (10) auf "y"
</pre>
+
      Allow server-side sorting (11) auf "y"
  
Danach testet man, ob eine Grafik als Spam erkannt wird, mit :
+
      Save data (s)
<pre>
+
 
spamassassin --debug FuzzyOcr < /var/src/FuzzyOcr-3.5.1/samples/ocr-animated.eml > /dev/null
+
* Quit und Save
</pre>
 
  
und irgendwo unten in der Ausgabe erscheint dann:
+
mv data/ /var/www/
<pre>
+
mkdir /var/www/attach
...
+
chown -R apache.apache /var/www/data/ /var/www/attach/
[26434] info: FuzzyOcr: Scanset "ocrad" generates enough hits (4), skipping further scansets...
+
mv squirrelmail-1.4.15/ /var/www/html/webmail
[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.
 
 
</pre>
 
</pre>
  
Wichtig ist die 2. Zeile und das keine Fehler aufgetreten sind.
+
Nun in einem gewünschten Virtuellen Host oder der ssl.conf den Zugriff einrichten, z.B. mit
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.
 
 
<pre>
 
<pre>
/etc/init.d/spamassassin restart
+
Alias /webmail/ /var/www/html/webmail/
 +
Alias /webmail /var/www/html/webmail/
 
</pre>
 
</pre>
  
 +
Natürlich kann jederzeit unter <code>/var/www/html/webmail/</code> das <code>./configure</code> Skript aufgerufen werden und somit die Konfiguration verändert werden.
  
 +
===Sprachen einrichten===
  
Links:
 
* http://fuzzyocr.own-hero.net/
 
* http://fuzzyocr.own-hero.net/wiki/Installation-3.5.x
 
===Logdatei Rotation===
 
 
<pre>
 
<pre>
vi /etc/logrotate.d/fuzzyocr
+
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
  
/var/log/FuzzyOcr.log {
+
./install
  rotate 12
+
 
  weekly
+
# Dort den Pfad "/var/www/html/webmail/" angeben
  compress
 
  delaycompress
 
  create 664 qscand qscand
 
}
 
 
</pre>
 
</pre>
}
 
  
== Server-seitige Mailfilterung mit SIEVE ==
+
Tipp: Wenn man nicht soviel mit "y" das Kopieren bestätigen möchte, kurz das install-Skript editieren und das <code>-i</code> beim cp entfernen.
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 ===
+
Nun kann man noch mit dem <code>configure</code> Skript in <code>/var/www/html/webmail/</code> die Default-Sprache auf Deutsch (de_DE) und das Charset z.B. auf iso-8859-15 einstellen.
Die Datei <code>/etc/dovecot/conf.d/90-sieve.conf</code> mit einem beliebigen Editor öffnen und folgende Änderungen vornehmen:
 
* Zeile 11: <code>sieve = /home/vpopmail/domains/%d/%n/user.sieve</code>
 
* <strike>Zeile 53: <code>sieve_extensions = +notify +imapflags</code> (optional)</strike> ==> 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: <code>/home/vpopmail/domains/link-innovation.de/wickham/user.sieve</code>. Die möglichen Platzhalter können unter http://wiki2.dovecot.org/Variables eingesehen werden.
 
  
 +
===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.
 +
<pre>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</pre>
  
Anschließend speichern und die neue Konfiguration mittels <code>service dovecot reload</code> neu laden.
+
==== Änderungen in der Konfiguration ====
 +
# Mit dem Editor der Wahl nun die frisch kopierte <code>config.php</code> öffnen und den Wert von <code>$sieveport</code> von <code>2000</code> in <code>4190</code> ändern.
 +
# Optional können in den Zeilen 151-153 (<code>$avelsieve_hardcoded_capabilities</code>) 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.
 +
# Vor dem Schließen der Datei muss noch sichergestellt sein, dass die Variable <code>$avelsieve_disabletls</code> auf <code>true</code> gesetzt ist. Anschließend Datei speichern und schließen.
  
=== Aktivierung des SIEVE Filters pro Domain ===
+
==== Aktivierung des Plugins in Squirrelmail ====
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:
+
Abschließend ist das Plugin noch über das Squirrelmail Config-Script zu aktivieren. Dazu muss das <code>/usr/share/squirrelmail/config/conf.pl</code> Script aufgerufen werden. Dabei sind in dem Menü-gesteuerten Script folgende Eingaben zu tätigen und jeweils mit ENTER zu bestätigen:
<pre>
+
* 8 (Auswahl des Plugin Menüs)
cd /home/vpopmail/domains/<DOMAIN>/
+
* Die Zahl vor "avelsieve" unter "Available plugins" (aktiviert das Plugin)
vim .qmail-default
+
* S (Änderungen speichern)
</pre>
+
* Q (Script beenden)
  
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:
+
==== Testen der Einstellungen ====
<pre>|/var/qmail/bin/preline -f /usr/local/dovecot/libexec/dovecot/deliver -d $EXT@$USER</pre>
+
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.
  
=Tuning und Einstellungen=
+
= QMAIL Add-ons=
  
Über verschiedene Dateien in <code>/var/qmail/control/</code> 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 <code>qmailctl restart</code> neu gestartet werden.
+
== Realtime Blackhole List (RBL) - qmail-dnsbl ==
  
Einige Listen findet man hier:
+
=== Konfiguration ===
:* http://www.lifewithqmail.org/lwq.html#config-files
+
<pre>
:* http://qmailwiki.inter7.com/Qmail-control-files
+
cat > /var/qmail/control/dnsbllist << __EOF__
 +
-b.barracudacentral.org
 +
-zen.spamhaus.org
 +
__EOF__
 +
</pre>
  
Durch enthaltene Patches kann es weitere Optionen geben.
+
=== Funktionstest ===
 +
<pre>
 +
qmailctl restart
 +
qmail-showctl |grep dnsbl
 +
dnsbllist:
 +
List at -b.barracudacentral.org configured for dnsbl check.
 +
List at -zen.spamhaus.org configured for dnsbl check.
 +
</pre>
  
 +
== Greetdelay ==
  
'''queuelifetime'''
+
Um ggf. Greetdelay-Zeiten anzupassen, muss man die Dateien '''/var/qmail/supervice/qmail-smtpd/run''' und ''/var/qmail/supervice/qmail-submission/run''' anpassen.
 +
<pre>
 +
export SMTPD_GREETDELAY=15
 +
export DROP_PRE_GREET=1
 +
</pre>
 +
Beispiel: Greetdelay von 15s und Drop der Daten, die vorher erneut gesendet wurden.
  
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.
+
==SPF==
 +
SPF behavior of your mail server is controlled by the file /var/qmail/control/spfbehavior. You can specify a value between 0 and 6:
  
Mit <code># vi /var/qmail/control/queuelifetime</code> die Datei anlegen und die Zeit in Sekunden anlegen, hier z.B. einen Tag:
+
    0 disabled (Default). Never do SPF lookups, don't create Received-SPF headers
<pre>
+
    1 selects 'annotate-only' mode,  where  qmail-smtpd  will  annotate  incoming  email with Received-SPF fields, but will not reject any messages.
86400
+
    2 will produce temporary failures on DNS lookup problems so you can make sure you always have meaningful Received-SPF headers.  
</pre>
+
    3 selects  'reject'  mode,  where  incoming  mail  will be rejected if the SPF record says 'fail'.  
 +
    4 selects a more stricter rejection mode, which is like 'reject' mode, except that incoming mail will also be rejected when the SPF record says 'softfail'.
 +
    5 will also reject when the SPF record says 'neutral'
 +
    6 if no SPF records are available at all (or a syntax error was encountered).
  
'''databytes'''
+
You can override the value in /var/qmail/control/spfbehavior by setting the SPFBEHAVIOR environment variable (typically in /etc/tcprules.d/tcp.smtp or, if you’ve used these notes as your guide, in ~/vpopmail/etc/tcp.smtp).
  
Maximale Größe einer E-Mail Nachricht in Bytes, z.B. <code># vi /var/qmail/control/databytes</code>:
+
Values higher than 3 are strongly discouraged. You probably will want to go with 2 or 3.
<pre>
 
15000000
 
</pre>
 
  
'''Größe und Anzahl der Logdateien'''
+
=Tipps & Tricks=
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
 
<pre>
 
#vi /service/qmail/log/run
 
  
#!/bin/sh
+
==Mit Mailboxen umziehen==
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t n20 s4999999 /var/log/qmail/smtpd
 
</pre>
 
wobei die Parameter wie folgt belegt sind.
 
  
'''nX:'''
+
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.
         
 
X ist hierbei die Anzahl der Logdateien, bevor die erste wieder gelöscht wird
 
  
'''sXXXXXXXXX'''
+
Man kann das ganz gut mit zwei SSH-Terminal-Sitzungen machen. Eine auf dem Quell-Server und eine auf dem Ziel-Server.
  
XXXXXX ist hierbei die Größe der Logdatei in Bytes
 
  
==Logwatch==
+
'''Server: Quelle'''
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==
+
Als erstes muss man den gesamten Qmail-Toaster stoppen damit keine Mails mehr versendet oder empfangen werden können:
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.
 
 
<pre>
 
<pre>
export BMC_WHITELIST="on"
+
qmailctl stop
 +
systemctl stop dovecot
 
</pre>
 
</pre>
  
 +
Nun packt man den gesamten Inhalt von <code>/home/vpopmail/domains</code> ein:
 
<pre>
 
<pre>
vi /usr/share/logwatch/default.conf/services/qmail-send.conf
+
cd /home/vpopmail/domains
 
+
tar cfvpz mail-domains.tar.gz /home/vpopmail/domains/
# 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
 
 
</pre>
 
</pre>
  
<pre>
+
Die Datei kann jetzt z.B. via SSH-Copy (scp) auf den anderen Server übertragen werden.
vi /usr/share/logwatch/default.conf/services/qmail-smtpd.conf
 
  
# This sets whether to display counts of emails from each user & to each user.
+
'''Server: Ziel'''
# 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
 
</pre>
 
  
Zusätzlich kann man dann noch in der Datei '/etc/logwatch/conf/ignore.conf' ein Paar Ausdrücke aus dem Statusbericht herausfiltern.
+
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 <code>cd</code> gewechselt sind, und verschieben dann die Mailboxen an den richtigen Platz.
 
<pre>
 
<pre>
vi /etc/logwatch/conf/ignore.conf
+
tar xzf mail-domains.tar.gz
 
+
cd /home/vpopmail/domains
###### REGULAR EXPRESSIONS IN THIS FILE WILL BE TRIMMED FROM REPORT OUTPUT #####
+
mv -v * /home/vpopmail/domains/
CHKUSER accepted sender
 
CHKUSER accepted any rcpt
 
 
</pre>
 
</pre>
  
=Tipps & Tricks=
 
  
==WICHTIG: SPF / DNS==
+
'''Server: Quelle'''
  
Wichtig ist auch die richtige SPF Konfiguration im DNS, da sonst einige Mailserver ggf. die Kommunikation verweigern (Spamschutz).
+
Die Datei <code>/var/qmail/users/assign</code> ausgeben:
 +
<pre>
 +
cat /var/qmail/users/assign
 +
</pre>
  
===Überblick===
+
'''Server: Ziel'''
  
SPF steht für Sender Policy Framework und ist eine Technik zur Vermeidung von Spam- oder Virenmails mit gefälschtem Absender.
+
Den Inhalt der oben ausgegebenen Datei nun in die entsprechende Datei auf dem Ziel-Server anhängen:
 +
<pre>
 +
vi /var/qmail/users/assign
 +
</pre>
  
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.
+
'''HINWEIS:''' Unbedingt beachten das der <code>.</code> in der letzten Zeile stehten muss!
  
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.
+
z.B.:
 +
<pre>
 +
+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:-::
 +
.
 +
</pre>
  
Dieser Überblick stammt von folgender Webseite, wo man einfach verständliche Informationen findet: http://wiki.hetzner.de/index.php/DNS_SPF
+
Die Datei speichern.
  
===Weitere Links===
 
  
:* SMTP+SPF, Sender Policy Framework: http://spf.pobox.com/
+
'''Server: Quelle'''
:* SPF-Mechanismus und Syntax: http://spf.pobox.com/mechanisms.html
 
:* SPF-Tester: http://www.dnsstuff.com/pages/spf.htm
 
:* SRS-Verfahren: http://spf.pobox.com/srs.html
 
 
  
 +
Wieder auf dem Quell-Server eine weitere Datei ausgeben.
 +
<pre>
 +
cat /var/qmail/control/rcpthosts
 +
</pre>
  
 +
'''Server: Ziel'''
  
==Autorespond fixen==
+
Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:
 
 
Wenn man ''autorespond'' (Mail-Robot) benutzt und im <code>/var/log/qmail/current</code> folgende Fehlermeldung sieht:
 
 
<pre>
 
<pre>
(...)
+
vi /var/qmail/control/rcpthosts
deferral: /bin/sh:_/usr/local/bin/autorespond:_No_such_file_or_directory/
 
(...)
 
 
</pre>
 
</pre>
  
kann man das Problem mit folgendem Kommando beheben:
+
z.B.:
 
<pre>
 
<pre>
# ln -s /usr/bin/autorespond /usr/local/bin/autorespond
+
web1.braunschweig-lions.de
</pre>
+
test.braunschweig-lions.de
 
+
mail.marketteam.de
==Mit Mailboxen umziehen==
+
marketteam.de
 
+
braunschweig-lions.de
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.
+
serviceteam-lions.de
 
+
germanbowl.com
Man kann das ganz gut mit zwei SSH-Terminal-Sitzungen machen. Eine auf dem Quell-Server und eine auf dem Ziel-Server.  
+
junior-lions.de
 
+
ffc-braunschweig.de
 +
red-cubs.de
 +
newsletter.braunschweig-lions.de
 +
red-cubs94.de
 +
</pre>
  
 
'''Server: Quelle'''
 
'''Server: Quelle'''
  
Als erstes muss man den gesamten Qmail-Toaster stoppen damit keine Mails mehr versendet oder empfangen werden können:
+
Wieder auf dem Quell-Server eine weitere Datei ausgeben.
 
<pre>
 
<pre>
# qmailctl stop
+
cat /var/qmail/control/virtualdomains
# vpopmailctl stop
 
# /etc/init.d/courier-imap stop
 
# /etc/init.d/courier-authlib stop
 
 
</pre>
 
</pre>
  
Nun packt man den gesamten Inhalt von <code>/home/vpopmail/domains</code> ein:
+
'''Server: Ziel'''
 +
 
 +
Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:
 
<pre>
 
<pre>
# cd ~
+
vi /var/qmail/control/virtualdomains
# tar cfvpz mail-domains.tar.gz /home/vpopmail/domains/
 
 
</pre>
 
</pre>
  
Die Datei kann jetzt z.B. via SSH-Copy (scp) auf den anderen Server übertragen werden.
+
Z.B.:
 
 
'''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 <code>cd</code> gewechselt sind, und verschieben dann die Mailboxen an den richtigen Platz.
 
 
<pre>
 
<pre>
# tar xzf mail-domains.tar.gz
+
test.braunschweig-lions.de:test.braunschweig-lions.de
# cd home/vpopmail/domains
+
web1.braunschweig-lions.de:web1.braunschweig-lions.de
# mv -v * /home/vpopmail/domains/
+
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
 
</pre>
 
</pre>
  
 
+
Nun muss auf dem Ziel-Server noch qmails user datenbank als ''cdb'' aktualisiert werden (/var/qmail/users/cdb):
'''Server: Quelle'''
 
 
 
Die Datei <code>/var/qmail/users/assign</code> ausgeben:
 
 
<pre>
 
<pre>
# cat /var/qmail/users/assign
+
/var/qmail/bin/qmail-newu
 
</pre>
 
</pre>
  
'''Server: Ziel'''
+
Anhand des Timestamps der Datei kann man überprüfen ob das geklappt hat:
 
 
Den Inhalt der oben ausgegebenen Datei nun in die entsprechende Datei auf dem Ziel-Server anhängen:
 
 
<pre>
 
<pre>
# vi /var/qmail/users/assign
+
ls /var/qmail/users/ -al
</pre>
+
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
 +
</pre>
  
'''HINWEIS:''' Unbedingt beachten das der <code>.</code> in der letzten Zeile stehten muss!
+
Vorsichthalber auf dem Ziel-Server alle Toaster-Dienste neu starten:
 
 
z.B.:
 
 
<pre>
 
<pre>
+test.braunschweig-lions.de-:test.braunschweig-lions.de:89:89:/home/vpopmail/domains/test.braunschweig-lions.de:-::
+
qmailctl restart
(...)
+
systemctl restart dovecot
+red-cubs94.de-:red-cubs94.de:89:89:/home/vpopmail/domains/red-cubs94.de:-::
 
.
 
 
</pre>
 
</pre>
  
Die Datei speichern.
+
'''!!! 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.
  
'''Server: Quelle'''
 
  
Wieder auf dem Quell-Server eine weitere Datei ausgeben.
+
Man manuell mit dem Programm ''telnet'' eine Zustellung einer Mail testen. Dabei z.B. das <code>/var/log/qmail/current</code> und <code>/var/spool/qmailscan/qmail-queue.log</code> beobachten. Das ganze am Besten von Extern:
 
<pre>
 
<pre>
# cat /var/qmail/control/rcpthosts
+
$ telnet mail.marketteam.de 25
</pre>
+
Trying 212.68.65.193...
 
+
Connected to mail.marketteam.de (212.68.65.193).
'''Server: Ziel'''
+
Escape character is '^]'.
 
+
220 web1.braunschweig-lions.de ESMTP
Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:
+
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
 +
</pre>
 +
 
 +
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 <code># vi /var/qmail/control/smtproutes</code> eine Datei mit folgendem Inhalt anlegen, wobei natürlich die IP-Adressen entsprechend anzupassen sind. In diesem Beispiel ist <code>212.68.65.193</code> der neue Server und <code>213.252.153.34</code> der alte Server:
 
<pre>
 
<pre>
# vi /var/qmail/control/rcpthosts
+
:212.68.65.193
 
</pre>
 
</pre>
  
z.B.:
+
'''Server: Ziel'''
 +
 
 +
Mit <code>vi /home/vpopmail/etc/tcp.smtp</code> folgenden Eintrag anhängen:
 
<pre>
 
<pre>
web1.braunschweig-lions.de
+
213.252.153.34:allow,RELAYCLIENT=""
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
 
 
</pre>
 
</pre>
  
'''Server: Quelle'''
+
Die cdb-Datei in <code>/home/vpopmail/etc/</code> neu schreiben:
 
 
Wieder auf dem Quell-Server eine weitere Datei ausgeben.
 
 
<pre>
 
<pre>
# cat /var/qmail/control/virtualdomains
+
qmailctl cdb
 
</pre>
 
</pre>
  
'''Server: Ziel'''
 
  
Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:
+
'''Server: Quelle'''
 +
 
 +
Nun auf dem Quell-Server qmail wieder starten:
 
<pre>
 
<pre>
# vi /var/qmail/control/virtualdomains
+
qmailctl start
 
</pre>
 
</pre>
  
Z.B.:
+
Nun kann wieder von extern eine Testmail an den alten Server abgesetzt werden:
 
<pre>
 
<pre>
test.braunschweig-lions.de:test.braunschweig-lions.de
+
$ telnet 213.252.153.34 25
web1.braunschweig-lions.de:web1.braunschweig-lions.de
+
Trying 213.252.153.34...
marketteam.de:marketteam.de
+
Connected to bs-lions-mail.bcc.de (213.252.153.34).
braunschweig-lions.de:braunschweig-lions.de
+
Escape character is '^]'.
serviceteam-lions.de:serviceteam-lions.de
+
220 mail.marketteam.de ESMTP
germanbowl.com:germanbowl.com
+
helo
feldschloesschen-german-bowl.de:feldschloesschen-german-bowl.de
+
250 mail.marketteam.de
junior-lions.de:junior-lions.de
+
mail from:dirk@schlicker.org
ffc-braunschweig.de:ffc-braunschweig.de
+
250 ok
red-cubs.de:red-cubs.de
+
rcpt to:webmaster@braunschweig-lions.de
newsletter.braunschweig-lions.de:newsletter.braunschweig-lions.de
+
250 ok
red-cubs94.de:red-cubs94.de
+
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
 
</pre>
 
</pre>
  
Nun muss auf dem Ziel-Server noch qmails user datenbank als ''cdb'' aktualisiert werden (/var/qmail/users/cdb):
+
Wenn alles geklappt hat und die Mail über den neuen Server zugestellt wurde, war es das.
 +
 
 +
==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====
 
<pre>
 
<pre>
# /var/qmail/bin/qmail-newu
+
ezmlm-list DIR > subscriber.txt
 
</pre>
 
</pre>
  
Anhand des Timestamps der Datei kann man überprüfen ob das geklappt hat:
+
wobei dir das Verzeichnis zur Mailingliste ist, also '''/home/vpopmail/domains/domain.de/list'''
 +
 
 +
====Moderatoren====
 
<pre>
 
<pre>
# ls /var/qmail/users/ -al
+
ezmlm-list DIR/mod > mods.txt
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
 
 
</pre>
 
</pre>
  
Vorsichthalber auf dem Ziel-Server alle Toaster-Dienste neu starten:
+
===Liste aufräumen===
 +
====Subscriber====
 
<pre>
 
<pre>
# qmailctl restart
+
/bin/rm DIR/subscribers/*
# vpopmailctl restart
 
# /etc/init.d/courier-imap restart
 
 
</pre>
 
</pre>
  
'''!!! DNS MX-Einträge können nun umgestellt werden !!!'''
+
====Moderatoren====
 
+
<pre>
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 <code>/var/log/qmail/current</code> und <code>/var/spool/qmailscan/qmail-queue.log</code> beobachten. Das ganze am Besten von Extern:
 
<pre>
 
$ 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
 
</pre>
 
 
 
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 <code># vi /var/qmail/control/smtproutes</code> eine Datei mit folgendem Inhalt anlegen, wobei natürlich die IP-Adressen entsprechend anzupassen sind. In diesem Beispiel ist <code>212.68.65.193</code> der neue Server und <code>213.252.153.34</code> der alte Server:
 
<pre>
 
:212.68.65.193
 
</pre>
 
 
 
'''Server: Ziel'''
 
 
 
Mit <code>vi /home/vpopmail/etc/tcp.smtp</code> folgenden Eintrag anhängen:
 
<pre>
 
213.252.153.34:allow,RELAYCLIENT=""
 
</pre>
 
 
 
Die cdb-Datei in <code>home/vpopmail/etc/</code> neu schreiben:
 
<pre>
 
# qmailctl cdb
 
</pre>
 
 
 
 
 
'''Server: Quelle'''
 
 
 
Nun auf dem Quell-Server qmail wieder starten:
 
<pre>
 
# qmailctl start
 
</pre>
 
 
 
Nun kann wieder von extern eine Testmail an den alten Server abgesetzt werden:
 
<pre>
 
$ 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
 
</pre>
 
 
 
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
 
 
 
<pre>
 
/usr/bin/courier-dovecot-migrate.pl --to-dovecot --recursive --convert /home/vpopmail/domains/domain
 
</pre>
 
 
 
==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====
 
<pre>
 
ezmlm-list DIR > subscriber.txt
 
</pre>
 
 
 
wobei dir das Verzeichnis zur Mailingliste ist, also '''/home/vpopmail/domains/domain.de/list'''
 
 
 
====Moderatoren====
 
<pre>
 
ezmlm-list DIR/mod > mods.txt
 
</pre>
 
 
 
===Liste aufräumen===
 
====Subscriber====
 
<pre>
 
/bin/rm DIR/subscribers/*
 
</pre>
 
 
 
====Moderatoren====
 
<pre>
 
 
/bin/rm DIR/mod/subscribers/*
 
/bin/rm DIR/mod/subscribers/*
 
</pre>
 
</pre>
Zeile 2.934: Zeile 3.292:
 
Anschließend sollte man wie gewohnt mir QMailAdmin arbeiten können
 
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.
 
<pre>
 
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
 
</pre>
 
  
Mit diesen iptables Anweisungen werden sämtlich Pakete aus dem Netzwerk 220.181.12.0/24 (China) auf Port 25 (smtp) verworfen.
+
== wichtige Links ==
Damit verhindert man erstmal, das weitere SPAM-Mails eintreffen.
+
[http://rbl-check.org http://rbl-check.org]
 
 
=== 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:
 
<pre>
 
qmail-remove -p "220.181.12" -d
 
</pre>
 
 
 
Hier werden sämtliche Mails aus der Queue gelöscht, die irgendwo das Suchmuster (-p) "220.181.12" in der Mail enthalten.
 
 
 
Download: [[Qmail Remove Tool|http://www.linuxmagic.com/opensource/qmail/qmail-remove/]]
 
 
 
===Doublebounce unterbinden ===
 
Email-Konto einrichten, wohin doublebounce Mails verschwinden
 
 
 
<pre>
 
echo '#' > /var/qmail/alias/.qmail-doublebounce
 
echo "doublebounce" > /var/qmail/control/doublebounceto
 
</pre>
 
 
 
=== SPAM IPs in DB merken===
 
 
 
Da schon eine DB für den Mailserver existiert (relaydelay), wird diese um eine Tabelle erweitert.
 
 
 
<pre>
 
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';
 
  
</pre>
+
[https://talosintelligence.com/reputation_center/lookup?search=85.214.138.131 https://talosintelligence.com/reputation_center/lookup?search=85.214.138.131]
 
 
=== wichtige Links ===
 
[http://rbl-check.org http://rbl-check.org]
 
  
[https://talosintelligence.com/reputation_center/lookup?search=85.214.122.89 https://talosintelligence.com/reputation_center/lookup?search=85.214.122.89]
+
[https://de.ssl-tools.net/mailservers https://de.ssl-tools.net/mailservers]

Aktuelle Version vom 17. April 2025, 07:07 Uhr


Einleitung

Das Ziel dieser Kurzanleitung ist NICHT, jemanden die Funktionsweise eines Mailservers beizubringen. Sondern die nachfolgenden Hinweise und Schritte dienen lediglich als Erinnerung, wie eine schnelle Installation von qmail und der zugehörigen Software durchzuführen ist, um zum Schluß einen funktionieren QMAIL-Toaster zu haben.

Quoting D. J. Bernstein definition

  qmail is a secure, reliable, efficient, simple message transfer agent. It is designed for typical Internet-connected UNIX hosts

Referenzen

   * http://cr.yp.to/qmail.html
   * qmail.org (mirror)
   * Life with qmail
   * Bill Shupp's toaster (officially dead)
   * qmailwiki.org (dead)
   * Erwin Hoffman's "qmail support" site
   * John Simpson's "qmail information" pages
   * see also: the big qmail picture
   * Wichtig:  notes.sagredo.eu Qmail Installationsvorlage


History

Datum Von angepasst/getestet auf OS Arch Bemerkung
2023-05-18 Karl Schlicker Rocky Linux 9.x x86_64 Anleitung angepasst, basierend auf https://notes.sagredo.eu/ nun für Rocky Linux 9.x
2020-12-27 Karl Schlicker Centos 8.x x86_64 Anleitung angepasst und neu erstellt basierend auf https://notes.sagredo.eu/
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

Zuerst das Devel-Repo aktivieren

dnf config-manager --set-enabled devel
dnf -y install gcc gcc-c++ gdb-minimal openssl openssl-devel stunnel
dnf -y install krb5-devel bzip2 bzip2-devel patch automake 
dnf -y install autoconf make unzip bind-utils openldap-devel libev-devel lz4-devel patch bzip2-devel
dnf -y install spamassassin-iXhash2.noarch
dnf -y install mariadb mariadb-server mariadb-devel
dnf -y install help2man multitail
dnf -y install cracklib cracklib-devel.x86_64 cracklib-dicts expat expat-devel telnet git

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 afdb.de
afdb.de mail is handled by 10 mail.afdb.de.
[root@web1 /]# host -t a afdb.de
host -t a afdb.de

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.16.1-10.el9.x86_64

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

daemontools

umask 0022
mkdir -p /usr/local/src
cd /usr/local/src
mkdir /var/qmail

daemontools aus Github herunterladen

SRC=/usr/local/src
DAEMONTOOLS_VER=0.78.3
cd $SRC
wget https://github.com/sagredo-dev/daemontools/archive/refs/tags/v${DAEMONTOOLS_VER}.tar.gz
tar xzf v${DAEMONTOOLS_VER}.tar.gz

Install daemontools:

cd /var/qmail
mkdir admin
chmod 1755 admin
cd admin
cp -rp /usr/local/src/daemontools-0.78.3/admin/daemontools-0.78.3/ . 
cd daemontools-0.78.3
chown -R root:root .
package/install

daemontools installed Add "clear" service, so that you can easily clear the readproctitle service errors line:

mkdir -p /var/qmail/supervise/clear
touch /var/qmail/supervise/clear/down

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

chmod +x /var/qmail/supervise/clear/run

Prüfen, ob die Daemontools laufen

ps ax|grep svs
1141953 ?        Ss     0:00 /bin/sh /usr/bin/svscanboot
1141955 ?        S      0:00 svscan /service
1143414 pts/0    S+     0:00 grep --color=auto svs
cat > /usr/lib/systemd/system/daemontools.service << __EOF__
[Unit]
Description=Daemontools service supervision
ConditionPathExists=/command/svscanboot

[Service]
ExecStart=/command/svscanboot
Restart=always

[Install]
WantedBy=multi-user.target
__EOF__

# daemontools für systemctl aktivieren
systemctl daemon-reload
systemctl enable daemontools.service
systemctl start  daemontools.service

fehQlibs

fehQlibs are supplementary C libraries by Erwin Hoffmann. They are needed for ucspi-tcp6 and ucspi-ssl.

FEQLIBS_VER=26
cd /usr/local/src
wget https://www.fehcom.de/ipnet/fehQlibs/fehQlibs-${FEQLIBS_VER}.tgz
tar xzf fehQlibs-${FEQLIBS_VER}.tgz 
mv fehQlibs-${FEQLIBS_VER} ..
cd ..
chown -R root:root fehQlibs-${FEQLIBS_VER}
cd fehQlibs-${FEQLIBS_VER}

Change the installation folder modifing the file conf-build as

LIBDIR=/usr/local/lib 
HDRDIR=/usr/local/include 

Compile and install:

make -C src
make -C src shared
make -C src install 

cd .. 
ln -s fehQlibs-${FEQLIBS_VER} qlibs

Damit die qlibs beim Compilieren von ucspi-tcp6 gefunden werden, müssen diese in /etc/ld.so.conf.d/ bekannt gegeben werden.

echo "/usr/local/qlibs" >> /etc/ld.so.conf.d/qlibs.conf
ldconfig

ucspi-tcp6

ucspi-tcp6 is a fork of Bernsteins' ucspi-tcp 0.88 program, which includes, among the other things, ipv6 capabilities to the original ucspi-tcp. tcpserver and tcpclient are easy-to-use command-line tools for building TCP client-server applications.

TCP6_VER=1.13.02
cd /var/qmail/ 
wget https://www.fehcom.de/ipnet/ucspi-tcp6/ucspi-tcp6-${TCP6_VER}.tgz 
tar xzf ucspi-tcp6-${TCP6_VER}.tgz 
cd net/ucspi-tcp6/ucspi-tcp6-${TCP6_VER}/ 
./package/install
/bin/rm /var/qmail/ucspi-tcp6-${TCP6_VER}.tgz

ucspi-ssl

With sslserver we can have a secure connection on port 465 to receive our emails.

You have already installed fehQlibs, which are supplementary C libraries needed for ucspi-ssl.

UCSPISSL_VER=0.13.03
cd /var/qmail 
wget -O /usr/local/src/ucspi-ssl-${UCSPISSL_VER}.tgz https://www.fehcom.de/ipnet/ucspi-ssl/ucspi-ssl-${UCSPISSL_VER}.tgz
tar xzf /usr/local/src/ucspi-ssl-${UCSPISSL_VER}.tgz
cd host/superscript.com/net/ucspi-ssl-${UCSPISSL_VER}
./package/install

qmail

User und Gruppen für QMail anlegen und anschließend netqmail samt aller Patches installieren.

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 /usr/local/src
git clone -b netqmail-1.06 https://github.com/sagredo-dev/qmail.git
cd qmail
make setup check

Symbolischen Link für sendmail einrichten

ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

Pfad und Manpage Pfad für QMail anpassen

cat > /etc/profile.d/qmail.sh << __EOF__
PATH=$PATH:/var/qmail/bin
export PATH
MANPATH=$MANPATH:/var/qmail/man
export MANPATH
__EOF__

netqmail wird nach der Installation von VPopmail konfiguriert und installiert.

Vpopmail

Vpopmail provides an easy way to manage virtual email domains and non /etc/passwd email accounts on your mail servers.

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
VPOPMAIL_VERSION=5.6.3
cd /usr/local/src
wget https://github.com/sagredo-dev/vpopmail/archive/refs/tags/v${VPOPMAIL_VERSION}.tar.gz
tar xzf v${VPOPMAIL_VERSION}.tar.gz
cd vpopmail-${VPOPMAIL_VERSION}
chown -R root:root .

./configure \
        --enable-qmaildir=/var/qmail/ \
        --enable-qmail-newu=/var/qmail/bin/qmail-newu \
        --enable-qmail-inject=/var/qmail/bin/qmail-inject \
        --enable-qmail-newmrh=/var/qmail/bin/qmail-newmrh \
        --disable-roaming-users \
        --enable-auth-module=mysql \
        --enable-incdir=/usr/include/mysql \
        --enable-libdir=/usr/lib64 \
        --enable-logging=p \
        --disable-clear-passwd \
        --enable-auth-logging \
        --enable-sql-logging \
        --disable-passwd \
        --enable-qmail-ext \
        --enable-learn-passwords \
        --enable-mysql-limits \
        --enable-valias \
        --enable-sql-aliasdomains \
        --enable-defaultdelivery \
        --disable-min-pwd-length

make install-strip

Cron-Job für POP after SMTP einrichten:

cat > /etc/cron.d/clearopensmtp << __EOF__
# vpopmail: clear open-smtp
40 * * * * root /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
__EOF__

vusaged

vusaged looks up every vpopmail user and tracks how much storage space they’re using. It requires libev.

libev

libev installieren

cd /usr/local/src
wget  http://dist.schmorp.de/libev/libev-4.33.tar.gz
tar xzvf libev-4.33.tar.gz
cd libev-4.33
chown -R root.root .
./configure
make
make install
ldconfig

vusaged installieren und konfigurieren

VPOPMAILDIR=/home/vpopmail
cd /usr/local/src/vpopmail-${VPOPMAIL_VERSION}/vusaged
CFLAGS=-I/usr/local/include/libev LIBS=`head -1 $VPOPMAILDIR/etc/lib_deps` ./configure --with-vpopmail=$VPOPMAILDIR
make
cp -f vusaged ~vpopmail/bin
cp -f etc/vusaged.conf ~vpopmail/etc

Konfiguration

weiter gehts mit vpopmail

echo '127.:allow,RELAYCLIENT=""' > ~vpopmail/etc/tcp.smtp
(cd ~vpopmail/etc ; tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp)
 echo "| /home/vpopmail/bin/vdelivermail '' delete" > /var/qmail//control/defaultdelivery

MySQL/MariaDB

Generelles Setup
systemctl start mariadb.service
systemctl enable mariadb.service
mariadb-secure-installation
Connection einrichten
mysql -h localhost -u root -p 

CREATE USER 'vpopmail'@'localhost' IDENTIFIED BY 'VPop2024'; 

GRANT USAGE ON * . * TO 'vpopmail'@'localhost' IDENTIFIED BY 'VPop2024' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS vpopmail;
GRANT ALL PRIVILEGES ON `vpopmail` . * TO 'vpopmail'@'localhost';
exit

echo "localhost|0|vpopmail|VPop2024|vpopmail" > ~vpopmail/etc/vpopmail.mysql
Virtual domain and virtual users erzeugen
cd ~vpopmail/bin/

To add/delete a virtual domain

./vadddomain afdb.de [./vdeldomain afdb.de]

To add/delete a virtual user

./vadduser postmaster@afdb.de [./vdeluser postmaster@afdb.de]

To view information about user email accounts:

./vuserinfo postmaster@afdb.de
name:   postmaster
passwd: $6$gGYFkrBW$veJzkVDhKc0x8gVolp.jj8LHiFlw2nwYfb7Rw9lz0EKe.oPKzg5l0r6W.UY4y5nnE2Kz9QX0pNUqqJ1R5wizx.
clear passwd: 
comment/gecos: Postmaster
uid:    0
gid:    0
flags:  0
gecos: Postmaster
limits: No user limits set.
dir:       /home/vpopmail/domains/afdb.de/postmaster
quota:     NOQUOTA
usage:     NOQUOTA
last auth: Sun Oct 20 11:57:32 2024
last auth ip: 127.0.0.1

Upgrade Qmail

libsrs2

This library is a prerequisite of the SRS patch, which is part of my package. You must install this, otherwise the compilation will break.

cd /usr/local/src
wget http://www.libsrs2.org/srs/libsrs2-1.0.18.tar.gz
tar xzf libsrs2-1.0.18.tar.gz
cd libsrs2-1.0.18
./configure
make
make install
ldconfig
cd ../

Füge das Verzeichnis /usr/local/lib zum 'LD_LIBRARY_PATH' hinzu

echo "/usr/local/lib" >> /etc/ld.so.conf.d/usr-local-lib.x86_64.conf
ldconfig

Prüfen, ob libsrs2 Bibliotheken gefunden werden

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

Sourcen herunterladen

cd /usr/local/src
QMAIL_VERSION=2024.06.08
wget https://github.com/sagredo-dev/qmail/archive/refs/tags/v${QMAIL_VERSION}.tar.gz
tar xzf v${QMAIL_VERSION}.tar.gz
cd qmail-${QMAIL_VERSION}

Installieren

make setup check

Zertifikate für SSL erzeugen

make cert
# Daten entsprechend eintragen
make tmprsadh
# Hinweis: Dieser Vorgang dauert einige Zeit.
chown vpopmail.vchkpw /var/qmail/control/*.pem
# Cron Eintrag erzeugen
echo "03 05 * * * /var/qmail/bin/update_tmprsadh > /dev/null 2>&1" >> /etc/cron.d/update_tmprsadh

Konfiguration

Control Dateien anlegen

echo 3 > /var/qmail/control/spfbehavior
echo "| /home/vpopmail/bin/vdelivermail '' delete" > /var/qmail/control/defaultdelivery
echo 200 > /var/qmail/control/concurrencyincoming
echo postmaster > /var/qmail/control/bouncefrom
echo 20000000 > /var/qmail/control/databytes
echo afdb.de > /var/qmail/control/doublebouncehost
echo postmaster > /var/qmail/control/doublebounceto
echo 272800 > /var/qmail/control/queuelifetime
echo 30000000 > /var/qmail/control/softlimit
echo 100 > /var/qmail/control/maxrcpt
echo 2 > /var/qmail/control/brtlimit
echo 10000000 > /var/qmail/control/simsizelimit

Qmail Schnellkonfiguration ausführen

cd /usr/local/src/qmail-2024.06.08
./config-fast mail1.afdb.de

Alias anlegen

cd /var/qmail/alias
echo "postmaster@afdb.de" > .qmail-postmaster
ln -s .qmail-postmaster .qmail-mailer-daemon
ln -s .qmail-postmaster .qmail-root
chmod 644 .qmail*

erste Domain anlegen

/home/vpopmail/bin/vadddomain afdb.de

Verzeichnis für die Logdateien anlegen

mkdir -p /var/log/qmail

cd /var/log/qmail
chown -R qmaill.nofiles .
chgrp root .
chmod -R og-wrx .
chmod g+rx .

Die supervise Skripte anlegen

cd /var/qmail 
wget https://notes.sagredo.eu/files/qmail/supervise.tar.gz 
tar xzf supervise.tar.gz
chown -R root:root rc supervise
rm supervise.tar.gz
ln -s /usr/bin/setuidgid /usr/local/bin/setuidgid
ln -s /usr/bin/multilog /usr/local/bin/multilog
ln -s /usr/bin/softlimit /usr/local/bin/softlimit
cd /service
ln -s /var/qmail/supervise/qmail-smtpd      /service
ln -s /var/qmail/supervise/qmail-smtpsd     /service
ln -s /var/qmail/supervise/qmail-submission /service
ln -s /var/qmail/supervise/qmail-send       /service
ln -s /var/qmail/supervise/vpopmaild        /service
ln -s /var/qmail/supervise/vusaged          /service
ln -s /var/qmail/supervise/clear                /service

Logdateien täglich rotieren und Zeitstempel lesbar anpassen (convert-multilog)

Das Skript convert-multilog sucht in den Ordnern /service/*/log/main nach den Qmail-typischen Logdateien (@4*) und konvertiert die Zeitstempel in den Dateien in lesbare Form und legt im Ordner /var/log/qmail/backup täglich jeweils eine Datei vom Namen /var/log/{service}.{date} an.

Einstellungen
mkdir -p /var/log/qmail/backup
wget -O  /usr/local/bin/convert-multilog https://notes.sagredo.eu/files/qmail/convert-multilog
chmod +x /usr/local/bin/convert-multilog

ln -s /var/log/qmail/send /service/qmail-send/log/main 
ln -s /var/log/qmail/smtpd /service/qmail-smtpd/log/main 
ln -s /var/log/qmail/smtpsd /service/qmail-smtpsd/log/main
ln -s /var/log/qmail/submission /service/qmail-submission/log/main
Cronjob

und den Cronjob anlegen

cat > /etc/cron.d/qmail-logging << __EOF__
59 2 * * * /usr/bin/convert-multilog 1> /dev/null
0 0 * * * /usr/local/bin/svc -a /service/qmail-submission/log
0 0 * * * /usr/local/bin/svc -a /service/qmail-smtpd/log
0 0 * * * /usr/local/bin/svc -a /service/qmail-smtpsd/log
0 0 * * * /usr/local/bin/svc -a /service/qmail-send/log
0 0 * * * /usr/local/bin/svc -a /service/vpopmaild/log
0 0 * * * /usr/local/bin/svc -a /service/vusaged/log
__EOF__

qmailctl

Das modifizierte qmailctl Skript herunterladen und installieren.

wget -O /usr/bin/qmailctl https://notes.sagredo.eu/files/qmail/qmailctl
chmod +x /usr/bin/qmailctl

Dieses Skript beinhalten folgendes

  • Start/Stops der Dienste
  • Aufruf der tcprules. Damit werden die beiden Dateien tcp.smtp.cdb and tcp.submission.cdb neu geladen
  • Statusanzeige für die einzelen Dienste und der Queue
  • Anzeige des Status weitere benötigter Dienste
  • Informationen zum Antivirus-Dienst clamav und der entsprechenden Virusdatenbank


Eine entsprechen Ausgabe sieht in etwa wie folgt aus:

qmailctl stat
qmail-smtpd:           [ up ] (pid 435784) 1 seconds
qmail-smtpd/log:       [ up ] (pid 426723)   0 day(s), 00:07:17
qmail-smtpsd:          [ up ] (pid 435776) 1 seconds
qmail-smtpsd/log:      [ up ] (pid 426722)   0 day(s), 00:07:17
qmail-submission:      [ up ] (pid 435782) 1 seconds
qmail-submission/log:  [ up ] (pid 426724)   0 day(s), 00:07:17
qmail-send:            [ up ] (pid 426763)   0 day(s), 00:07:13
qmail-send/log:        [ up ] (pid 426719)   0 day(s), 00:07:17
vpopmaild:             [ up ] (pid 435783) 1 seconds
vpopmaild/log:         [ up ] (pid 426721)   0 day(s), 00:07:17
vusaged:               [ up ] (pid 399660)   0 day(s), 00:25:56
vusaged/log:           [ up ] (pid 426720)   0 day(s), 00:07:17

dovecot status:        [ down ]
clamd status:          [ down ]
freshclam status:      [ down ]
spamd status:          [ down ]
httpd status:          [ down ]
solr status:           [ down ]
mariadb status:        [ up ]
fail2ban status:       [ down ]
Total Domains: 2

messages in queue: 0
messages in queue but not yet preprocessed: 0

svtools

cd /usr/local/src/
wget https://github.com/kayahr/svtools/archive/master.zip
unzip master.zip
cd svtools-master
make
make install
mkdir /etc/sv /var/log/sv
chown root.root /etc/sv /var/log/sv
cd /usr/local/bin
rm mlcat
wget https://notes.sagredo.eu/files/qmail/mlcat
chmod +x mlcat

tcp.smtp

Die Datei /home/vpopmail/etc/tcp.smtp anpassen

vim /home/vpopmail/etc/tcp.smtp

127.:allow,RELAYCLIENT=""
:allow,CHKUSER_WRONGRCPTLIMIT="3"

anschließend die Datei /home/vpopmail/etc/tcp.submission anpassen (chkuser lässt für eine Client IP nur 3 Fehlversuche bei der Anmeldung zu).

echo ":allow,CHKUSER_WRONGRCPTLIMIT=\"3\"" > /home/vpopmail/etc/tcp.submission
ln -s /home/vpopmail/etc/tcp.smtp /var/qmail/control/tcp.smtp
ln -s /home/vpopmail/etc/tcp.submission /var/qmail/control/tcp.submission
ln -s /home/vpopmail/etc/tcp.smtp.cdb /var/qmail/control/tcp.smtp.cdb

Anschließend tcp.rules neu bauen.

root@h2859558 (FF)[/etc/logrotate.d] # qmailctl cdb
Updated tcp.smtp.cdb.
Updated tcp.submission.cdb.
Ran clearopensmtp

Testing qmail, SMTP and auth

Swaks

swaks ist ein SMTP test Tool, mit dem man einfach alle folgenden Telnet Tests auf einmal ausführen kann.

cd /usr/local/bin
wget http://www.jetmore.org/john/code/swaks/latest/swaks
chown root:root swaks
chmod +x swaks
swaks \
        --to someone@somewhere.net \
        --from postmaster@afdb.de \
        --server localhost \
        --port 587 \
        --ehlo test \
        -tls \
        --auth login \
        --auth-user postmaster@afdb.de \
        --auth-password [PASSWORD]

Überprüfung mit Bordmittel

Einmal stoppen und starten der Daemontools, um zu schauen, ob noch Fehler vorhanden sind ( readproctitle service errors: .....)

systemctl stop daemontools
systemctl start daemontools
ps axfww
1655990 ?        Ss     0:00 /bin/sh /usr/bin/svscanboot
1655992 ?        S      0:00  \_ svscan /service
1655994 ?        S      0:00  |   \_ supervise qmail-submission
1656007 ?        S      0:00  |   |   \_ /usr/local/bin/tcpserver -v -R -l mail.afdb.de -x /home/vpopmail/etc/tcp.submission.cdb -c 20 -u 89 -g 89 0 587 /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true
1655995 ?        S      0:00  |   \_ supervise log
1656010 ?        S      0:00  |   |   \_ /usr/bin/multilog t s16000000 n200 /var/log/qmail/submission
1655996 ?        S      0:00  |   \_ supervise qmail-send
1656004 ?        S      0:00  |   |   \_ qmail-send
1656018 ?        S      0:00  |   |       \_ qmail-lspawn | /home/vpopmail/bin/vdelivermail '' delete
1656019 ?        S      0:00  |   |       \_ qmail-rspawn
1656020 ?        S      0:00  |   |       \_ qmail-clean
1656021 ?        S      0:00  |   |       \_ qmail-todo
1656022 ?        S      0:00  |   |       \_ qmail-clean
1655997 ?        S      0:00  |   \_ supervise log
1656008 ?        S      0:00  |   |   \_ /usr/bin/multilog t s16000000 n200 /var/log/qmail/send
1655998 ?        S      0:00  |   \_ supervise qmail-smtpd
1656005 ?        S      0:00  |   |   \_ /usr/local/bin/tcpserver -v -R -l mail.afdb.de -x /home/vpopmail/etc/tcp.smtp.cdb -c 20 -u 89 -g 89 0 25 /var/qmail/bin/qmail-smtpd
1655999 ?        S      0:00  |   \_ supervise log
1656003 ?        S      0:00  |   |   \_ /usr/bin/multilog t s16000000 n200 /var/log/qmail/smtpd
1656000 ?        S      0:00  |   \_ supervise clear
1656001 ?        S      0:00  |   \_ supervise vpopmaild
1656009 ?        S      0:00  |   |   \_ /usr/local/bin/tcpserver -v -H -R -l 0 -u 0 -g 0 0 89 /home/vpopmail/bin/vpopmaild
1656002 ?        S      0:00  |   \_ supervise log
1656006 ?        S      0:00  |       \_ /usr/bin/multilog t /var/log/qmail/vpopmaild
1655993 ?        S      0:00  \_ readproctitle service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................

Überprüfung mit qmailctl

qmailctl stat
qmail-smtpd:           [ up ] (pid 1656005)   0 day(s), 00:03:50
qmail-smtpd/log:       [ up ] (pid 1656003)   0 day(s), 00:03:50
qmail-submission:      [ up ] (pid 1656007)   0 day(s), 00:03:50
qmail-submission/log:  [ up ] (pid 1656010)   0 day(s), 00:03:50
qmail-send:            [ up ] (pid 1656004)   0 day(s), 00:03:50
qmail-send/log:        [ up ] (pid 1656008)   0 day(s), 00:03:50
vpopmaild:             [ up ] (pid 1656009)   0 day(s), 00:03:50
vpopmaild/log:         [ up ] (pid 1656006)   0 day(s), 00:03:50

dovecot status:        [ down ]
clamd status:          [ down ]
freshclam status:      [ down ]
spamd status:          [ down ]
vusaged status:        [ down ]
httpd status:          [ up ]
mysql status:          [ up ]
fail2ban status:       [ up ]

messages in queue: 6
messages in queue but not yet preprocessed: 0

Verschiedende Checks von externem Rechner

1. Check: Relaying

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

[ktsadmin@truhe ~]$ telnet mail1.afdb.de 25
Trying 85.214.138.131...
Connected to mail.afdb.de.
Escape character is '^]'.
220 mail.afdb.de ESMTP
helo karl
250 mail.afdb.de
mail from:karl@schlicker.org
250 ok
rcpt to:info@schlicker.org
553 5.7.1 sorry, that domain isn't in my list of allowed rcpthosts (chkuser)
quit
221 mail.afdb.de
Connection closed by foreign host.

2. Check : Relaying

[ktsadmin@truhe ~]$ telnet mail.afdb.de 25
Trying 85.214.138.131...
Connected to mail.afdb.de.
Escape character is '^]'.
220 mail.afdb.de ESMTP
helo karl
250 mail.afdb.de
mail from:karl@schlicker.org
250 ok
rcpt to:info@schlicker.org
553 5.7.1 sorry, that domain isn't in my list of allowed rcpthosts (chkuser)
quit
221 mail.afdb.de
Connection closed by foreign host.

3. Check: vpopmail auth

[ktsadmin@truhe ~]$ telnet mail.afdb.de 89
Trying 85.214.138.131...
Connected to mail.afdb.de.
Escape character is '^]'.
+OK 
login postmaster@afdb.de PASSWORD
+OK+
vpopmail_dir /home/vpopmail
domain_dir /home/vpopmail/domains/afdb.de
uid 89
gid 89
name postmaster
comment Postmaster
quota NOQUOTA
user_dir /home/vpopmail/domains/afdb.de/postmaster
encrypted_password $1$vNEhZgIz$rL7zT3TcSpIsXhVOeky6g.
clear_text_password PASSWORD
no_password_change 0
no_pop 0
no_webmail 0
no_imap 0
bounce_mail 0
no_relay 0
no_dialup 0
user_flag_0 0
user_flag_1 0
user_flag_2 0
user_flag_3 0
no_smtp 0
domain_admin_privileges 1
override_domain_limits 0
no_spamassassin 0
delete_spam 0
no_maildrop 0
system_admin_privileges 0
.
quit
+OK 
Connection closed by foreign host.

4. Check: No mailbox test

[ktsadmin@truhe ~]$ telnet mail.afdb.de 25
Trying 85.214.138.131...
Connected to mail.afdb.de.
Escape character is '^]'.
220 mail.afdb.de ESMTP
mail from:info@schlicker.org
250 ok
rcpt to:nobody@afdb.de
550 5.1.1 sorry, no mailbox here by that name (chkuser)
quit
221 mail.afdb.de
Connection closed by foreign host.

autorespond

cd /usr/local/src
AR_VERSION=2.0.7
wget https://github.com/sagredo-dev/autorespond/archive/refs/tags/v${AR_VERSION}.tar.gz
tar xzf v${AR_VERSION}.tar.gz
cd autorespond-${AR_VERSION}
chown -R root:root .
make
make install
/bin/rm /usr/local/src/v${AR_VERSION}.tar.gz

ezmlm-idx

cd /usr/local/src
wget https://notes.sagredo.eu/files/qmail/tar/ezmlm-idx-7.2.2.tar.gz
tar xzf ezmlm-idx-7.2.2.tar.gz
cd ezmlm-idx-7.2.2
chown -R root:root .
cd lang
ln -s de de_DE
ln -s de_DE default
cd ..
make
make man

Test:

 # ./ezmlm-test
getconfopt library:   OK
ezmlm-make:           OK
Using subdb plugin:   std
ezmlm-reject:         OK
ezmlm-[un|is]sub[n]:  OK
ezmlm-checksub:       OK
ezmlm-send:           OK
ezmlm-tstdig:         OK
ezmlm-weed:           OK
ezmlmrc contents:     OK
ezmlm-clean:          OK
ezmlm-store:          OK
ezmlm-return:         OK
ezmlm-warn (1/2):     OK
ezmlm-manage (1/2):   OK
ezmlm-request:        OK
ezmlm-split:          OK
ezmlm-gate:           OK
ezmlm-idx:            OK
ezmlm-get (index):    OK
ezmlm-get (get):      OK
ezmlm-get (thread):   OK
ezmlm-get (digest):   OK
ezmlm-manage (2/2):   OK
ezmlm-moderate:       OK
ezmlm-warn (2/2):     OK
ezmlm-archive:        OK
ezmlm-dispatch:       OK
dispatch editor:      OK
....

MYSQL Support

mysql -u root -p

CREATE USER 'ezmlm'@'localhost' IDENTIFIED BY '4EZMLM2024';

GRANT USAGE ON * . * TO 'ezmlm'@'localhost' IDENTIFIED BY '4EZMLM2024' WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

CREATE DATABASE IF NOT EXISTS `ezmlm` ;
GRANT ALL PRIVILEGES ON `ezmlm` . * TO 'ezmlm'@'localhost';

Die Datei conf-cc anpassen:

gcc -O -g -I/usr/include/mysql -I/usr/include/pgsql

Die Datei conf-ld anpassen:

cc -g -rdynamic -B /usr/lib64/mysql

Kompilieren und Installieren:

make mysql
make install

qmailadmin

cracklib

Cracklib sorgt für bessere Passwörter, weil bei der Anlage neuer Passwört mit eine Wortliste verglichen wird.

Dieses wird bei Qmailadmin bei der Anlage neuer Accounts benutzt.

Quellen installieren
dnf -y install cracklib cracklib-dicts.x86_64
Wörterbuch aufbauen
mkdir /usr/share/cracklib
cd /usr/share/cracklib
wget https://github.com/cracklib/cracklib/releases/download/v${CRACKLIB_VER}/cracklib-words-${CRACKLIB_VER}.bz2
bunzip2 cracklib-words-${CRACKLIB_VER}.bz2
Cracklib testen
cracklib-check

Installation

QMA_VERSION=1.2.23
cd /usr/local/src

touch /var/log/qma-auth.log
chgrp apache /var/log/qma-auth.log
chmod g+w /var/log/qma-auth.log

wget https://github.com/sagredo-dev/qmailadmin/archive/refs/tags/v${QMA_VERSION}.tar.gz
tar xzf v${QMA_VERSION}.tar.gz
cd qmailadmin-${QMA_VERSION}
chown -R root:root .

mkdir -p /var/www/qmail/images

QMAILROOT=/var/www/qmail
./configure \
  --enable-htmldir=${QMAILROOT} \
  --enable-cgibindir=${QMAILROOT}/cgi-bin \
  --enable-cgipath=/cgi-bin/qmailadmin \
  --enable-imagedir=${QMAILROOT}/qmailadmin/files \
  --enable-imageurl=/qmailadmin/files \
  --enable-htmllibdir=${QMAILROOT}/qmailadmin \
  --enable-qmaildir=/var/qmail \
  --enable-domain-autofill \
  --enable-vpopuser=vpopmail \
  --enable-vpopgroup=vchkpw \
  --enable-autoresponder-path=/usr/local/bin \
  --enable-ezmlmdir=/usr/local/bin/ezmlm \
  --enable-modify-quota \
  --disable-ezmlm-mysql \
  --disable-trivial-password \
  --disable-catchall \
  --enable-cracklib=/usr/share/cracklib/pw_dict

Die QMAIL-Image Dateien im images Ordner speichern

cd /var/www/qmail/images
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/favicon-16x16.png
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/favicon-32x32.png
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/logo.png
wget https://notes.sagredo.eu/files/qmail//patches//qmailadmin//skin//img/logo_big.png

Kompilieren und installieren

cd /usr/local/src/qmailadmin-${QMA_VERSION}
make
make install-strip

Erweiterungen (Add-Ons)

Realtime Block List (RBL)

cat > /var/qmail/control/dnsbllist << __EOF__
-b.barracudacentral.org
-zen.spamhaus.org
-psbl.surriel.com 
-bl.spamcop.net
__EOF__
qmailctl restart
qmail-showctl |grep dnsbl

List at -b.barracudacentral.org configured for dnsbl check.
List at -zen.spamhaus.org configured for dnsbl check.
List at -psbl.surriel.com configured for dnsbl check.
List at -bl.spamcop.net configured for dnsbl check.

Greetdelay

Um Greetdelay zu aktivieren müssen in den beiden Dateien qmail-smtpd/run und qmail-submission/run die nachfolgenden Werte aktiviert werden.

export SMTPD_GREETDELAY=15
export DROP_PRE_GREET=1


SPF

The SPF behavior of your mail server is controlled by the file /var/qmail/control/spfbehavior. You can specify a value between 0 and 6:

   0 disabled (Default). Never do SPF lookups, don't create Received-SPF headers
   1 selects 'annotate-only' mode,  where  qmail-smtpd  will  annotate  incoming  email with Received-SPF fields, but will not reject any messages. 
   2 will produce temporary failures on DNS lookup problems so you can make sure you always have meaningful Received-SPF headers. 
   3 selects  'reject'  mode,  where  incoming  mail  will be rejected if the SPF record says 'fail'. 
   4 selects a more stricter rejection mode, which is like 'reject' mode, except that incoming mail will also be rejected when the SPF record says 'softfail'. 
   5 will also reject when the SPF record says 'neutral'
   6 if no SPF records are available at all (or a syntax error was encountered).


Sender Rewriting Scheme (SRS)

echo "| /var/qmail/bin/srsfilter" > /var/qmail/alias/.qmail-srs-default
SRSDOMAIN=srs.afdb.de
echo $SRSDOMAIN:srs >> /var/qmail/control/virtualdomains
echo $SRSDOMAIN >> /var/qmail/control/rcpthosts
echo $SRSDOMAIN > /var/qmail/control/srs_domain
echo "$( echo $RANDOM|md5sum|head -c 10)" > /var/qmail/control/srs_secrets

Im DNS müssen wir dann für die Domain afdb.de noch folgenden Eintrag hinzufügen:

srs.afdb.de. IN TXT "v=spf1 a mx -all"

DKIM

Zuerst einen neuen Ordner für die Domainkeys anlegen

mkdir /var/qmail/control/domainkeys
chown -R qmailr:qmail /var/qmail/control/domainkeys

Anschließend für jede Domain ein Domainkey erzeugen

dknewkey -d afdb.de -t rsa -b 2048 default

und anzeigen mit nachfolgenden Befehl

dknewkey -p -d afdb.de -e
DKIM TXT record for afdb.de with selector=default file /var/qmail/control/domainkeys/afdb.de/default.pub
default._domainkey.afdb.de. IN TXT ("v=DKIM1; k=rsa; t=y; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuXnfA8SYIXOy+ZwKTTmHHOtnFbD9kte9pQNUYAMsFnHC5s64b1ZQwPfhtGa+8rVUm3+cu3ugMcVH5DqJuIWU+o7CJhVMYFLCfm49vxB44xyYLn+yPSge8hqxTz91yn9CqydZDT0s4pQp8nnOBs8VJIndxnFztIRSFKcVhshwpB8aeKJyb+m3sdReYkin" "dimQHKRqS3M4sf4dly/l0i/66jmljNCsvaaTLw6BJAWGSKsokiKWWws2buNxAI2+nYUVnOGHyjeUxpn1J0f4eDoxTQ9YSBPIj9RFYEhuIck5MkoL3Mzv7OBHRs/6wPsu40eqhqrgQLbJ0O8QY9U1A/283QIDAQAB")
-rw-r--r--. 1 root qmail 458  3. Jan 12:42 /var/qmail/control/domainkeys/afdb.de/default.pub
-rw-r-----. 1 root qmail 1704  3. Jan 12:42 /var/qmail/control/domainkeys/afdb.de/default
------------------------------------------------------

Im DNS der Domain (hier afdb.sw) muss dann noch folgenden TXT Eintrag hinterlegt werden.

default._domainkey.afdb.de. IN TXT ("v=DKIM1; k=rsa;  p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuXnfA8SYIXOy+ZwKTTmHHOtnFbD9kte9pQNUYAMsFnHC5s64b1ZQwPfhtGa+8rVUm3+cu3ugMcVH5DqJuIWU+o7CJhVMYFLCfm49vxB44xyYLn+yPSge8hqxTz91yn9CqydZDT0s4pQp8nnOBs8VJIndxnFztIRSFKcVhshwpB8aeKJyb+m3sdReYkin" "dimQHKRqS3M4sf4dly/l0i/66jmljNCsvaaTLw6BJAWGSKsokiKWWws2buNxAI2+nYUVnOGHyjeUxpn1J0f4eDoxTQ9YSBPIj9RFYEhuIck5MkoL3Mzv7OBHRs/6wPsu40eqhqrgQLbJ0O8QY9U1A/283QIDAQAB")

Anschließend kommentiert man im Skript /var/qmail/rc die Zeile #DKIM_ON=1 aus.

#!/bin/sh

QMAILDIR=/var/qmail

# Comment out DKIM_ON=1 to disable dkim sign at qmail-remote level
# You have to define your variables in control/filterargs (DKIM page for more info)
# echo "*:remote:/var/qmail/bin/qmail-dkim:DKIMQUEUE=/bin/cat,DKIMSIGN=/var/qmail/control/domainkeys/%/default,DKIMSIGNOPTIONS=-z 2" > /var/qmail/control/filterargs

DKIM_ON=1

if [ -r $QMAILDIR/control/filterargs ] &&<feff><200b> [ -n "$DKIM_ON" ]; then
  exec env - PATH="$QMAILDIR/bin:$PATH" \
  QMAILREMOTE=$QMAILDIR/bin/spawn-filter \
  qmail-start "`cat $QMAILDIR/control/defaultdelivery`"
else
  # Use this if you are signing at qmail-smtpd level or you don't want to sign at all
  exec env - PATH="$QMAILDIR/bin:$PATH" \
  qmail-start "`cat $QMAILDIR/control/defaultdelivery`"
fi

und danach erzeugt man die Datei control/filterargs

echo "*:remote:/var/qmail/bin/qmail-dkim:DKIMQUEUE=/bin/cat,DKIMSIGN=/var/qmail/control/domainkeys/%/default,DKIMSIGNOPTIONS=-z 2" > /var/qmail/control/filterargs

Normalerweise muss man nun noch das qmail-smtpd run script anpassen, aber das ist bei uns schon vorkonfiguriert.

Dovecot

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

Installation

DOVECOT_VER=2.3.21.1
cd /usr/local/src
wget https://www.dovecot.org/releases/2.3/dovecot-${DOVECOT_VER}.tar.gz
tar xzf dovecot-${DOVECOT_VER}.tar.gz
chown -R root.root dovecot-${DOVECOT_VER}
cd dovecot-${DOVECOT_VER}

./configure \
        --prefix=/usr/local/dovecot \
        --with-sql \
        --with-mysql \
        --with-docs \
        --with-ssl \
        --without-shadow \
        --without-pam \
        --without-ldap \
        --without-pgsql \
        --without-sqlite \
        --with-solr \
        --with-systemd systemdsystemunitdir=/lib/systemd/system

und kompilieren und installieren

make
make install

Pigeonhole für Dovecot

PIGEONHOLE_VER=0.5.21.1
cd /usr/local/src
wget https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}.tar.gz
tar xvzpf dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}.tar.gz
cd dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}
./configure --prefix=/usr/local/dovecot-2-3-pigeonhole --with-dovecot=/usr/local/dovecot/lib/dovecot/
make
make install

cd /usr/local
ln -s /usr/local/dovecot-pigeonhole-2.3-pigeonhole /usr/local/dovecot-pigeonhole

Konfiguration

Benutzer und Gruppen

Die Genutzer und Gruppen RHEL-Konform anlegen

groupadd --gid 97 dovecot
groupadd --gid 988 dovenull

useradd -g dovecot --uid 97 dovecot
useradd -g dovenull --uid 991 dovenull

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

Konfigurationsdateien kopieren

und Standardkonformen Verlinkung einrichten

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

Sieve Konfigurationsdateien

cd /etc/dovecot/conf.d
cp /usr/local/dovecot/share/doc/dovecot/example-config/conf.d/20-managesieve.conf .
cp /usr/local/dovecot/share/doc/dovecot/example-config/conf.d/90-sieve.conf .


und /etc/profile anpassen

echo "export PATH=\$PATH:/usr/local/dovecot/bin" >> /etc/profile
echo "export MANPATH=\$MANPATH:/usr/local/dovecot/share/man" >> /etc/profile

Ordner und Dateien für local.conf

Achtung:

81.169.197.241 ist die aktuelle IP des Mailservers und muss dann evtl. im Nachfolgenden ausgetauscht werden.

cat > /etc/dovecot/dovecot-sql.conf.ext << __EOT__
driver = mysql
connect = host=localhost dbname=vpopmail user=vpopmail password=VPop2024
default_pass_scheme = SHA512-CRYPT 

password_query = \

SELECT \
	CONCAT(vpopmail.pw_name, '@', vpopmail.pw_domain) AS user, \
  		vpopmail.pw_passwd AS password, \
                vpopmail.pw_dir AS userdb_home, \
                89 AS userdb_uid, \
                89 AS userdb_gid, \
                CONCAT('*:bytes=', REPLACE(SUBSTRING_INDEX(vpopmail.pw_shell, 'S', 1), 'NOQUOTA', '0')) AS userdb_quota_rule \
	FROM vpopmail \
		LEFT JOIN aliasdomains ON aliasdomains.alias='%d' \
                LEFT JOIN limits ON limits.domain='%d' \
	WHERE \
		vpopmail.pw_name='%n' \
		AND \
		(vpopmail.pw_domain='%d' OR vpopmail.pw_domain=aliasdomains.domain) \
                AND \
                ('%a'!='995' OR !(vpopmail.pw_gid & 2)) \
                AND \
                ('%r'!='81.169.197.241' OR !(vpopmail.pw_gid & 4)) \
                AND \
                ('%r'='81.169.197.241' OR '%a'!='993' OR !(vpopmail.pw_gid & 8)) \
                AND \ 
                ('%r'!='81.169.197.241' OR COALESCE(disable_webmail,0)!=1) \ 
                AND \ 
                ('%r'='81.169.197.241' OR COALESCE(disable_imap,0)!=1)

 
user_query = \ 
   SELECT \ 
       vpopmail.pw_dir AS home, \ 
       89 AS uid, \ 
       89 AS gid \ 
   FROM vpopmail \ 
   WHERE \ 
       vpopmail.pw_name='%n' \ 
       AND \ 
       vpopmail.pw_domain='%d'

iterate_query = SELECT CONCAT(pw_name,'@',pw_domain) AS user FROM vpopmail
__EOT__

chmod go-wrx /etc/dovecot/dovecot-sql.conf.ext

Create the run folder:

ln -s /var /usr/local/dovecot/var
mkdir -p /usr/local/dovecot/var/run/dovecot
  1. erzeuge besseren DH Key
openssl dhparam -out /usr/local/dovecot/etc/dh.pem 4096

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 /etc/dovecot
cat > local.conf << __EOF__
#--------------------------------------------------------
# dovecot.conf
#--------------------------------------------------------
protocols = imap pop3 sieve
listen=127.0.0.1,81.169.197.241
base_dir = /var/run/dovecot/
state_dir = /var/lib/dovecot

#--------------------------------------------------------
# auth-sql.conf.ext
# ------------------------------------------------------
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = prefetch
}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}


#--------------------------------------------------------
# 10.auth.conf
#--------------------------------------------------------
disable_plaintext_auth = no
auth_mechanisms = plain login # the sql drivers requires that the pwd is transmitted with no encryption


#--------------------------------------------------------
# 10-ssl.conf
#--------------------------------------------------------
ssl=yes
ssl_cert = </etc/letsencrypt/live/mail.schlicker.org/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.schlicker.org/privkey.pem
ssl_cipher_list = DHE-RSA-AES256-SHA:DHE-RSA-AES128 SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!PSK:!SRP:!DSS:!SSLv2:!RC4
ssl_dh = </usr/local/dovecot/etc/dh.pem

#--------------------------------------------------------
# 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
  }
}
service stats {
    unix_listener stats-reader {
    user = vpopmail
    group = vchkpw
    mode = 0660
  }
  unix_listener stats-writer {
    user = vpopmail
    group = vchkpw
    mode = 0660
  }
}

#--------------------------------------------------------
# 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

submission_host = 85.214.138.131:25 

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

#--------------------------------------------------------
# 15-mailboxes.conf
#--------------------------------------------------------
namespace inbox {
  mailbox Drafts {
    special_use = \Drafts
    auto = subscribe
  }
  mailbox Junk {
    special_use = \Junk
    auto = subscribe
    autoexpunge = 30d
  }
  mailbox Trash {
    special_use = \Trash
    auto = subscribe
    autoexpunge = 60d
  }
}

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

#--------------------------------------------------------
# 20-pop3.conf
#--------------------------------------------------------
protocol pop3 {
  mail_plugins = $mail_plugins quota
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
#--------------------------------------------------------
# 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


#--------------------------------------------------------
# 90-sieve.conf
#--------------------------------------------------------
sieve_extensions = +spamtest +spamtestplus +relational +comparator-i;ascii-numeric
sieve_before = /etc/dovecot/sieve


#--------------------------------------------------------
# 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

Logdatei und logrotate

Logdatei anlegen

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

Logrotate konfigurieren

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


Pidgeon Sieve anpassen

Info: http://tools.ietf.org/html/rfc5235 - http://wiki2.dovecot.org/Pigeonhole/Sieve/Examples

Zuerst ein neuen Ordner für globale Sieve-Regeln anlegen

cd /etc/dovecot/
mkdir sieve
chown -R vpopmail.vchkpw sieve

Erste Regel-Datei anlegen, erkannte SPAMs in den JUNK Ordner verschieben.

cat > /etc/dovecot/sieve/move-spam.sieve << __EOF__
require ["fileinto"];
if anyof (header :contains "X-Spam-Flag" "YES")
{
 fileinto "Junk";
}
/* Other messages get filed into INBOX */
__EOF__

und anschließend als User vpopmail die Regeln compilieren

su vpopmail
cd /etc/dovecot/sieve
/usr/local/dovecot-2-3-pigeonhole/bin/sievec .

Einstellungen überprüfen

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

doveconf|more


Start Dovecot

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

systemctl enable dovecot
systemctl start dovecot

Indizierung (Apache SOLR)

Solr is a Lucene indexing server. Dovecot communicates to it using HTTP/XML queries. With this indexing server, you can do text searches in your emails.

Voraussetzung Java

dnf install -y java-latest-openjdk.x86_64

Test

java -version
openjdk version "23.0.1" 2024-10-15
OpenJDK Runtime Environment (Red_Hat-23.0.1.0.11-1) (build 23.0.1+11)
OpenJDK 64-Bit Server VM (Red_Hat-23.0.1.0.11-1) (build 23.0.1+11, mixed mode, sharing)

Installation

cd /usr/local/src
SOLR_VER=9.5.0
wget https://www.apache.org/dyn/closer.lua/solr/solr/${SOLR_VER}/solr-${SOLR_VER}.tgz?action=download -O solr-${SOLR_VER}.tgz
tar xzf solr-${SOLR_VER}.tgz 
solr-${SOLR_VER}/bin/install_solr_service.sh --strip-components=2
bash ./install_solr_service.sh solr-${SOLR_VER}.tgz -f -n

Der letzte Aufruf erzeugt einige Fehler, weil wir hier auf einem systemd-System sind, daher nach Abbruch des Skripts ein paar manuelle Anpassungen

cat > /etc/systemd/system/solr.service << __EOF__
[Unit]
Description=Apache SOLR

[Service]
Type=forking
User=solr
Environment=SOLR_INCLUDE=/etc/default/solr.in.sh
ExecStart=/opt/solr/bin/solr start
ExecStop=/opt/solr/bin/solr stop
Restart=on-failure
LimitNOFILE=65000
LimitNPROC=65000
TimeoutSec=180s

[Install]
WantedBy=multi-user.target
__EOF__

Konfiguration

Standard Konfiguration anpassen

cat >> /etc/default/solr.in.sh << __EOF__
SOLR_TIMEZONE="Europe/Berlin"
SOLR_IP_ALLOWLIST="127.0.0.1"
SOLR_SECURITY_MANAGER_ENABLED=true
SOLR_OPTS="$SOLR_OPTS -Dsolr.allowUrls=http://localhost:8983"
__EOF__

System Limits anpassen

cat > /etc/security/limits.d/90-solr.conf << __EOF__
solr    soft    nofile  65536 
solr    soft    nproc   65536 
solr    hard    nofile  65536 
solr    hard    nproc   65536
__EOF__

Starten

systemctl daemon-reload
systemctl enable solr.service
systemctl start solr.service
systemctl status -l solr


Dovecot Anpassungen

SOLR muss laufen um die Grundanpassungen für dovecot vorzunehmen

sudo -u solr /opt/solr/bin/solr create -c dovecot
cd /var/solr/data/dovecot/conf
rm -f schema.xml managed-schema.xml solrconfig.xml
wget https://notes.sagredo.eu/files/qmail/solr/9.5/solr-schema-9.5.0.xml -O schema.xml
wget https://notes.sagredo.eu/files/qmail/solr/9.5/solrconfig-9.5.0.xml -O solrconfig.xml 
chown solr:solr solrconfig.xml schema.xml

anschließend die Datei /etc/dovecot/local.conf anpassen

vim /etc/dovecot/local.conf
...
#--------------------------------------------------------
# 10-mail.conf
#--------------------------------------------------------
...
mail_plugins =  $mail_plugins quota zlib fts fts_solr
..
#--------------------------------------------------------
# 90-plugin.conf
#--------------------------------------------------------
plugin {
...
  # solr
  fts = solr
  fts_solr = url=http://localhost:8983/solr/dovecot/
..
}

Control panel setup

virtuellen Host anlegen
cat > /etc/httpd/cond.d/solr.afdb.de.conf << __EOF__
<VirtualHost 81.169.197.241:443>
#-------------------------------------------------------------------------
# solr.afdb.de
#
# webmaster         : webmaster@schlicker.org
# betreiber [email] : karl
# angelegt [von]    : 2024-10-06 [karl]
# gruppe            : wwwgrp01
#
#-------------------------------------------------------------------------

#  General setup for the virtual host
DocumentRoot /www/solr.afdb.de/www
ServerName solr.afdb.de
ServerAlias solr.afdb.de
ServerAdmin karl@schlicker.org

CustomLog /www/solr.afdb.de/logs/access.log combined
ErrorLog  /www/solr.afdb.de/logs/error.log

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
SSLHonorCipherOrder on
SSLCompression      off
SSLSessionTickets   off

SSLCertificateFile /etc/letsencrypt/live/solr.afdb.de/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/solr.afdb.de/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/solr.afdb.de/fullchain.pem

SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

DirectoryIndex index.html index.php

<Directory "/www/mail.afdb.de/www/">
  Require all granted
  RewriteEngine On
</Directory>

SSLProxyEngine On
ProxyRequests Off
ProxyPass        / http://localhost:8983/
ProxyPassReverse / http://localhost:8983/

</VirtualHost>
__EOF__
SOLR absichern
cat > /var/solr/data/security.json << __EOF__
{ 
"authentication":{ 
"blockUnknown": true, 
"class":"solr.BasicAuthPlugin", 
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}, 
"realm":"My Solr users", 
"forwardCredentials": false 
}, 
"authorization":{ 
"class":"solr.RuleBasedAuthorizationPlugin", 
"permissions":[{"name":"security-edit","role":"admin"}], 
"user-role":{"solr":"admin"} 
}, 
"auditlogging":{ 
"class": "solr.SolrLogAuditLoggerPlugin", 
"async": true, 
"blockAsync" : false, 
"numThreads" : 2, 
"queueSize" : 4096, 
"eventTypes": ["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"] 
} 
}
__EOF__

chown solr:solr /var/solr/data/security.json
chmod o-r /var/solr/data/security.json

systemctl restart solr

Anschließend kann sich über https://solr.afdb.de anmelden, und die Anpassungen machen und einen User dovecot wie gezeigt konfigurieren.

Solr control panel.png

zum Schluß in der Daeit /etc/dovecot/local.conf die SOLR Einstellungen anpassen

vim /etc/dovecot/local.conf
..
#--------------------------------------------------------
# 90-plugin.conf
#--------------------------------------------------------
plugin {
...
  # solr
  fts = solr
  fts_solr = url=http://dovecot:4Dovecot2024!@localhost:8983/solr/dovecot/
..
}

systemctl restart dovecot

Test

telnet 0 143 
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
a login postmaster@afdb.de 4Postmaster2024!
a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE COMPRESS=DEFLATE] Logged in
a select Inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 9 EXISTS
* 0 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1730639884] UIDs valid
* OK [UIDNEXT 42] Predicted next UID
* OK [HIGHESTMODSEQ 19] Highest
a OK [READ-WRITE] Select completed (0.001 + 0.000 secs).
a SEARCH text "Dovecot" 
* SEARCH
a OK Search completed (0.002 + 0.000 + 0.001 secs).
a logout
* BYE Logging out
a OK Logout completed (0.001 + 0.000 secs).
Connection closed by foreign host.

Automatischen Löschen (expunge)

Skript für das automatische löschen anlegen

cd /usr/local/dovecot/bin/
wget https://notes.sagredo.eu/files/qmail/dovecot_expunge/dovecot_expunge-cb
mv dovecot_expunge-cb dovecot_expunge.sh
chmod +x /usr/local/dovecot/bin/dovecot_expunge.sh

und Cronjob definieren

cat > /etc/cron.d/dovecot_expunge << __EOF__
# Dovecot expunge (Trash und Junk leeren)
40 3 * * Sun /usr/local/dovecot/bin/dovecot_expunge.sh >> /var/log/dovecot/dovecot_expunge.log 2>&1
__EOF__

Funktionstest

DNS-Konfiguration

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

[ktsadmin@truhe ~]$ dig afdb.de mx

; <<>> DiG 9.11.25-RedHat-9.11.25-2.fc33 <<>> afdb.de mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42743
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;afdb.de.			IN	MX

;; ANSWER SECTION:
afdb.de.		86400	IN	MX	10 mail.afdb.de.
afdb.de.		86400	IN	MX	40 old.afdb.de.

;; Query time: 24 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Di Dez 29 14:57:50 CET 2020
;; MSG SIZE  rcvd: 77

Anschließend die IP-Addresse des Mailservers feststellen

ktsadmin@truhe ~]$ dig mail.afdb.de

; <<>> DiG 9.11.25-RedHat-9.11.25-2.fc33 <<>> mail.afdb.de
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3256
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;mail.afdb.de.			IN	A

;; ANSWER SECTION:
mail.afdb.de.		5566	IN	A	85.214.138.131

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Di Dez 29 14:59:20 CET 2020
;; MSG SIZE  rcvd: 57

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:

dig -x 85.214.138.131

; <<>> DiG 9.11.20-RedHat-9.11.20-5.el8 <<>> -x 85.214.138.131
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4278
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 78173c5c83c23f47f7e89df15feb45ba1306ae8d8730e6f4 (good)
;; QUESTION SECTION:
;131.138.214.85.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
131.138.214.85.in-addr.arpa. 1800 IN	PTR	mail.afdb.de.

;; Query time: 1 msec
;; SERVER: 81.169.163.106#53(81.169.163.106)
;; WHEN: Di Dez 29 16:05:30 CET 2020
;; MSG SIZE  rcvd: 110


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:587

Virtuelle Mail-Domain mit vpopmail anlegen

# /home/vpopmail/bin/vadddomain afdb.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 afdb.de
domain: afdb.de
uid:    89
gid:    89
dir:    /home/vpopmail/domains/afdb.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): mail.afdb.de
Postausgangsserver (SMTP)                : mail.afdb.de

Benutzername (POP/IMAP/SMTP-AUTH)        : postmaster@afdb.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

Erweiterungen

Den Qmail-Toaster um zusätzliche Erweiterungen und Funkionen bzgl. SPAM-Prävention und Viren-Überprüfung erweitern.

Letsencrypt Zertifikate einbauen

Als erstes beantragt man ein Zertifikat für den Mailserver (mail.afdb.de) bei Letencrypt, wie hier beschrieben

Zertifikate automatisch erneuern

Zuerst legt man ein Skript unter /var/qmail/bin/ an, welches automatisch das Letsencrypt zertifikat korrekt verteilt.

cat > /var/qmail/bin/renew_cert.sh << __EOT__
#!/bin/bash
############################################################################
#
#  @description:        build the servercert for qmail from letsencrypt cert
#  @author:             Karl Schlicker
#  @history:            
#       20170708        First Version
#
############################################################################
SERVER_CERT="servercert.pem"
QMAIL_CONTROL_DIR="/var/qmail/control"
BACKUP_DIR="\${QMAIL_CONTROL_DIR}/backup"
BACKUP_FILE="\${BACKUP_DIR}/${SERVER_CERT}.$( date +%F)"
LETSENCRYPT_CERT_PATH="/etc/letsencrypt/live/mail.schlicker.org"

# check, if backup dir exist
if [ ! -d "${BACKUP_DIR}" ]; then
        /bin/mkdir "\${BACKUP_DIR}"
fi 

# first make a backup
/bin/cp "\${QMAIL_CONTROL_DIR}/\${SERVER_CERT}"  "\${BACKUP_FILE}"

echo "\$(date +%F):" 

# concat the cert and the key
/bin/cat "\${LETSENCRYPT_CERT_PATH}/fullchain.pem" "\${LETSENCRYPT_CERT_PATH}/privkey.pem" > "\${QMAIL_CONTROL_DIR}/\${SERVER_CERT}"

# Qmail restart & Dovecot restart
/usr/bin/qmailctl restart
systemctl restart dovecot

__EOT__

chmod +x /var/qmail/bin/renew_cert.sh

Per Cronjob jeden Sonntag erneuern lassen

# Qmail Cert renew
0 0 * * Sun root /var/qmail/bin/renew_cert.sh >> /var/log/letsencrypt/renew_qmail_cert.log 2>&1

Zertifikatablauf überwachen

Den Ablauf der Zertifikate kann man über folgenden Webseite kostenlos überwachen lassen.

RedSift

SpamAssassin

Referenzen

Installation der nötigen RPM-Pakete

Wir installieren zuerst die RPM-Pakete, später bauen wir aus perl CPAN spamassassin neu.

dnf -y install spamassassin spamassassin-iXhash2 perl-Razor-Agent pyzor  p7zip

Verzeichnisse, User und Gruppen anlegen

mkdir -p /etc/mail/spamassassin /home/spamd /var/log/spamassassin

groupadd spamd
useradd -g spamd -d /home/spamd spamd
chown -R spamd:spamd /home/spamd

chgrp apache /var/log/spamassassin
chmod g+w /var/log/spamassassin

Plugins

SpamAssassin lässt sich mit vielen Plugins aufwerten und damit die Erkennungsrate von SPAMs verbessern

Razor

Konfiguration für Razor anlegen

mkdir -p /etc/mail/spamassassin/.razor
razor-admin -home=/etc/mail/spamassassin/.razor -register
razor-admin -home=/etc/mail/spamassassin/.razor -create
razor-admin -home=/etc/mail/spamassassin/.razor -discover

Set up permissions

chgrp apache /etc/mail/spamassassin/.razor/identity-*
chmod 640 /etc/mail/spamassassin/.razor/identity-*
chmod 644 /etc/mail/spamassassin/.razor/razor-agent.log

/etc/sysconfig/spamassassin anpassen

# Options to spamd
#SPAMDOPTIONS="-c -m5 -H --razor-home-dir='/var/lib/razor/' --razor-log-file='sys-syslog'"
SPAMDOPTIONS="-c -m5 -u spamd -H /home/spamd --razor-home-dir='/etc/mail/spamassassin/.razor/' --razor-log-file='/var/log/spamassassin/razor_agent.log'"

Pyzor

mkdir -p /etc/mail/spamassassin/.pyzor
chown spamd:spamd /etc/mail/spamassassin/.pyzor

RelayCountry

Für SpamAssassin gibt es ein Plugin namens RelayCountry, 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.

Benötigte Pakete installieren

Da dieses nicht im RPM-Paket von SpamAssassin enthalten ist, müssen wir hier SpamAssassin neu bauen. Dazu müssen wir zuerst perl-CPAN installieren und konfigurieren. Zuerst installiert man die dafür benötigten Pakete

dnf -y install perl-CPAN perl-YAML perl-JSON-PP perl-Test perl-Socket6 perl-IO-Socket-INET6 
dnf -y install perl-BerkeleyDB perl-DBD-MySQL
dnf -y install perl-Net-Patricia perl-Mail-SPF_XS perl-Mail-SPF perl-Net-IP perl-Net-DNS
dnf -y install perl-Geo-IP GeoIP-GeoLite-data-extra geoipupdate 
dnf -y install perl-Time-HiRes perl-Devel-Peek perl-open
CPAN Module installieren und RelayCount in SpamAssassin bauen

und anschließend installiert man über CPAN die fehlenden Module und installiert am Schluß RelayCountry.

cpan -i IP::Country::Fast
cpan -i Devel::Cycle
cpan -i IO::String
cpan -i Test::Taint
cpan -i Readonly
cpan -i Params::Validate
cpan -i Specio
cpan -i Params::ValidationCompiler
cpan -i DateTime::Locale
cpan -i DateTime::TimeZone
cpan -i MaxMind::DB::Metadata 
cpan -i MaxMind::DB::Reader 
cpan -i GeoIP2::Database::Reader
cpan -i Mail::SpamAssassin::Plugin::RelayCountry

Danach sollten unter folgende Verzeichnis die GeoIP-DBs enthalten sein

cd /usr/share/GeoIP/
ls -l
insgesamt 113328
lrwxrwxrwx 1 root root       16 28. Nov 2019  GeoIPASNum.dat -> GeoLiteASNum.dat
-rw-r--r-- 1 root root  5628114 19. Jun 2018  GeoIPASNumv6.dat
lrwxrwxrwx 1 root root       15 28. Nov 2019  GeoIPCity.dat -> GeoLiteCity.dat
lrwxrwxrwx 1 root root       17 28. Nov 2019  GeoIPCityv6.dat -> GeoLiteCityv6.dat
lrwxrwxrwx 1 root root       18 22. Mär 2020  GeoIP.dat -> GeoLiteCountry.dat
-rw-r--r-- 1 root root  2322773 19. Jun 2018  GeoIPv6.dat
-rw-r--r-- 1 root root 56548946  7. Jun 2018  GeoLite2-City.mmdb
-rw-r--r-- 1 root root  3423846  7. Jun 2018  GeoLite2-Country.mmdb
-rw-r--r-- 1 root root  4638365  4. Apr 2018  GeoLiteASNum.dat
lrwxrwxrwx 1 root root       16 28. Nov 2019  GeoLiteASNumv6.dat -> GeoIPASNumv6.dat
-rw-r--r-- 1 root root 20539238  4. Apr 2018  GeoLiteCity.dat
-rw-r--r-- 1 root root 21684452 19. Jun 2018  GeoLiteCityv6.dat
-rw-r--r-- 1 root root  1242574  4. Apr 2018  GeoLiteCountry.dat
Konfiguration

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

#
# Relay Country
loadplugin Mail::SpamAssassin::Plugin::RelayCountry

und fügt am Ende von /etc/mail/spamassassin/local.cf folgenden Inhalt hinzu:

vim /etc/mail/spamassassin/local.cf
...

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

Konfiguration

Die Konfigurationsdateien befinden sich im Ordner /etc/mail/spamassassin.

local.cf

# These values can be overridden by editing ~/.spamassassin/user_prefs.cf 
# (see spamassassin(1) for details)

# These should be safe assumptions and allow for simple visual sifting
# without risking lost emails.

required_hits 5
report_safe 0
rewrite_header Subject [SPAM]
use_bayes 1
bayes_auto_learn 1
use_txrep 1
txrep_factory Mail::SpamAssassin::SQLBasedAddrList

init.pre

init.pre um das RelayCountry Plugin erweitern.

# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
# This file contains plugin activation commands for plugins included
# in SpamAssassin 3.0.x releases.  It will not be installed if you
# already have a file in place called "init.pre".
#
# There are now multiple files read to enable plugins in the 
# /etc/mail/spamassassin directory; previously only one, "init.pre" was 
# read.  Now both "init.pre", "v310.pre", and any other files ending in
# ".pre" will be read.  As future releases are made, new plugins will be
# added to new files, named according to the release they're added in.
###########################################################################

# URIDNSBL - look up URLs found in the message against several DNS
# blocklists.
#
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL

# Hashcash - perform hashcash verification.
#
loadplugin Mail::SpamAssassin::Plugin::Hashcash

# SPF - perform SPF verification.
#
loadplugin Mail::SpamAssassin::Plugin::SPF

# RelayCountry - add metadata for Bayes learning, marking the countries
# a message was relayed through
#
# Note: This requires the IP::Country::Fast Perl module
#
loadplugin Mail::SpamAssassin::Plugin::RelayCountry

Benutzereinstellungen (Userpref)

Um die SPAM-Erkennung auf Benutzer/Domain-Ebene einstellen zu können, wird eine Datenbank mit den entsprechenden Werten angelegt.

Datenbank anlegen

mysql -u root -p

CREATE DATABASE spamassassin;
CREATE USER 'spamassassin'@'127.0.0.1' IDENTIFIED BY '***';
GRANT USAGE ON * . * TO 'spamassassin'@'127.0.0.1' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
USE spamassassin;
CREATE TABLE userpref (
  username varchar(100) NOT NULL default '',
  preference varchar(30) NOT NULL default '',
  value varchar(100) NOT NULL default '',
  prefid int(11) NOT NULL auto_increment,
  PRIMARY KEY  (prefid),
  KEY username (username)
) ENGINE=InnoDB;
GRANT ALL PRIVILEGES ON `spamassassin` . * TO 'spamassassin'@'127.0.0.1';

Konfigurationsdatei erzeugen

cd /etc/mail/spamassassin
cat > 90-sql.cf << __EOF__
user_scores_dsn                  DBI:mysql:spamassassin:127.0.0.1:3306
user_scores_sql_password         <password>
user_scores_sql_username         spamassassin
user_scores_sql_custom_query     SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC
__EOF__

Beispieleinträge erzeugen

Die Tabelle userpref mit Mustereinträgen füllen

mysql -h localhost -u root -p

USE spamassassin;
INSERT INTO `userpref` VALUES ('$GLOBAL','required_hits','5.0'),('%afdb.de','required_hits','4.0'),('news@footballforum.de',' required_hits','2.5'),('karl@schlicker.org',' required_hits','2.5'),('%afdb.de','blacklist_from','ben@hamsamail.us');

Spamassassin TxRep Reputation and Bayesean (SQL)

Die Bayes-DB für die SPAM-Erkennung und das Lernen von SPAM/HAM-Mails wird in eine Datenbank verschoben/aufgebaut.

DB-Tabellen anlegen

# mysql -h localhost -u root -p

USE spamassassin;
CREATE TABLE txrep (
 username varchar(100) NOT NULL default '',
 email varchar(255) NOT NULL default '',
 ip varchar(40) NOT NULL default '',
 msgcount int(11) NOT NULL default '0',
 totscore float NOT NULL default '0',
 signedby varchar(255) NOT NULL default '',
 last_hit timestamp NOT NULL default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (username,email,signedby,ip),
 KEY last_hit (last_hit)
) ENGINE=InnoDB;

CREATE TABLE bayes_expire (
  id int(11) NOT NULL default '0',
  runtime int(11) NOT NULL default '0',
  KEY bayes_expire_idx1 (id)
) ENGINE=InnoDB;

CREATE TABLE bayes_global_vars (
  variable varchar(30) NOT NULL default '',
  value varchar(200) NOT NULL default '',
  PRIMARY KEY  (variable)
) ENGINE=InnoDB;

INSERT INTO bayes_global_vars VALUES ('VERSION','3');

CREATE TABLE bayes_seen (
  id int(11) NOT NULL default '0',
  msgid varchar(200) binary NOT NULL default '',
  flag char(1) NOT NULL default '',
  PRIMARY KEY  (id,msgid)
) ENGINE=InnoDB;

CREATE TABLE bayes_token (
  id int(11) NOT NULL default '0',
  token char(5) NOT NULL default '',
  spam_count int(11) NOT NULL default '0',
  ham_count int(11) NOT NULL default '0',
  atime int(11) NOT NULL default '0',
  PRIMARY KEY  (id, token),
  INDEX bayes_token_idx1 (token),
  INDEX bayes_token_idx2 (id, atime)
) ENGINE=InnoDB;

CREATE TABLE bayes_vars (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(200) NOT NULL default '',
  spam_count int(11) NOT NULL default '0',
  ham_count int(11) NOT NULL default '0',
  token_count int(11) NOT NULL default '0',
  last_expire int(11) NOT NULL default '0',
  last_atime_delta int(11) NOT NULL default '0',
  last_expire_reduce int(11) NOT NULL default '0',
  oldest_token_age int(11) NOT NULL default '2147483647',
  newest_token_age int(11) NOT NULL default '0',
  PRIMARY KEY  (id),
  UNIQUE bayes_vars_idx1 (username)
) ENGINE=InnoDB;

Konfiguration

TxRep in der Datei local.cf aktivieren

use_txrep 1
txrep_factory Mail::SpamAssassin::SQLBasedAddrList

anschließend v341.pre anpassen

# TxRep - Reputation database that replaces AWL 
loadplugin Mail::SpamAssassin::Plugin::TxRep

und anschlie0end das AWL-Plugin in /etc/mail/spamassassin/v310.pre auskommentieren

# loadplugin Mail::SpamAssassin::Plugin::AWL

Zum Schluß folgende Zeilen der Datei /etc/mail/spamassassin/90-sql.cf am Ende hinzufügen (Passwort entsprechend anpassen):

# txrep
txrep_factory                   Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn                    DBI:mysql:spamassassin:localhost
user_awl_sql_username           spamassassin
user_awl_sql_password           SApassword
user_awl_sql_table              txrep

# bayesean
bayes_store_module              Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn                   DBI:mysql:spamassassin:localhost
bayes_sql_username              spamassassin
bayes_sql_password              SApassword

Tests

Die Debug-Ausgaben anschauen

sudo -u spamd -H spamassassin -D --lint

Test1: Header

Prüfen, ob die Header hinzugefügt werden, required noch bei 5.0 (Standard)

root@h2859558 (FF)[/etc/mail/spamassassin] # echo -e "From: postmaster@afdb.de\nTo:info@schlicker.org\nSubject: test\n\n" | spamc
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
	h2859558.stratoserver.net
X-Spam-Level: ***
X-Spam-Status: No, score=3.5 required=5.0 tests=MISSING_DATE,MISSING_MID,
	NO_RECEIVED,NO_RELAYS,PYZOR_CHECK autolearn=no autolearn_force=no
	version=3.4.2
From: postmaster@afdb.de
To:info@schlicker.org
Subject: test

Test 2: Benutzereinstellung - Domain

Der required Wert sollte nun auf 4.0 sein

echo -e "From: postmaster@afdb.de\nTo:info@schlicker.org\nSubject: test\n\n" | spamc -u '%afdb.de' 
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
	h2859558.stratoserver.net
X-Spam-Level: ***
X-Spam-Status: No, score=3.5 required=4.0 tests=FSL_BULK_SIG,MISSING_DATE,
	MISSING_MID,NO_RECEIVED,NO_RELAYS,PYZOR_CHECK autolearn=no
	autolearn_force=no version=3.4.2
X-Spam-Relay-Country: 
From: postmaster@afdb.de
To:info@schlicker.org
Subject: test

Test 3: Benutzereinstellung - badmail

Der score muss nun >100 sein

root@h2859558 (FF)[/etc/logrotate.d] # echo -e "From: ben@hamsamail.us\nTo:postmaster@afdb.de\nSubject: test\n\n" | spamc -u 'postmaster@afdb.de' 
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
	h2859558.stratoserver.net
X-Spam-Flag: YES
X-Spam-Level: **************************************************
X-Spam-Status: Yes, score=104.3 required=4.0 tests=DKIM_ADSP_NXDOMAIN,
	FSL_BULK_SIG,MISSING_DATE,MISSING_MID,NO_RECEIVED,NO_RELAYS,
	PYZOR_CHECK,USER_IN_BLACKLIST autolearn=no autolearn_force=no
	version=3.4.2
X-Spam-Report: 
	*  100 USER_IN_BLACKLIST From: address is in the user's black-list
	*  0.8 DKIM_ADSP_NXDOMAIN No valid author signature and domain not in
	*      DNS
	* -0.0 NO_RELAYS Informational: message was not relayed via SMTP
	*  2.0 PYZOR_CHECK Gelistet im Pyzor-System
	*      (https://pyzor.readthedocs.io/en/latest/)
	*  1.4 MISSING_DATE Datumskopfzeile fehlt
	* -0.0 NO_RECEIVED Informational: message has no Received headers
	*  0.0 FSL_BULK_SIG Bulk signature with no Unsubscribe
	*  0.1 MISSING_MID Missing Message-Id: header
X-Spam-Relay-Country: 
From: ben@hamsamail.us
To:postmaster@afdb.de
Subject: [SPAM] test
X-Spam-Prev-Subject: test

Start/Stop SpamAssassin

Starten und für den Systemstart konfigurieren:

systemctl enable spamassassin
systemctl start spamassassin

SpamAssassin update

Mit der Installation des Spamassassin-Pakets kommt bei CentOS 8 automatisch ein Systemd-Daemon mit, der jeden Tag die Updates holt.

systemctl restart sa-update
systemctl status sa-update

Bayes-DB 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/2020-12.7z
wget http://untroubled.org/spam/2019.7z
7za x 2020-12.7z
7za x 2019.7z
sa-learn --dbpath /home/spamd/.spamassassin/ --progress --spam /usr/local/src/2019
sa-learn --dbpath /home/spamd/.spamassassin/ --progress --spam /usr/local/src/2020
sa-learn --sync

Update der Plugins etc

Nach jeder Änderung der Konfigurationsdateien sollte man folgende Befehle ausführen

sudo -u spamd -H spamassassin --lint
systemctl restart spamassassin

Virenscanner ClamAV

Installation

  dnf -y install clamav-unofficial-sigs clamd clamav-update

Konfiguration

mkdir /var/log/clamd /var/run/freshclam/
chown clamscan: /var/log/clamd /var/lib/clamav /var/run/freshclam/
chmod 2775 /var/log/clamd

In der Datei /etc/freshclam.conf die folgenden Zeilen anpassen:

UpdateLogFile /var/log/clamd/freshclam.log
PidFile /var/run/freshclam/freshclam.pid
DatabaseOwner clamscan

In der Datei /etc/clamd.d/scan.conf die folgenden Zeilen anpassen:

LogFile /var/log/clamd/clamd.log
LogTime yes
PidFile /run/clamd.scan/clamd.pid
LocalSocket /run/clamd.scan/clamd.sock
TCPSocket 3310
TCPAddr 127.0.0.1

In der Datei /etc/clamav-unofficial-sigs/os.conf die folgenden Zeilen anpassen:

clam_user="clamscan"
clam_group="clamscan"
clamd_socket="/var/run/clamd.scan/clamd.sock"


Systemd

systemctl enable clamav-freshclam
systemctl enable clamav-unofficial-sigs
systemctl enable clamd@scan
systemctl restart clamav-freshclam
systemctl restart clamav-unofficial-sigs
systemctl restart clamd@scan

Logrotate

cat > /etc/logrotate.d/clamav-update << __EOF__
/var/log/clamd/freshclam.log /var/log/clamd/clamd.log{
        monthly
        notifempty
        missingok
        postrotate
                systemctl try-restart clamd@scan.service
                systemctl try-restart clamav-freshclam.service
        endscript
}
__EOF__

Test

root@h2859558 (FF)[/usr] # cd /usr/local/src
root@h2859558 (FF)[/usr/local/src] # wget https://secure.eicar.org/eicar.com.txt
root@h2859558 (FF)[/usr/local/src] #  clamscan eicar.com.txt
/usr/local/src/eicar.com.txt: {HEX}EICAR.TEST.3.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 9003832
Engine version: 0.102.4
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.05 MB
Data read: 0.05 MB (ratio 1.00:1)
Time: 16.234 sec (0 m 16 s)

SimScan

RipMime

rpm -Uvh http://ftp.halifax.rwth-aachen.de/fedora-epel/8/Everything/SRPMS/Packages/r/ripmime-1.4.0.10-7.el8.src.rpm
dnf -y install ripmime


Installation

cd /var/src/tar
wget https://notes.sagredo.eu/files/qmail/tar/simscan-1.4.1.tar.gz
wget https://notes.sagredo.eu/files/qmail/patches/simscan/simscan-1.4.1_20200803.patch
tar xzf simscan-1.4.1.tar.gz
cd simscan-1.4.1
chown -R root:root .
patch < ../simscan-1.4.1_20200803.patch
cp configure.ac configure.in

./configure \
--enable-user=clamscan \
--enable-clamav=y \
--enable-spam=y \
--enable-spam-passthru=y \
--enable-spam-hits=9.5 \
--enable-per-domain=y \
--enable-ripmime \
--enable-attach=y \
--enable-custom-smtp-reject=y \
--enable-spamc-user=y \
--enable-received=y \
--enable-clamavdb-path=/var/lib/clamav

make
make install-strip

mkdir /var/qmail/simscan
chown clamscan:clamscan /var/qmail/simscan

Konfiguration

cat > /var/qmail/control/simcontrol << __EOF__
:clam=yes,spam=yes,spam_hits=9.5,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif
__EOF__

Nach jeder Änderung der Datei /var/qmail/control/simcontrol muss die Datei /var/qmail/control/simcontrol.cdb neu generiert werden.

/var/qmail/bin/simscanmk

Understanding the simcontrol file

You can setup rules for a specific user, a specific domain and a default rule as follows:

cat > /var/qmail/control/simcontrol << __EOF__
postmaster@example.com:clam=yes,spam=no,attach=.txt:.com
example.com:clam=no,spam=yes,attach=.mp3
:clam=yes,spam=yes,spam_hits=9.5,attach=.vbs:.lnk:.scr:.wsh:.hta:.pif
__EOF__
  • The first line sets clam on and spam off for postmaster@example.com and checks for viruses inside attached file .txt and .com names.
  • The second line sets clam off and spam on for the example.com domain and disallows .mp3 files for the attachment scanner.
  • The third line sets the default for the whole machine to enable clam, spam scanning, and sets the reject level for spam hits to 9.5.

Automatisches Update

Zuerst muss das Update-Skript erzeugt werden

cd /var/src/
wget --no-check-certificate https://qmail.jms1.net/simscan/update-simscan.c
gcc -s -o /usr/local/sbin/update-simscan update-simscan.c
chown root:clamscan /usr/local/sbin/update-simscan
chmod 4110 /usr/local/sbin/update-simscan

Anschließend wird die Datei /etc/freshclam.conf angepasst

OnUpdateExecute /usr/local/sbin/update-simscan

und der clamav-update-Daemon restartet

systemctl restart clamav-freshclam

Test

cd /usr/local/src
echo "This is a test message" > mailtest.txt
env QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=4 /var/qmail/bin/qmail-inject postmaster@afdb.de < mailtest.txt 

fail2ban

Falls noch nicht bei der Server-Installation installiert, sollte man spätestens jetzt fail2ban installieren.

Installation

dnf -y install fail2ban fail2ban-server fail2ban-sendmail

Konfiguration

Zuerst passt man die Datei /etc/fail2ban/jail.local an und fügt folgende Zeilen hinzu:

[qmail-smtp]
enabled  = true
filter   = qmail-smtp
action   = iptables[name=SMTP, port=25, protocol=tcp]
           sendmail-whois-lines[name=SMTP, logpath="%(logpath)s"]
logpath  = /var/log/qmail/smtpd/current
maxretry = 5
bantime  = 1d
findtime = 1h

[qmail-submission]
enabled  = true
filter   = qmail-smtp
action   = iptables[name=SUBMISSION, port=587, protocol=tcp]
           sendmail-whois-lines[name=SUBMISSION, logpath="%(logpath)s"]
logpath  = /var/log/qmail/submission/current
maxretry = 5
bantime  = 1d
findtime = 1h


[vpopmail]
enabled  = true
filter   = vpopmail
action   = iptables[name=VPOPMAIL, port=587, protocol=tcp]
           sendmail-whois-lines[name=VPOPMAIL, logpath="%(logpath)s"]
# check your syslog mail related log (mail.log in some systems)
logpath  = /var/log/maillog
maxretry = 5
bantime  = 86400
findtime = 3600


[dovecot-pop3]
enabled  = true
filter   = dovecot
action   = iptables-multiport[name=POP3, port="110,995", protocol=tcp]
           sendmail-whois-lines[name=POP3, logpath="%(logpath)s"]
logpath  = /var/log/dovecot/dovecot.log
maxretry = 6
bantime  = 1h
findtime = 1h


[dovecot-imap]
enabled = true
filter = dovecot
action = iptables-multiport[name=IMAP, port="143,993", protocol=tcp]
 sendmail-whois-lines[name=IMAP, logpath="%(logpath)s"]
logpath = /var/log/dovecot/dovecot.log
maxretry = 6
bantime = 1h
findtime = 1h

Systemd

systemctl restart fail2ban

Test

fail2ban-client status
fail2ban-regex /var/log/qmail/smtpd/current /etc/fail2ban/filter.d/qmail-smtp.conf


Manuelles setzen

fail2ban-client set apache-typo3 banip 154.196.72.202

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.

QMAIL Add-ons

Realtime Blackhole List (RBL) - qmail-dnsbl

Konfiguration

cat > /var/qmail/control/dnsbllist << __EOF__
-b.barracudacentral.org
-zen.spamhaus.org
__EOF__

Funktionstest

qmailctl restart
qmail-showctl |grep dnsbl
dnsbllist:
List at -b.barracudacentral.org configured for dnsbl check.
List at -zen.spamhaus.org configured for dnsbl check.

Greetdelay

Um ggf. Greetdelay-Zeiten anzupassen, muss man die Dateien /var/qmail/supervice/qmail-smtpd/run' und /var/qmail/supervice/qmail-submission/run anpassen.

export SMTPD_GREETDELAY=15
export DROP_PRE_GREET=1

Beispiel: Greetdelay von 15s und Drop der Daten, die vorher erneut gesendet wurden.

SPF

SPF behavior of your mail server is controlled by the file /var/qmail/control/spfbehavior. You can specify a value between 0 and 6:

   0 disabled (Default). Never do SPF lookups, don't create Received-SPF headers
   1 selects 'annotate-only' mode,  where  qmail-smtpd  will  annotate  incoming  email with Received-SPF fields, but will not reject any messages. 
   2 will produce temporary failures on DNS lookup problems so you can make sure you always have meaningful Received-SPF headers. 
   3 selects  'reject'  mode,  where  incoming  mail  will be rejected if the SPF record says 'fail'. 
   4 selects a more stricter rejection mode, which is like 'reject' mode, except that incoming mail will also be rejected when the SPF record says 'softfail'. 
   5 will also reject when the SPF record says 'neutral'
   6 if no SPF records are available at all (or a syntax error was encountered).

You can override the value in /var/qmail/control/spfbehavior by setting the SPFBEHAVIOR environment variable (typically in /etc/tcprules.d/tcp.smtp or, if you’ve used these notes as your guide, in ~/vpopmail/etc/tcp.smtp).

Values higher than 3 are strongly discouraged. You probably will want to go with 2 or 3.

Tipps & Tricks

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
systemctl stop dovecot

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

cd /home/vpopmail/domains
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
systemctl restart dovecot

!!! 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.

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


wichtige Links

http://rbl-check.org

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

https://de.ssl-tools.net/mailservers