QMAIL-Toaster: Unterschied zwischen den Versionen
(→DKIM) |
|||
| (2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1.163: | Zeile 1.163: | ||
</pre> | </pre> | ||
| − | Im DNS der Domain muss dann noch folgenden Eintrag hinterlegt werden. | + | Im DNS der Domain (hier afdb.sw) muss dann noch folgenden TXT Eintrag hinterlegt werden. |
<pre> | <pre> | ||
| Zeile 2.140: | Zeile 2.140: | ||
0 0 * * Sun root /var/qmail/bin/renew_cert.sh >> /var/log/letsencrypt/renew_qmail_cert.log 2>&1 | 0 0 * * Sun root /var/qmail/bin/renew_cert.sh >> /var/log/letsencrypt/renew_qmail_cert.log 2>&1 | ||
</pre> | </pre> | ||
| + | |||
| + | === Zertifikatablauf überwachen === | ||
| + | |||
| + | Den Ablauf der Zertifikate kann man über folgenden Webseite kostenlos überwachen lassen. | ||
| + | |||
| + | [https://redsift.com/pulse-platform/certificates RedSift] | ||
==SpamAssassin== | ==SpamAssassin== | ||
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
- 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.
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.
SpamAssassin
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
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
- Mit dem Editor der Wahl nun die frisch kopierte
config.phpöffnen und den Wert von$sieveportvon2000in4190ändern. - 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. - Vor dem Schließen der Datei muss noch sichergestellt sein, dass die Variable
$avelsieve_disabletlsauftruegesetzt 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
https://talosintelligence.com/reputation_center/lookup?search=85.214.138.131