QMAIL-Toaster
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 |
| 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
dnf -y install gcc gcc-c++ gdbm gdbm-devel openssl openssl-devel stunnel dnf -y install krb5-devel bzip2 bzip2-devel patch automake dnf -y install autoconf make unzip bind-utils openldap-devel mysql-devel libev-devel lz4-devel patch bzip2-devel dnf -y install spamassassin-iXhash2.noarch
Damit die Installationsskripte ungestört arbeiten können, sollte man in der Terminal-Sitzung die Aliase für einige Befehle zurück setzen:
unalias rm mv cp
Installation
DNS prüfen
DNS prüfen und sehen ob die IP-Adresse der Hauptmaildomain mit der des Servers übereinstimmt. Richtige DNS-Konfiguration ist für qmail sehr wichtig.
[root@web1 /]# host -t mx 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 postfix-3.3.1-12.el8.x86_64 # rpm -qa|grep exim # rpm -qa|grep sendmail
Den gefundenen Mailserver entsprechend deinstallieren, z.B.:
rpm -ev --nodeps postfix
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 /var/src/tar cd /var/src/tar
Daemontools aus Openfusion Repo für CentOS 7 herunterladen und installieren (geht auch unter CentOS 8)
rpm -Uvh http://repo.openfusion.net/centos7-x86_64/daemontools-0.76-9.of.el7.x86_64.rpm cd /var/qmail mkdir clear touch clear/down cat > clear/run << __EOF__ #!/bin/sh yes '' | head -4000 | tr '\n' . __EOF__
daemontools auch nach reboot automatisch starten
systemctl daemon-reload systemctl enable daemontools systemctl restart daemontools
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
ucspi-tcp
cd /var/src/tar wget https://www.fehcom.de/ipnet/ucspi-tcp6/ucspi-tcp6-1.05.tgz cd /var/qmail/ tar xzf /var/src/tar/ucspi-tcp6-1.05.tgz chown -R root.root host/ cd host/ucspi-tcp6-1.05/ ./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 /var/src/tar/netqmail-1.06 make setup check
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
User anlegen
Ggf. existiert bereits ein User mit der uid 89, wenn ja entfernen
userdel postfix
groupadd -g 89 vchkpw
useradd -u 89 -g vchkpw vpopmail
cd /var/src/tar
wget https://notes.sagredo.eu/files/qmail/tar/vpopmail-5.4.33.tar.gz
wget https://notes.sagredo.eu/files/qmail/patches/vpopmail-5.4.33_gcc-10-compat.patch
tar xzf vpopmail-5.4.33.tar.gz
cd vpopmail-5.4.33
chown -R root.root .
patch -p1 < ../vpopmail-5.4.33_gcc-10-compat.patch
./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 \
--enable-logging=p \
--disable-passwd \
--enable-qmail-ext \
--enable-roaming-users \
--enable-relay-clear-minutes=15 \
--enable-spamassassin \
--enable-learn-passwords
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 /var/src/tar 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
cd /var/src/tar/vpopmail-5.4.33/vusaged ./configure make cp -f vusaged /home/vpopmail/bin cp -f etc/vusaged.conf /home/vpopmail/etc
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)
Patching
libdomainkeys
This library is a prerequisite of the DKIM patch by Manvendra Bhangui, which is part of my package. You must compile this, otherwise the compilation will break.
cd /var/src/tar wget https://notes.sagredo.eu/files/qmail/tar/libdomainkeys-0.69.tar.gz tar xzf libdomainkeys-0.69.tar.gz wget https://notes.sagredo.eu/files/qmail/patches/libdomainkeys/libdomainkeys-openssl-1.1.patch wget https://notes.sagredo.eu/files/qmail/patches/libdomainkeys/libdomainkeys-0.69.diff ln -s libdomainkeys-0.69 libdomainkeys cd libdomainkeys chown -R root.root . patch -p1 < ../libdomainkeys-openssl-1.1.patch patch < ../libdomainkeys-0.69.diff make cp libdomainkeys.a /usr/lib
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 /var/src/tar 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
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
Patch installieren
cd /var/src/tar wget https://notes.sagredo.eu/files/qmail/patches/roberto-netqmail-1.06.patch-latest.gz cd netqmail-1.06 gunzip -c ../roberto-netqmail-1.06.patch-latest.gz | patch
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 1 > /var/qmail/control/spfbehavior # echo "| /home/vpopmail/bin/vdelivermail '' delete" > /var/qmail/control/defaultdelivery # echo 20 > /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 ==== Qmail Schnellkonfiguration ausführen ==== # cd /var/src/tar/netqmail-1.06 # ./config-fast mail.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
Setup the log dirs
mkdir -p /var/log/qmail cd /var/log/qmail chown -R qmaill.nofiles . chgrp root . chmod -R og-wrx . chmod g+rx .
Defining supervise scripts
cd /var/src/tar/ wget https://notes.sagredo.eu/files/qmail/supervise.tar.gz cd /var/qmail tar xzf /var/src/tar/supervise.tar.gz chown -R root.root rc supervise
cd /service ln -s /var/qmail/supervise/qmail-smtpd ln -s /var/qmail/supervise/qmail-send ln -s /var/qmail/supervise/vpopmaild ln -s /var/qmail/clear
Daily Logfiles (convert-multilog)
convert-multilog is a script which searches "/service/*/log/main" for any "@4*" files (the automatic cut-off files generated by multilog), converts their timestamps from tai64n to human-readable format, and writes them to /var/log/{service}.{date}. Once the lines from a given "@4*" file have been converted, the file is deleted.
mkdir -p /var/log/qmail/backup cd /usr/bin wget https://notes.sagredo.eu/files/qmail/convert-multilog chmod +x convert-multilog cd /service/qmail-send/log/ ln -s /var/log/qmail/send main cd /service/qmail-smtpd/log/ ln -s /var/log/qmail/smtpd main cd /service/qmail-submission/log/ ln -s /var/log/qmail/submission main cd /service/vpopmaild/log/ ln -s /var/log/qmail/vpopmaild main
und den Cronjob anlegen
cat > /etc/cron.d/qmail-logging << __EOF__ 59 2 * * * /usr/bin/convert-multilog 1> /dev/null 0 0 * * * /usr/bin/svc -a /service/qmail-submission/log 0 0 * * * /usr/bin/svc -a /service/qmail-smtpd/log 0 0 * * * /usr/bin/svc -a /service/qmail-send/log 0 0 * * * /usr/bin/svc -a /service/vpopmaild/log __EOF__
qmailctl script
cd /usr/bin wget https://notes.sagredo.eu/files/qmail/qmailctl chmod +x qmailctl
svtools
cd /var/src/tar rpm -Uvh https://www.rpmfind.net/linux/centos/8.3.2011/PowerTools/x86_64/os/Packages/help2man-1.47.6-1.el8.noarch.rpm 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
vim /home/vpopmail/etc/tcp.smtp
127.:allow,RELAYCLIENT="" :allow,CHKUSER_WRONGRCPTLIMIT="3"
chkuser will ban clients' IP after 3 consecutive failures.
vim /home/vpopmail/etc/tcp.submission
:allow,CHKUSER_WRONGRCPTLIMIT="3"
qmailctl cdb Ran clearopensmtp.
Testing qmail, SMTP and auth
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: ................................................................................................................................................................................................................................................................................................................................................................................................................
# 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 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.
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 /var/src/tar wget http://notes.sagredo.eu/files/qmail/tar/autorespond-2.0.5.tar.gz tar xzf autorespond-2.0.5.tar.gz cd autorespond-2.0.5 chown -R root.root . make make install
ezmlm-idx
cd /var/src/tar wget http://ezmlm.untroubled.org/archive/7.2.2/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 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
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
Bevor qmailadmin installiert wird, wird als Abhängigkeit cracklib benötigt
dnf -y install cracklib rpm -Uvh https://www.rpmfind.net/linux/centos/8.3.2011/PowerTools/x86_64/os/Packages/cracklib-devel-2.9.6-15.el8.x86_64.rpm
und weitere Wordliste hinzufügen
cd /usr/share/cracklib wget https://ftp.osuosl.org/pub/blfs/conglomeration/cracklib/cracklib-words-2.9.7.bz2 bunzip2 cracklib-words-2.9.7.bz2 cracklib-format cracklib-words-2.9.7 | cracklib-packer pw_dict
Qmailadmin Installation
cd /var/src/tar
wget https://notes.sagredo.eu/files/qmail/tar/qmailadmin-1.2.16.tar.gz
wget https://notes.sagredo.eu/files/qmail/patches/qmailadmin/roberto-qmailadmin/roberto-qmailadmin-1.2.16_20200902.patch
touch /var/log/qma-auth.log
chgrp apache /var/log/qma-auth.log
chmod g+w /var/log/qma-auth.log
tar xzf qmailadmin-1.2.16.tar.gz
cd qmailadmin-1.2.16
patch -p1 < ../roberto-qmailadmin-1.2.16_20200902.patch
chown -R root.root .
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=/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 \
--enable-cracklib=/usr/share/cracklib/pw_dict
Die QMAIL-Image Dateien im images Ordner speichern
cd 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 .. autoreconf -f -i make make install-strip
Dovecot
Als Alternative zu Courier-IMAP kann man auch dovecot installiseren.
Installation
Da bei den CentOS 8 mitgelieftern RPM-Paketen kein VPOPMAIL-Support mehr unterstützt wird, wird nun Dovecot manuell installiert.
Daher zuerst Clucene für Volltextsuche (--with-lucene) installieren
dnf -y install clucene-core clucene-contribs-lib rpm -Uvh https://www.rpmfind.net/linux/centos/8-stream/PowerTools/x86_64/os/Packages/clucene-core-devel-2.3.3.4-31.20130812.e8e3d20git.el8.x86_64.rpm
Anschließen Dovecot konfigurieren
cd /var/src/tar
wget https://www.dovecot.org/releases/2.3/dovecot-2.3.11.3.tar.gz
tar xzf dovecot-2.3.11.3.tar.gz
chown -R root.root dovecot-2.3.11.3
cd dovecot-2.3.11.3
./configure \
--prefix=/usr/local/dovecot \
--with-vpopmail \
--with-sql \
--with-mysql \
--with-docs \
--with-ssl \
--without-shadow \
--without-pam \
--without-ldap \
--without-pgsql \
--without-sqlite \
--with-lucene \
--with-systemdsystemunitdir=/lib/systemd/system
und kompilieren und installieren
make make install
Pigeonhole für Dovecot
cd /var/src/tar wget https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-0.5.11.tar.gz tar xvzpf dovecot-2.3-pigeonhole-0.5.11.tar.gz dovecot-2.3-pigeonhole-0.5.11 ./configure --prefix=/usr/local/dovecot-2-3-pigeonhole --with-dovecot=/usr/local/dovecot/lib/dovecot/ make make install
Konfiguration
Benutzer und Gruppen
Die Genutzer und Gruppen CentOS-Konform anlegen
groupadd --gid 97 dovecot groupadd --gid 986 dovenull useradd -g dovecot --uid 97 dovecot useradd -g dovenull --uid 985 dovenull
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
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,85.214.138.131
base_dir = /var/run/dovecot/
state_dir = /var/lib/dovecot
#--------------------------------------------------------
# 10.auth.conf
#--------------------------------------------------------
disable_plaintext_auth = yes
auth_mechanisms = plain login cram-md5
#--------------------------------------------------------
# 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
#--------------------------------------------------------
# 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
#--------------------------------------------------------
# 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
Dann Anpassungen in der local.conf von Dovecot machen
vim /etc/dovecot/local.conf .. sieve_extensions = +spamtest +spamtestplus +relational +comparator-i;ascii-numeric sieve_before = /etc/dovecot/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
Automatischen Löschen (expunge)
Skript für das automatische löschen anlegen
cat > /usr/local/dovecot/bin/dovecot_expunge.sh << __EOF__
#!/bin/bash
#
DOVEADM="/usr/local/dovecot/bin/doveadm";
\${DOVEADM} expunge -A mailbox Trash savedbefore 90d
\${DOVEADM} expunge -A mailbox Junk savedbefore 60d
__EOF__
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/etc/dovecot_expunge.sh __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
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
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 /usr/local/dovecot/etc mkdir sieve chown -R vpopmail.vchkpw sieve
Dann Anpassungen in der local.conf von Dovecot machen
vim /etc/dovecot/local.conf .. sieve_extensions = +spamtest +spamtestplus +relational +comparator-i;ascii-numeric sieve_before = /usr/local/dovecot/etc/sieve/ ..
Erste Regel-Datei anlegen, erkannte SPAMs in den JUNK Ordner verschieben.
cat > /usr/local/dovecot/etc/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 /usr/local/dovecot/etc/sieve /usr/local/dovecot-pigeonhole/bin/sievec .
SpamAssassin
Installation der nötigen RPM-Pakete
dnf -y install spamassassin spamassassin-iXhash2 perl-Razor-Agent pyzor perl-Geo-IP GeoIP-GeoLite-data-extra geoipupdate
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
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
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
Tests
Die Debug-Ausgaben anschauen
sudo -u spamd -H spamassassin -D --lint
Start/Stop SpamAssassin
Starten und für den Systemstart konfigurieren:
systemctl enable spamassassin systemctl start spamassassin
PLUGINS
RelayCountry
SpamAssassin bringt ein Plugin namens RelayCountry mit, mit welchem es möglich wird, die Länder der einzelnen SMTP Relays anhand der GeoIP Information zu bestimmen. Dies dient zum einen der Bayes-Datenbank. Sie bekommt also zusätzliche Informationen und wird künftig selbständig lernen, aus welchen Ländern viel Spam kommt.
yum install geoipupdate php73-php-pecl-geoip GeoIP-GeoLite-data GeoIP-GeoLite-data-extra
Danach sollten unter folgende Verzeichnis die GeoIP-DBs enthalten sein
cd /usr/share/GeoIP/ ls -l insgesamt 49004 lrwxrwxrwx 1 root root 16 5. Feb 09:00 GeoIPASNum.dat -> GeoLiteASNum.dat -rw-r--r-- 1 root root 5042249 17. Jan 13:24 GeoIPASNumv6.dat lrwxrwxrwx 1 root root 15 5. Feb 09:00 GeoIPCity.dat -> GeoLiteCity.dat lrwxrwxrwx 1 root root 17 5. Feb 09:00 GeoIPCityv6.dat -> GeoLiteCityv6.dat lrwxrwxrwx 1 root root 18 15. Mai 2015 GeoIP.dat -> GeoLiteCountry.dat -rw-r--r-- 1 root root 1931941 17. Jan 13:23 GeoIPv6.dat -rw-r--r-- 1 root root 4397606 16. Apr 12:05 GeoLiteASNum.dat lrwxrwxrwx 1 root root 16 5. Feb 09:00 GeoLiteASNumv6.dat -> GeoIPASNumv6.dat -rw-r--r-- 1 root root 19061442 16. Apr 12:05 GeoLiteCity.dat -rw-r--r-- 1 root root 18649442 17. Jan 13:26 GeoLiteCityv6.dat -rw-r--r-- 1 root root 1082230 16. Apr 12:05 GeoLiteCountry.dat
Anschließend fügt man folgende Zeile in die Datei /etc/mail/spamassassin/init.pre ein:
# # Relay Country loadplugin Mail::SpamAssassin::Plugin::RelayCountry
und legt unter */etc/mail/spamassassin/ eine Konfigurationsdatei namens RelayCountry.cf mit folgenden Inhalt an:
ifplugin Mail::SpamAssassin::Plugin::RelayCountry add_header all Relay-Country _RELAYCOUNTRY_ header RELAYCOUNTRY_BAD X-Relay-Countries =~ /(CN|RU|UA|RO|VN)/ describe RELAYCOUNTRY_BAD Relayed through spammy country at some point score RELAYCOUNTRY_BAD 2.0 header RELAYCOUNTRY_GOOD X-Relay-Countries =~ /^(DE|AT|CH)/ describe RELAYCOUNTRY_GOOD First untrusted GW is DE, AT or CH score RELAYCOUNTRY_GOOD -0.5 endif # Mail::SpamAssassin::Plugin::RelayCountry
Anschließend führt man folgende Befehle aus:
sa-update service spamassassin restart
eXtremSHOk
Ein weiteres gutes SpamAssassin Plugin ist eXtremeSHOK, welches die „From“ und „Reply-To“ Header vergleicht. Gibt es dort Unterschiede, bekommt die Mail direkt ein paar Punkte. Je nachdem, ob sich auch die Domain unterscheidet, sind es zwei bzw. direkt fünf Punkte.
cd /usr/local/src wget https://github.com/extremeshok/spamassassin-extremeshok_fromreplyto/archive/1.5.tar.gz tar -zxvf 1.5.tar.gz mkdir /etc/mail/spamassassin/plugins/ cp spamassassin-extremeshok_fromreplyto-1.5/plugins/* /etc/mail/spamassassin/plugins/ cp spamassassin-extremeshok_fromreplyto-1.5/01_extremeshok_fromreplyto.cf /etc/mail/spamassassin
https://www.syn-flut.de/spamassassin-erkennungsrate-deutlich-verbessern
Probleme
Häufig hilft es, bevor man lange nach der Fehlerursache im Qmail-Scanner zu suchen, einfach zuerst Spamassassin upzudaten.
sa-update /etc/init.d/spamassassin restart
Meisten tritt so ein Problem auf, wenn eine neue Version vom Spamassassin oder eine neue Version von CentOS vorliegt
trainieren
Das Programm verwendet eine integrierte Bayes-Datenbank, um Textphrasen zu klassifizieren und zu bewerten. Damit das Ganze funktioniert, muss diese Datenbank zunächst trainiert werden. Für das „Training“ sind eine Menge Mails notwendig. Um genug Spam Mails zu bekommen, habe ich das aktuellste Monatsarchiv von http://untroubled.org/spam/ verwendet.
cd /usr/local/src/ wget http://untroubled.org/spam/2020-01.7z wget http://untroubled.org/spam/2019.7z 7za x 2020-01.7z 7za x 2019.7z sa-learn --dbpath /home/qscand/.spamassassin/ --progress --spam /usr/local/src/2020/01 sa-learn --dbpath /home/qscand/.spamassassin/ --progress --spam /usr/local/src/2019 sa-learn --sync
ClamAV konfigurieren
Der Benutzer/die Gruppe qscand müssen bereits angelegt sein, siehe auch Qmail-Scanner Installation.
groupadd qscand useradd -c "Qmail-Scanner Account" -g qscand -d /home/qscand -s /bin/false qscand
Mit vi /etc/group editieren und den Benutzer clamav in die Benutzer-Gruppe qscand aufnehmen. Beispiel:
(...) qscand:x:510:clamav
Den clamd-Benutzer einstellen. Mit vi /etc/clamd.conf die Konfigurationsdatei öffen und folgende Änderung vornehmen:
# Run as a selected user (clamd must be started by root). # Default: disabled #User clamav User qscand
Berechtigungen setzen, clamd starten und für den Systemstart konfigurieren:
chown -R qscand /var/run/clamav chown -R qscand /var/log/clamav chown -R qscand /var/clamav/ /etc/init.d/clamd start chkconfig clamd on
Prüfen ob clamd wirklich als Benutzer qscand gestartet wurde, das vermeidet spätere Probleme:
ps waux|grep clamd qscand 1689 0.0 1.0 14248 10344 ? Ss 14:24 0:00 clamd root 1703 0.0 0.0 3784 768 pts/1 S+ 14:25 0:00 grep clamd
Freshclam
Mit freshclam werden die Virensignaturen aktualisiert.
Mit vi /etc/freshclam.conf die Konfigurationsdatei öffen und folgende Änderung vornehmen:
# Comment or remove the line below. Example #Example .... # Uncomment the following line and replace XY with your country # code. See http://www.iana.org/cctld/cctld-whois.htm for the full list. # Default: There is no default, which results in an error when running freshclam #DatabaseMirror db.XY.clamav.net DatabaseMirror db.DE.clamav.net # Send the RELOAD command to clamd. # Default: disabled #NotifyClamd NotifyClamd # By default when started freshclam drops privileges and switches to the # "clamav" user. This directive allows you to change the database owner. # Default: clamav (may depend on installation options) #DatabaseOwner clamav DatabaseOwner qscand
und dann einmal die Datenbank manuell aktualisieren.
# freshclam ClamAV update process started at Mon Mar 27 14:26:28 2006 main.cvd is up to date (version: 36, sigs: 44686, f-level: 7, builder: tkojm) daily.cvd is up to date (version: 1357, sigs: 2495, f-level: 7, builder: sven)
Clamav updaten
Nach einem Update von Clamav sollte man überprüfen, ob der Benutzer noch qscand auf der Datei /usr/sbin/clamd.qscand ist, ansonsten den Benutzer auf qscand setzten (s.o.). Gleiches gilt für die Verzeichnisse /var/run/clamav und /var/log/clamd.qscand.
chown qscand /usr/sbin/clamd* chown qscand /var/clam* chown qscand /var/run/clam* chown -R qscand /var/log/clamav/ chown -R qscand /var/lib/clamav/ /etc/init.d/clamd restart freshclam -v
WICHTIG:
Anscheinend hat sich ab Version 0.9 die Konfigurationsdatei geändert. Jetzt muss hinter jeden Parameter immer ein yes oder ein no folgen.
Beispiel:
vor Version 0.9
ScanMail
ab Version 0.9
ScanMail yes
Ansonsten startet der Clamav-Daemon nicht.
WICHTIG: Logrotate für ClamAV auf den qscand-User anpassen
Wenn Logrotate die Logfiles in /var/log/clamav rotiert, hat der User "qscand", unter dem ClamAV läuft, keine Berechtigung mehr. Clamd startet nicht korrekt und freshclam kann kein Update mehr einspielen.
Für die Anpassung folgende Änderungen vornehmen:
Mit vi /etc/logrotate.d/clamav die Konfigurationsdatei öffnen und die Zeile create entsprechend anpassen:
/var/log/clamav/clamd.log {
missingok
notifempty
create 664 qscand clamav
postrotate
killall -HUP clamd 2>/dev/null || :
endscript
}
Mit vi /etc/logrotate.d/freshclam die Konfigurationsdatei öffnen und die Zeile create entsprechend anpassen:
/var/log/clamav/freshclam.log {
missingok
notifempty
create 664 qscand clamav
}
WICHTIG: Berechtigungen anpassen, auch nach jedem ClamAV Update nötig!
chown -R qscand /var/clamav/ /var/log/clamav/ /var/run/clamav/ chmod -R g+w /var/clamav/ /var/log/clamav/ /var/run/clamav/
ClamAV Neustarten und mit freshclam testen ob ein Update klappt.
service clamd restart freshclam
In der Datei /var/spool/qscan/qmail-queue.log kann zudem beim Eingang einer Mail überprüft wurden, ob ClamAV korrekt die Anhänge überprüft. Dieses sollte dann so aussehen, wenn eine Mail mit Anhang eingeht:
Wed, 03 Sep 2008 09:53:36 CEST:22725: clamdscan: finished scan in 0.033611 secs
Simscan
Ripmime
cd /var/src/tar wget https://pldaniels.com/ripmime/ripmime-1.4.0.10.tar.gz cd .. tar xzf tar/ripmime-1.4.0.10.tar.gz cd ripmime-1.4.0.10 chown -R root.root . make make install
Qmail-Scanner (Salvatore Toribio Patch Version) installieren
User anlegen, falls noch nicht vorhanden:
groupadd qscand useradd -c "Qmail-Scanner Account" -g qscand -d /home/qscand -s /bin/false qscand
Abhängigkeit: maildrop installieren
Der Qmail-Scanner benötigt reformime aus dem maildrop Paket.
Hier immer nach der aktuellsten Version von maildrop schauen und diese benutzen. Entsprechend den wget-Befehl anpassen!
cd /var/src/ mkdir maildrop cd maildrop/ Immer nach aktuellster Version schauen (siehe oben) wget http://downloads.sourceforge.net/project/courier/maildrop/2.7.1/maildrop-2.7.1.tar.bz2 tar xjf maildrop-2.7.1.tar.bz2 cd maildrop-2.7.1/ ./configure make make install-strip make install-man
Qmail-Scanner konfigurieren und installieren
Hinweis: Auch beim Qmail-Scanner immer nach der aktuellsten Version schauen!
cd /var/src/ mkdir qmail-scanner cd qmail-scanner
wget http://toribio.apollinare.org/qmail-scanner/download/q-s-2.11st-20130319.tgz tar xvzpf q-s-2.11st-20130319.tgz cd qmail-scanner-2.11st
Nun muss der Qmail-Scanner konfiguriert werden. Folgende Optionen haben sich bewährt.
Die Optionen:
- --domain braunschweig-lions.de
- --admin-fromname "Braunschweig Lions Postmaster"
- --local-domains braunschweig-lions.de
müssen entsprechend der Installation angepasst werden.
./configure --qs-user qscand --qs-group qscand --spooldir /var/spool/qscan --qmaildir /var/qmail --bindir /var/qmail/bin --qmail-queue-binary /var/qmail/bin/qmail-queue --admin alert --domain mailx.link-innovation.com --admin-fromname "Link Innovation Postmaster" --notify sender,nmlvadm,precips --local-domains mailx.link-innovation.com --silent-viruses auto --virus-to-delete 1 --skip-text-msgs 1 --lang de_DE --debug 0 --minidebug 1 --add-dscr-hdrs 0 --dscr-hdrs-text "X-Qmail-Scanner" --archive 0 --settings-per-domain 1 --unzip 0 --max-zip-size 1000000000 --max-unpacked-files 10000 --redundant 1 --log-details syslog --log-crypto 0 --fix-mime 2 --ignore-eol-check 1 --sa-subject "SPAM ***" --sa-delta 0.5 --sa-alt 1 --sa-debug 1 --sa-report 0 --sa-quarantine 0 --sa-delete 0 --sa-reject 0 --scanners "auto" --install 1
HINWEIS: Wegen der hier vorhandenen Zeilenumbrüche ist ein direktes Copy & Paste nicht möglich, sondern es muss Zeile für Zeile in das Terminal eingefügt werden.
oder man benutzt folgendes Skript:
#!/bin/sh
./configure --qs-user qscand \
--qs-group qscand \
--spooldir /var/spool/qscan \
--qmaildir /var/qmail \
--bindir /var/qmail/bin \
--qmail-queue-binary /var/qmail/bin/qmail-queue \
--admin alert \
--domain braunschweig-lions.de \
--admin-fromname "Braunschweig Lions Postmaster" \
--notify sender,nmlvadm,precips \
--local-domains mailx.braunschweig-lions.de \
--silent-viruses auto \
--virus-to-delete 1 \
--skip-text-msgs 1 \
--lang de_DE \
--debug 0 \
--minidebug 1 \
--add-dscr-hdrs 0 \
--dscr-hdrs-text "X-Qmail-Scanner" \
--archive 0 \
--settings-per-domain 1 \
--unzip 0 \
--max-zip-size 1000000000 \
--max-unpacked-files 10000 \
--redundant 1 \
--log-details syslog \
--log-crypto 0 \
--fix-mime 2 \
--ignore-eol-check 1 \
--sa-subject "SPAM ***" \
--sa-delta 0.5 \
--sa-alt 1 \
--sa-debug 1 \
--sa-report 0 \
--sa-quarantine 0 \
--sa-delete 0 \
--sa-reject 0 \
--scanners "auto" \
--install 1
Nun geht es mit der interaktiven Konfiguration des configure-Scripts weiter.
- 1. Schritt: Mit [RETURN] bestätigen
- 2. Schritt: Mit [y] und [RETURN] bestätigen
- 3. Schritt: Mit [y] und [RETURN] bestätigen
- 4. Schritt: Das anlegen der Dateien mit [RETURN] bestätigen
- 5. Schritt: Das Routieren der Logfiles einstellen
# cp contrib/logrotate.qmail-scanner /etc/logrotate.d/qmailscanner
Links:
Einbinden des Qmail-Scanner in die Mail-Queue von qmail
Mit vi /var/qmail/supervise/qmail-smtpd/run das smtp-Runscript bearbeiten und nach #!/bin/sh die folgenden Zeilen einfügen:
QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" export QMAILQUEUE
Nun muss noch das softlimit deutlich erhöht werden. Dazu mit vi /var/qmail/supervise/qmail-smtpd/run das Supervise-Run-Script bearbeiten und den Wert von softlimit -m {Wert} erhöhen. Z.B. auf softlimit -m 80000000
Jetzt qmail neu starten:
# qmailctl restart
Testen
Nun das Senden und Empfangen von Mail ausgiebig testen und dabei aus Ausgabe in /var/spool/qmailscan/qmail-queue.log und /var/log/qmail/smtpd/current beobachten:
# tail -f /var/spool/qscan/qmail-queue.log /var/log/qmail/smtpd/current
Ein- und ausgehende Mails tragen nun im Header eine entsprechende Information, z.B.:
Received: from 85.214.36.143 by web1.braunschweig-lions.de (envelope-from <dirk@example.com>, uid 89) with qmail-scanner-1.25st (clamdscan: 0.88/1357. spamassassin: 3.0.4. perlscan: 1.25st. Clear:RC:0(85.214.36.143):SA:0(0.0/5.0):. Processed in 4.775654 secs); 27 Mar 2006 13:10:27 -0000 X-Spam-Status: No, hits=0.0 required=5.0
Es werden ein- und ausgehende Mails überprüft. Unser System sollte also auch das Versenden eines Virus verhindern. Das kann man leicht testen, indem man von einem Mail-Account des Systems den EICAR-TestVirus eicar.com als Anhang einer Mail angibt.
Der Qmail-Toaster sollte den Versuch sofort mit einer entsprechenden Fehler-Mail quittieren, die erklärt das der Versand abgelehnt wurde. In /var/spool/qmailscan/qmail-queue.log findet man einen Eintrag dazu:
Mon, 27 Mar 2006 15:15:26 CEST:1548: +++ starting debugging for process 1548 (ppid=1546) by uid=89 Mon, 27 Mar 2006 15:15:26 CEST:1548: w_c: elapsed time from start 0.007668 secs Mon, 27 Mar 2006 15:15:26 CEST:1548: return-path='dirk@test.braunschweig-lions.de', recips='Dirk@example.com' Mon, 27 Mar 2006 15:15:26 CEST:1548: from='Dirk =?ISO-8859-1?Q?Schl=FCter?= "(TEST)" <dirk@test.braunschweig-lions.de>', subj='TEst Virus', via SMTP from 84.133.206.49 Mon, 27 Mar 2006 15:15:26 CEST:1548: clamdscan: there be a virus! (Eicar-Test-Signature) Mon, 27 Mar 2006 15:15:26 CEST:1548: clamdscan: finished scan in 0.017235 secs Mon, 27 Mar 2006 15:15:26 CEST:1548: ini_sc: finished scan of "/var/spool/qmailscan/tmp/web1.braunschweig-lions.de11434653267221548"... Mon, 27 Mar 2006 15:15:26 CEST:1548: ------ Process 1548 finished. Total of 0.13309 secs
Der SpamAssassin kann auch leicht getestet werden. Einfach in einer Mail von EXTERN an einen Qmail-Toaster Account das Schlüsselwort VIAGRA verwerden. Im Logfile sollte es dafür Punkte geben, z.B.:
Mon, 27 Mar 2006 15:19:55 CEST:1617: from='Dirk =?ISO-8859-1?Q?Schl=FCter?= <dirk@example.com>', subj='Test', via SMTP from 85.214.36.143 Mon, 27 Mar 2006 15:19:55 CEST:1617: This is a PLAIN text message, skip virus scanners - but not SA Mon, 27 Mar 2006 15:19:56 CEST:1617: SA: REPORT hits = 0.8/5.0 1.5 DRUG_ED_CAPS BODY: Erwähnt Medikament gegen Erektionsstörung 0.0 DRUGS_ERECTILE Erwähnt ein Medikament gegen Erektionsstörungen -0.8 AWL AWL: From: address is in the auto white-list Mon, 27 Mar 2006 15:19:56 CEST:1617: SA: finished scan in 0.338719 secs - hits=0.8/5.0 Mon, 27 Mar 2006 15:19:56 CEST:1617: p_s: finished scan in 0.042892 secs Mon, 27 Mar 2006 15:19:56 CEST:1617: ini_sc: finished scan of "/var/spool/qmailscan/tmp/web1.braunschweig-lions.de11434655957221617"... Mon, 27 Mar 2006 15:19:56 CEST:1617: ------ Process 1617 finished. Total of 0.474062 secs
Diese Punkte findet man im Mail-Header der empfangenen Mail wieder:
X-Spam-Status: No, hits=0.8 required=5.0
Bei über 5.0 Punkten (siehe Qmail-Scanner Konfiguration) wird der X-Spam-Status auf Yes gesetzt und der Betreff einer Mail mit SPAM *** gekennzeichnet. Anhand eines dieser Merkmale, vorzugsweise des Mail-Headers X-Spam-Status, kann der Benutzer erkannten Spam mit seinem Mailprogramm filtern.
SpamAssassin Bayes-Datenbank
SpamAssassin lernt selbst und kann über eine Bayes-Datenbank trainiert werden. Die genaue Funktion kann im SpamAssassin Manual nachgelesen werden http://spamassassin.apache.org/.
Mit dem Bayes-Filter kann die Wirksamkeit der Spam-Erkennung erhöht werden, wenn sie entsprechend trainiert wird.
Hier wird nur kurz erklärt wie man den Toaster konfiguriert, damit die Lernfunktion aktiviert ist und wie man von einer anderen Installation eine gut trainierte Bayes-Datenbank einspielt.
Auf anderem Qmail-Toaster wo Spam gelernt wird das Paket erstellen:
# cd /home/ # tar cfpvz home-qscand-20060327.tar.gz qscand/
Das Paket auf den neuen Qmail-Toaster übertragen und nach /home/ kopieren. Dann entpacken und Berechtigungen richtig setzen:
# cd /home/ # tar xzf home-qscand-20060327.tar.gz # chown -R qscand.qscand qscand/
Die SpamAssassion-Konfiguration und Bayes-Datenbank des Users qscand ist in /home/qscand/.spamassassin/ zu finden. SpamAssassin neu starten:
# /etc/init.d/spamassassin restart
In /var/spool/qscan/qmail-queue.log sollte nun der Bayes-Scan beim Empfang einer Mail aufgeführt sein:
(...)
Mon, 27 Mar 2006 15:38:33 CEST:1957: This is a PLAIN text message, skip virus scanners - but not SA
Mon, 27 Mar 2006 15:38:33 CEST:1957: SA: REPORT hits = -2.6/5.0
-2.6 BAYES_00 BODY: Spamwahrscheinlichkeit nach Bayes-Test: 0-1%
[score: 0.0000]
0.0 AWL AWL: From: address is in the auto white-list
Mon, 27 Mar 2006 15:38:33 CEST:1957: SA: finished scan in 0.537541 secs - hits=-2.6/5.0
Mon, 27 Mar 2006 15:38:33 CEST:1957: p_s: finished scan in 0.043386 secs
(...)
TODO: Beschreibung wie man Spam lernt...
Qmailadmin
Apache Direktiven für einen virtuellen Host:
ScriptAlias /qmailadmin "/var/www/cgi-bin/qmailadmin" ScriptAlias /cgi-bin/qmailadmin "/var/www/cgi-bin/qmailadmin" Alias /images/qmailadmin/ /var/www/html/images/qmailadmin/
Alternativ die letzte Stable-Version 1.2.16 verwenden, wenn beim kompilieren von 1.2.16 Fehler auftreten.
cd /var/src/tar wget https://notes.sagredo.eu/files/qmail/tar/qmailadmin-1.2.16.tar.gz wget https://notes.sagredo.eu/files/qmail/patches/qmailadmin/qmailadmin-1.2.16-pwd-strenght.2019.09.13.patch wget https://notes.sagredo.eu/files/qmail/patches/qmailadmin/qmailadmin-1.2.16-log.patch wget https://notes.sagredo.eu/files/qmail/patches/qmailadmin/mailinglist.c.ezmlm7.patch wget https://notes.sagredo.eu/files/qmail/patches/qmailadmin/qmailadmin-catchall.patch wget http://downloads.sourceforge.net/project/qmailadmin/qmailadmin-devel/qmailadmin-1.2.16.tar.gz wget http://sourceforge.net/projects/qmailadmin/files/qmailadmin-help/1.0.8/qmailadmin-help-1.0.8.tar.gz touch /var/log/qma-auth.log chgrp apache /var/log/qma-auth.log chmod g+w /var/log/qma-auth.log cd .. tar xzf qmailadmin-1.2.16.tar.gz cd qmailadmin-1.2.16 patch -p1 < ../qmailadmin-1.2.16-pwd-strenght.2019.09.13.patch patch < ../qmailadmin-1.2.16-log.patch patch < ../mailinglist.c.ezmlm7.patch patch < ../qmailadmin-catchall.patch ./configure --enable-help \ --enable-htmldir=/var/www/html \ --enable-cgibindir=/var/www/cgi-bin \ --enable-cgipath=/cgi-bin/qmailadmin \ --enable-modify-quota \ --enable-no-cache \ --enable-imagedir=/var/www/html/qmail/qmailadmin/images \ --enable-imageurl=/images/ \ --enable-htmllibdir=/var/www/html/qmail/qmailadmin \ --enable-qmaildir=/var/qmail \ --enable-domain-autofill \ --enable-vpopuser=vpopmail \ --enable-vpopgroup=vchkpw \ --enable-autoresponder-path=/usr/bin \ --enable-ezmlmdir=/usr/local/bin/ezmlm \ --enable-modify-quota make make install-strip
Link:
VQAdmin
Mit VQAdmin kann man für vpopmail mehrere Domains veralten, immer beim Link nach neuster Version schauen
cd /var/src/tar wget http://www.inter7.com/vqadmin/vqadmin-2.3.7.tar.gz cd .. tar xvzpf tar/vqadmin-2.3.7.tar.gz cd vqadmin-2.3.7 ./configure make make install-strip
Achtung:
Auf x86_64-Systemen lässt sich vqadmin nicht so einfach übersetzen, weil der Code zu alt ist. Daher einfach aus dem vpopmail-Verzeichnis die Dateien config.guess und config.sub in das vqadmin-Verzeichnis kopieren, und danach geht alles.
Dann in der Apache-Konfiguration des Web, worüber man die Administration aufrufen will, folgende eintragen:
<Directory "/var/www/cgi-bin/vqadmin">
deny from all
Options ExecCGI
AllowOverride AuthConfig
Order deny,allow
</Directory>
und anschließend passt man die .htaccess im Verzeichnis /var/www/cgi-bin/vqadmin/ nach seinen Wünschen an.
vi /var/www/cgi-bin/vqadmin/.htaccess AuthType Basic AuthUserFile /home/www/mail.marketteam.de/acl/vqadmin.passwd AuthName vQadmin require valid-user satisfy any
Hier sollte man AuthUserFile auf eine gültige Passwort-Datei zeigen lassen, die man mit htpasswd angelegt hat.
htpasswd -cb /home/www/mail.marketteam.de/acl/vqadmin.passwd ktsadmin password
Anschließend muß man noch die Rechte für diesen User in der Datei /var/www/cgi-bin/vqadmin/vqadmin.acl setzen. Hier die Zeilen beginnend mit techuser,senior, bzw admin und am Ende folgende Zeile hinzufügen.
vi /var/www/cgi-bin/vqadmin/vqadmin.acl admin * ktsadmin,weiterUser,nochEiner
Anschließend kann man z.B. über http://mailx.braunschweig-lions.de/cgi-bin/vqadmin/vqadmin.cgi die Administration aufrufen.
Hinweis:
Sollte nach erfolgreicher Anmeldung eine Meldung wie invalid language file etc erscheinen, dann hat die automatische Spracherkennung vom Browser her nicht geklappt. Meistens macht es dann Sinn, bei seinen Browser die Sprache unter den Einstellungen auf Deutsch (de) bzw Englisch (en) zu ändern.
Alternativ kann man auch in das Verzeichnis /var/www/cgi-bin/vqadmin/html weiter Sprachdateien erzeigen.
cd /var/www/cgi-bin/vqadmin/html cp de de-de cp de de_DE chown vpopmail.vchkpw *
SquirrelMail
cd /var/src/tar
# Achtung: Immer nach neuster Version schauen! Siehe Projektlink.
wget http://mesh.dl.sourceforge.net/sourceforge/squirrelmail/squirrelmail-1.4.15.tar.gz
cd ..
tar xzf tar/squirrelmail-1.4.15.tar.gz
cd tar/squirrelmail-1.4.15
./configure
# Nun Einstellungen wie gewünscht vornehmen, die folgenden auf jeden Fall
* 2. Server Settings
Ggf. IMAP/SMTP localhost gegen die IP/Hostnamen tauschen, wenn Courier nur auf einer IP und nicht auf allen eingerichtet ist
* 4. General Options
Data Directory (1) auf "/var/www/data/"
Attach Directory (2) auf "/var/www/attach/"
Allow server thread sort (10) auf "y"
Allow server-side sorting (11) auf "y"
Save data (s)
* Quit und Save
mv data/ /var/www/
mkdir /var/www/attach
chown -R apache.apache /var/www/data/ /var/www/attach/
mv squirrelmail-1.4.15/ /var/www/html/webmail
Nun in einem gewünschten Virtuellen Host oder der ssl.conf den Zugriff einrichten, z.B. mit
Alias /webmail/ /var/www/html/webmail/ Alias /webmail /var/www/html/webmail/
Natürlich kann jederzeit unter /var/www/html/webmail/ das ./configure Skript aufgerufen werden und somit die Konfiguration verändert werden.
Sprachen einrichten
cd /var/src/tar/ wget http://surfnet.dl.sourceforge.net/sourceforge/squirrelmail/all_locales-1.4.13-20071220.tar.gz mkdir squirrelmail-locale cd squirrelmail-locale tar xzf ../tar/all_locales-1.4.13-20071220.tar.gz ./install # Dort den Pfad "/var/www/html/webmail/" angeben
Tipp: Wenn man nicht soviel mit "y" das Kopieren bestätigen möchte, kurz das install-Skript editieren und das -i beim cp entfernen.
Nun kann man noch mit dem configure Skript in /var/www/html/webmail/ die Default-Sprache auf Deutsch (de_DE) und das Charset z.B. auf iso-8859-15 einstellen.
SIEVE-Filter Plugin
Um den optional eingerichteten SIEVE-Filter auch für die benutzer Steuerbar zu machen, empfiehlt sich die Installation des Avelsieve Plugins für Squirrelmail wie folgt. Die offizielle Seite zu dem Plugin ist unter http://squirrelmail.org/plugin_view.php?id=73 zu finden.
cd /usr/share/squirrelmail/plugins/ wget "http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Favelsieve-1.9.9.tar.gz" tar xfz avelsieve-1.9.9.tar.gz cd ./avelsieve/config/ cp config_sample.php config.php
Änderungen in der Konfiguration
- 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.
Greylisting Patch
Whitepaper / Beschreibung über Greylisting:
Infos:
Greylisting-Patch für Bill Shupp's netqmail qmail-toaster-0.8 Patch:
Voraussetzungen:
Ein MySQL-Server muss installiert sein, zum kompilieren der gepatchten Quellen von netqmail muss das mysql-devel Paket installiert sein:
Z.B. Fedora Core 4
yum install mysql-devel
cd /var/src mkdir greylisting-patch cd greylisting-patch wget http://shupp.org/patches/greylisting-20060105.patch cd .. cp -ra netqmail-1.06/netqmail-1.06-mit-greylisting/ cd netqmail-1.06-mit-greylisting/netqmail-1.06 cat ../../greylisting-patch/greylisting-20060105.patch | patch -p0
Datenbank und Benutzer anlegen:
mysql -p
mysql> CREATE DATABASE relaydelay;
mysql> use mysql;
mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','milter',PASSWORD('milter'));
mysql> grant select,insert,update,delete on relaydelay.* to milter@"localhost" identified by 'milter';
mysql> quit
mysql -p mysql < dbdef.sql
Hinweis: Auf einem Fedora Core 4 x86_64 und i686 Server war vor dem Kompilieren folgende Änderung am Makefile nötig.
Mit vi Makefile das Makefile öffnen und den Pfad zu libmysqlclient.a ändern. Zusätzlich werden noch die Optionen -lssl -lcrypto hinzugefügt.
ALT
qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib/libmysqlclient.a
./load qmail-envelope-scanner -lz -lm local_scan.o /usr/lib/libmysqlclient.a
NEU (ab CentOS 6)
qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib64/mysql/libmysqlclient.so
./load qmail-envelope-scanner -lz -lm -lssl -lcrypto local_scan.o /usr/lib64/mysql/libmysqlclient.so
NEU
qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib64/mysql/libmysqlclient.a
./load qmail-envelope-scanner -lz -lm -lssl -lcrypto local_scan.o /usr/lib64/mysql/libmysqlclient.a
NEU (i686)
qmail-envelope-scanner: \
load qmail-envelope-scanner.o local_scan.o /usr/lib/mysql/libmysqlclient.a
./load qmail-envelope-scanner -lz -lm -lssl -lcrypto local_scan.o /usr/lib/mysql/libmysqlclient.a
make clean make qmailctl stop make setup check chown -R vpopmail:vchkpw /var/qmail/spam qmailctl start
MySQL Datenbank regelmässig aufräumen
local_scan.c, also das eigentliche Greylisting-Programm, räumt abgelaufene Datenbank-Einträge nicht selbstständig auf. Dieses sollte ein kleines Script übernehmen, welches stündlich ausgeführt wird.
cd /var/src/greylisting-patch/ wget http://shupp.org/software/greylisting-delete-expired.sh cp greylisting-delete-expired.sh /etc/cron.hourly/ chmod 700 /etc/cron.hourly/greylisting-delete-expired.sh
Parameter
Einstellungen können vor dem Kompilieren in der Datei local_scan.c vorgenommen werden. Z.B. hier die Default-Einstellungen:
/************************/ #define DEFAULT_MYSQLHOST "localhost" #define DEFAULT_MYSQLUSER "milter" #define DEFAULT_MYSQLPASS "milter" #define DEFAULT_MYSQLDB "relaydelay" #define DEFAULT_BLOCK_EXPIRE 55 /* minutes until email is accepted */ #define DEFAULT_RECORD_EXPIRE 500 /* minutes until record expires */ #define DEFAULT_RECORD_EXPIRE_GOOD 36 /* days until record expires after accepting email */ #define DEFAULT_LOCAL_SCAN_DEBUG 0 /* set to 1 to enable debugging */ /*************************/
Fuzzy OCR
Hierbei handelt es sich um ein Plugin für Spamassassin, womit der Text in Grafiken gescannt werden kann und anhand einer Wortliste dann entschieden wird, ob die Grafik SPAM enthält
Zuerst installiert man die benötigten Pakete
yum install netpbm-progs ocrad gifsicle perl-String-Approx perl-MLDBM-Sync giflib-utils gocr ImageMagick
Anschließend lädt man das Paket herunter, entpackt dieses und kopiert die Dateien in den Spamassassin-Ordner
cd /var/src/tar/ wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz cd .. tar xvzpf tar/fuzzyocr-3.5.1-devel.tar.gz cp -a FuzzyOcr-3.5.1/FuzzyOcr* /etc/mail/spamassassin/
Zwischendurch checkt man die Version von Spamassassin
# spamassassin -V SpamAssassin version 3.2.5 running on Perl version 5.8.8
Sollte die Version kleiner 3.2.0 sein, sollte man die Datei v320.pre im Ordner /etc/mail/spamassassin bearbeiten (siehe Installationsanleitung)
Nun passt man folgende Zeilen in der Datei FuzzyOcr.cf an
# vi /etc/mail/spamassassin/FuzzyOcr.cf focr_logfile /var/log/FuzzyOcr.log focr_enable_image_hashing 2 #focr_bin_helper tesseract
den Rest lässt man auf den default-Werten. Tesseract nur einschalten, wenn man es installiert hat.
Nun testet man, ob alle Abhängigkeiten erfüllt sind.
# spamassassin --lint
Hier sollte nun keine Ausgabe erfolgen.
Anschließend legt man die Log-Datei mit den korrekten Rechten an, falls diese noch nicht existiert.
touch /var/log/FuzzyOcr.log chown qscand.qscand /var/log/FuzzyOcr.log
Danach testet man, ob eine Grafik als Spam erkannt wird, mit :
spamassassin --debug FuzzyOcr < /var/src/FuzzyOcr-3.5.1/samples/ocr-animated.eml > /dev/null
und irgendwo unten in der Ausgabe erscheint dann:
... [26434] info: FuzzyOcr: Scanset "ocrad" generates enough hits (4), skipping further scansets... [26434] info: FuzzyOcr: Message is spam, score = 9.000 [26434] info: FuzzyOcr: Adding Hash to "/etc/mail/spamassassin/FuzzyOcr.db" with score "9.000" [26434] dbg: FuzzyOcr: Digest: 484116:361:447:7::255:255:255:255:147877::0:0:0:0:7719::153:0:0:46:1764::204:0:0:61:1190::0:0:255:29:1110::255:0:0:76:858 [26434] info: FuzzyOcr: Words found: [26434] info: FuzzyOcr: "price" in 1 lines [26434] info: FuzzyOcr: "company" in 1 lines [26434] info: FuzzyOcr: "alert" in 1 lines [26434] info: FuzzyOcr: "news" in 1 lines [26434] info: FuzzyOcr: (6 word occurrences found) [26434] dbg: FuzzyOcr: Remove DIR: /tmp/.spamassassin26434a9bpvQtmp [26434] dbg: FuzzyOcr: FuzzyOcr ending successfully... [26434] dbg: FuzzyOcr: Processed in 0.524110 sec.
Wichtig ist die 2. Zeile und das keine Fehler aufgetreten sind. Die Fehlermeldungen in /var/log/FuzzyOcr.log bzgl. des Fehlens von gocr und tesseract kann man ignorieren, weil zum Scannen der Texte orcad benutzt wird.
Da nun alles korrekt läuft, müssen wir nur Spamassassin mitteilen, das er das Plugin lädt.
/etc/init.d/spamassassin restart
Links:
Logdatei Rotation
vi /etc/logrotate.d/fuzzyocr
/var/log/FuzzyOcr.log {
rotate 12
weekly
compress
delaycompress
create 664 qscand qscand
}
}
Server-seitige Mailfilterung mit SIEVE
Um eMails auf dem Server bereits in richtige Ordner einsortieren lassen zu können oder einen Autoresponder zu setzen, bietet sich die Verwendung des bereits beschriebene Installation und Konfiguration der SIEVE-Erweiterung Pigeonhole von Dovecot an. Um dies zu aktivieren und durch den Benutzer konfigurierbar zu machen, fehlen nur noch wenige Handgriffe.
Konfiguration des SIEVE Plugins
Die Datei /etc/dovecot/conf.d/90-sieve.conf mit einem beliebigen Editor öffnen und folgende Änderungen vornehmen:
- Zeile 11:
sieve = /home/vpopmail/domains/%d/%n/user.sieve Zeile 53:==> Kann man aktivieren, kann aber u.U. zu Problemen führen. Nur aktivieren wenn unbedingt notwendig!sieve_extensions = +notify +imapflags(optional)
Der Pfad in Zeile 11 entspricht der Standard-Konfiguration und speichert die Benutzer-Konfiguration in dem jeweiligen Ordner des Benutzers, zum Beispiel: /home/vpopmail/domains/link-innovation.de/wickham/user.sieve. Die möglichen Platzhalter können unter http://wiki2.dovecot.org/Variables eingesehen werden.
Anschließend speichern und die neue Konfiguration mittels service dovecot reload neu laden.
Aktivierung des SIEVE Filters pro Domain
Um die Server-seitige Filterung zu aktivieren, muss für jede Domain - die dieses Feature erhalten soll -, der Delivery Agent wie folgt auf Dovecot umgeleitet werden:
cd /home/vpopmail/domains/<DOMAIN>/ vim .qmail-default
Die dort enthaltene Zeile kann entfernt oder in die 2. Zeile verschoben werden. Anschließend die folgende Zeile in der ersten Zeile(!) einfügen und speichern:
|/var/qmail/bin/preline -f /usr/local/dovecot/libexec/dovecot/deliver -d $EXT@$USER
Tuning und Einstellungen
Über verschiedene Dateien in /var/qmail/control/ kann man verschiedene Dinge einstellen. Die Liste ist u.U. nicht komplett, sondern wird bei Bedarf entsprechend erweitert. Nach dem Ändern einer Einstellung sollte qmail sicherheitshalber mit qmailctl restart neu gestartet werden.
Einige Listen findet man hier:
Durch enthaltene Patches kann es weitere Optionen geben.
queuelifetime
Bestimmt wie lange Nachrichten in der Queue verbleiben bis ein Fehler ausgelöst wird, wenn sie nicht zugestellt werden können. In der Default-Einstellung sind das 7 Tage. Die Zeit wird in Sekunden angegeben und kann getrost verringert werden, dann erkennt man auch schnelle etwaige Fehler in der Konfiguration.
Mit # vi /var/qmail/control/queuelifetime die Datei anlegen und die Zeit in Sekunden anlegen, hier z.B. einen Tag:
86400
databytes
Maximale Größe einer E-Mail Nachricht in Bytes, z.B. # vi /var/qmail/control/databytes:
15000000
Größe und Anzahl der Logdateien Wenn man will das QMAIL mehr und größe Logdateien erzeigt muß man die Parameter für multilog im run-Skript ändern. z.B: /service/qmail/log/run
#vi /service/qmail/log/run #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t n20 s4999999 /var/log/qmail/smtpd
wobei die Parameter wie folgt belegt sind.
nX:
X ist hierbei die Anzahl der Logdateien, bevor die erste wieder gelöscht wird
sXXXXXXXXX
XXXXXX ist hierbei die Größe der Logdatei in Bytes
Logwatch
Um zu verhindern, das Logwatch sämtliche Details in seinem Statusbericht ausgibt, empfiehlt es sich auf primären Mailservern hier die Defaulteinstellungen etwas zu ändern.
Bad Mime Characters
Man fügt folgende Zeile in /service/qmail-smtp/run' und /service/qmail-smtp/run hinzu, um keine Mails mit BMCs in der Mail zu blocken.
export BMC_WHITELIST="on"
vi /usr/share/logwatch/default.conf/services/qmail-send.conf # This sets whether to display counts of emails from each user & to each user. # Will make rather a large log file if run on a primary mail server. # Set either 0 or 1 #$qmail_high_detail = 1 # default $qmail_high_detail = 0
vi /usr/share/logwatch/default.conf/services/qmail-smtpd.conf # This sets whether to display counts of emails from each user & to each user. # Will make rather a large log file if run on a primary mail server. # Set either 0 or 1 #$qmail_high_detail = 1 # default $qmail_high_detail = 0
Zusätzlich kann man dann noch in der Datei '/etc/logwatch/conf/ignore.conf' ein Paar Ausdrücke aus dem Statusbericht herausfiltern.
vi /etc/logwatch/conf/ignore.conf ###### REGULAR EXPRESSIONS IN THIS FILE WILL BE TRIMMED FROM REPORT OUTPUT ##### CHKUSER accepted sender CHKUSER accepted any rcpt
Tipps & Tricks
WICHTIG: SPF / DNS
Wichtig ist auch die richtige SPF Konfiguration im DNS, da sonst einige Mailserver ggf. die Kommunikation verweigern (Spamschutz).
Überblick
SPF steht für Sender Policy Framework und ist eine Technik zur Vermeidung von Spam- oder Virenmails mit gefälschtem Absender.
Da bei SPF in der Zonendatei des Nameservers der Absenderdomain ein spezieller Eintrag eingebaut wird, ist gewährleistet, dass Unbefugte keine Manipulationen vornehmen können.
SPF verhindert aber kein Spam, für den der Versender eine eigene Domain ordnungsgemäss angemeldet hat und greift auch nicht bei nicht existierenden Domains.
Dieser Überblick stammt von folgender Webseite, wo man einfach verständliche Informationen findet: http://wiki.hetzner.de/index.php/DNS_SPF
Weitere Links
- SMTP+SPF, Sender Policy Framework: http://spf.pobox.com/
- 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
Autorespond fixen
Wenn man autorespond (Mail-Robot) benutzt und im /var/log/qmail/current folgende Fehlermeldung sieht:
(...) deferral: /bin/sh:_/usr/local/bin/autorespond:_No_such_file_or_directory/ (...)
kann man das Problem mit folgendem Kommando beheben:
# ln -s /usr/bin/autorespond /usr/local/bin/autorespond
Mit Mailboxen umziehen
Wenn man mit einem Qmail-Toaster einmal auf eine andere Maschine umzieht, muss man die Mailboxen samt allen Einstellungen/Kennwörtern etc. natürlich mitnehmen. Hier eine kurze Beschreibung wie man das macht ohne eine Mail zu verlieren.
Man kann das ganz gut mit zwei SSH-Terminal-Sitzungen machen. Eine auf dem Quell-Server und eine auf dem Ziel-Server.
Server: Quelle
Als erstes muss man den gesamten Qmail-Toaster stoppen damit keine Mails mehr versendet oder empfangen werden können:
# qmailctl stop # vpopmailctl stop # /etc/init.d/courier-imap stop # /etc/init.d/courier-authlib stop
Nun packt man den gesamten Inhalt von /home/vpopmail/domains ein:
# cd ~ # tar cfvpz mail-domains.tar.gz /home/vpopmail/domains/
Die Datei kann jetzt z.B. via SSH-Copy (scp) auf den anderen Server übertragen werden.
Server: Ziel
Nachdem die Datei auf dem Ziel-Server angekommen ist, kann sie dort eingespielt werden. Dazu entpacken wir zuerst das tar.gz-Paket in einem temp. Ordner, in den wir zuvor mit cd gewechselt sind, und verschieben dann die Mailboxen an den richtigen Platz.
# tar xzf mail-domains.tar.gz # cd home/vpopmail/domains # mv -v * /home/vpopmail/domains/
Server: Quelle
Die Datei /var/qmail/users/assign ausgeben:
# cat /var/qmail/users/assign
Server: Ziel
Den Inhalt der oben ausgegebenen Datei nun in die entsprechende Datei auf dem Ziel-Server anhängen:
# vi /var/qmail/users/assign
HINWEIS: Unbedingt beachten das der . in der letzten Zeile stehten muss!
z.B.:
+test.braunschweig-lions.de-:test.braunschweig-lions.de:89:89:/home/vpopmail/domains/test.braunschweig-lions.de:-:: (...) +red-cubs94.de-:red-cubs94.de:89:89:/home/vpopmail/domains/red-cubs94.de:-:: .
Die Datei speichern.
Server: Quelle
Wieder auf dem Quell-Server eine weitere Datei ausgeben.
# cat /var/qmail/control/rcpthosts
Server: Ziel
Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:
# vi /var/qmail/control/rcpthosts
z.B.:
web1.braunschweig-lions.de test.braunschweig-lions.de mail.marketteam.de marketteam.de braunschweig-lions.de serviceteam-lions.de germanbowl.com junior-lions.de ffc-braunschweig.de red-cubs.de newsletter.braunschweig-lions.de red-cubs94.de
Server: Quelle
Wieder auf dem Quell-Server eine weitere Datei ausgeben.
# cat /var/qmail/control/virtualdomains
Server: Ziel
Den Inhalt der oben ausgegebenen Datei nun ebenfalls in die entsprechende Datei auf dem Ziel-Server anhängen:
# vi /var/qmail/control/virtualdomains
Z.B.:
test.braunschweig-lions.de:test.braunschweig-lions.de web1.braunschweig-lions.de:web1.braunschweig-lions.de marketteam.de:marketteam.de braunschweig-lions.de:braunschweig-lions.de serviceteam-lions.de:serviceteam-lions.de germanbowl.com:germanbowl.com feldschloesschen-german-bowl.de:feldschloesschen-german-bowl.de junior-lions.de:junior-lions.de ffc-braunschweig.de:ffc-braunschweig.de red-cubs.de:red-cubs.de newsletter.braunschweig-lions.de:newsletter.braunschweig-lions.de red-cubs94.de:red-cubs94.de
Nun muss auf dem Ziel-Server noch qmails user datenbank als cdb aktualisiert werden (/var/qmail/users/cdb):
# /var/qmail/bin/qmail-newu
Anhand des Timestamps der Datei kann man überprüfen ob das geklappt hat:
# ls /var/qmail/users/ -al insgesamt 36 drwxr-xr-x 2 root qmail 4096 31. Mär 02:21 . drwxr-xr-x 12 root qmail 4096 24. Mär 15:40 .. -rw-r--r-- 1 root root 1031 31. Mär 02:13 assign -rw------- 1 root root 0 27. Mär 10:49 assign.lock -rw-r--r-- 1 root root 3333 31. Mär 02:21 cdb
Vorsichthalber auf dem Ziel-Server alle Toaster-Dienste neu starten:
# qmailctl restart # vpopmailctl restart # /etc/init.d/courier-imap restart
!!! DNS MX-Einträge können nun umgestellt werden !!!
Der DNS muss umgestellt werden, damit die Mails aus dem Internet auf dem Ziel-Server ankommen.
Man manuell mit dem Programm telnet eine Zustellung einer Mail testen. Dabei z.B. das /var/log/qmail/current und /var/spool/qmailscan/qmail-queue.log beobachten. Das ganze am Besten von Extern:
$ telnet mail.marketteam.de 25 Trying 212.68.65.193... Connected to mail.marketteam.de (212.68.65.193). Escape character is '^]'. 220 web1.braunschweig-lions.de ESMTP helo 250 web1.braunschweig-lions.de mail from:schlueter@link-innovation.de 250 ok rcpt to:webmaster@braunschweig-lions.de 250 ok data 354 go ahead Subject: Erste Testmail, please ignore Das ist nur ein Test. . 250 ok 1143766246 qp 10453
Die beobachteten Logfiles sollten die korrekte Zustellung der Mail anzeigen.
Auf dem alten Server kann man nun noch über die smtproutes dafür sorgen, das alle eingehenden Mails an den neuen Server weitergegeben werden. Das ist sinnvoll weil die DNS-Änderung nicht sofort überall wirkt.
Server: Quelle
Mit # vi /var/qmail/control/smtproutes eine Datei mit folgendem Inhalt anlegen, wobei natürlich die IP-Adressen entsprechend anzupassen sind. In diesem Beispiel ist 212.68.65.193 der neue Server und 213.252.153.34 der alte Server:
:212.68.65.193
Server: Ziel
Mit vi /home/vpopmail/etc/tcp.smtp folgenden Eintrag anhängen:
213.252.153.34:allow,RELAYCLIENT=""
Die cdb-Datei in home/vpopmail/etc/ neu schreiben:
# qmailctl cdb
Server: Quelle
Nun auf dem Quell-Server qmail wieder starten:
# qmailctl start
Nun kann wieder von extern eine Testmail an den alten Server abgesetzt werden:
$ telnet 213.252.153.34 25 Trying 213.252.153.34... Connected to bs-lions-mail.bcc.de (213.252.153.34). Escape character is '^]'. 220 mail.marketteam.de ESMTP helo 250 mail.marketteam.de mail from:dirk@schlicker.org 250 ok rcpt to:webmaster@braunschweig-lions.de 250 ok Data 354 go ahead Subject: Test 3, mail an alten Server Diese Mail wurde via smtp am alten server abgeliefert, sollte weitergeleitet werden wen den Webserver... . 250 ok 1143766837 qp 29472
Wenn alles geklappt hat und die Mail über den neuen Server zugestellt wurde, war es das.
Courier-IMAP nach Dovecot
Sollte man den IMAP-Server gewechselt haben, dann muss man noch die Postfächer für dovecot wandeln
/usr/bin/courier-dovecot-migrate.pl --to-dovecot --recursive --convert /home/vpopmail/domains/domain
Mailinglisten reparieren
Manchmal kann es vorkommen, besonders nach einem Server-Umzug das die Administration einer Mailingliste mit QmailAdmin nicht mehr funktioniert, z.B das man keine Subscriber oder Moderatoren mehr löschen kann.
Dann ist es sinnvoll, die Subscriber, bzw Moderatoren zu exportieren, dann in der Liste zu löschen, und anschließend wieder hinzu zufügen.
Liste sichern
Subscriber
ezmlm-list DIR > subscriber.txt
wobei dir das Verzeichnis zur Mailingliste ist, also /home/vpopmail/domains/domain.de/list
Moderatoren
ezmlm-list DIR/mod > mods.txt
Liste aufräumen
Subscriber
/bin/rm DIR/subscribers/*
Moderatoren
/bin/rm DIR/mod/subscribers/*
Liste neu aufbauen
Subscriber
ezmlm-sub DIR < subscriber.txt
Moderatoren
ezmlm-sub DIR/mod < mods.txt
Anschließend sollte man wie gewohnt mir QMailAdmin arbeiten können
SPAM Abwehr
Netzwerke blockieren
Um im ersten Schritt eine SPAM-Attacke zu unterbinden, macht es Sinn, per Firewall das Netzwerk, den Rechner des Angreifers zu blockieren.
iptables -I INPUT -s 220.181.12.0/24 -p tcp --dport 25 -j DROP iptables -I INPUT -s 220.181.12.0/24 -p udp --dport 25 -j DROP
Mit diesen iptables Anweisungen werden sämtlich Pakete aus dem Netzwerk 220.181.12.0/24 (China) auf Port 25 (smtp) verworfen. Damit verhindert man erstmal, das weitere SPAM-Mails eintreffen.
Qmail Queue leeren
Da nach einer SPAM-Attacke meistens die QMail Mailqueue extrem gefüllt ist, kommt es natürlich zu Beischränkunegn bei dem normalen Mailverkehr. Daher macht es Sinn, die Queue dediziert zu bereinigen.
Dieses erreicht man mit dem Befehl:
qmail-remove -p "220.181.12" -d
Hier werden sämtliche Mails aus der Queue gelöscht, die irgendwo das Suchmuster (-p) "220.181.12" in der Mail enthalten.
Download: http://www.linuxmagic.com/opensource/qmail/qmail-remove/
Doublebounce unterbinden
Email-Konto einrichten, wohin doublebounce Mails verschwinden
echo '#' > /var/qmail/alias/.qmail-doublebounce echo "doublebounce" > /var/qmail/control/doublebounceto
SPAM IPs in DB merken
Da schon eine DB für den Mailserver existiert (relaydelay), wird diese um eine Tabelle erweitert.
use database relaydelay; CREATE TABLE `spam_ips` ( `ipaddress` varchar(40) NOT NULL default '', `dateadded` datetime NOT NULL default '0000-00-00 00:00:00', `reportedby` varchar(40) default NULL, `updated` datetime default NULL, `attacknotes` text, `b_or_w` char(1) NOT NULL default 'b', `dnsname` varchar(255) default'', `hits` int(11) NOT NULL default NULL, PRIMARY KEY (`ipaddress`), KEY `dateadded` (`dateadded`), KEY `b_or_w` (`b_or_w`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='spammer list';
wichtige Links
https://talosintelligence.com/reputation_center/lookup?search=85.214.122.89