Teaser
The more I see, the more I know
The more I know, the less I understand
clear

Hinweis

Mit neueren Version von courier-authlib wurde die Unterstützung von vpopmail gestoppt.

  • 0.60.4
    2008-05-08 Mr. Sam <sam@email-scan.com>
    * Makefile: Drop the unmaintained authvchkpw module.

Um dieses Howto erfolgreich zu betreiben, benötigt man also eine ältere Version von courier-authlib. Dennoch ist das natürlich keine langfristige, stabile Lösung.

Download von älteren Version courier-authlib: hier oder die 0.58 direkt. Diese müssten dann als Overlay eingebunden werden


Daher sollte man auf Exim oder Postfix umstellen, oder sich eine andere Lösung für Qmail überlegen.




Gentoo Qmail Howto

Für Linux Systeme und so auch Gentoo stehen mindestens vier Email Server (MTAs) zur Verfügung:

  • Postfix
  • Exim
  • Qmail
  • Sendmail


Der Grund weswegen ich mich (wieder einmal) für Qmail entschieden habe, ist einzig und allein die sehr gute Anbindung an vpopmail. vpopmail ist eine Domain/Emailkonten Verwaltung via Kommandozeile. Während für Postfix oder Exim die meisten Lösungsansätze für virtuelle Domains per mysql gelöst werden, kommen bei vpopmail sogenannte .cdb Dateien zum Einsatz. Die Verwaltung von Domains/Emailkonten per Datenbank ist für mich ein relatives "NO WAY", da ich ungern einen Service (Email) von einem anderen (Datenbank) abhängig machen, insbesondere wenn der Service noch durch den Webserver etc. benutzt wird. Ein Ausfall der Datenbank führt nämlich sonst zu einem nicht funktionieren des Email Dienstes.

Ansonsten sprechen gegen Qmail einige Gründe: Die Software wird seit längerem nicht mehr entwickelt und die Lizenz des Programmierers erlaubt leider nicht eine unabhängige weiterprogrammierung. Das endet aktuell darin, daß man ein 10 Jahre altes Programm durch 1000+1 Patch zu einem aktuell Email Server entwickelt. Dieses nennt man dann "netqmail". Gentoo User haben es da noch relativ einfach, da der Maintainer von Qmail unter Gentoo ein richtig gutes Ebuild bereitstellt, daß einem viel Arbeit abnimmt.

Desweiteren geht dieses Howto auf die Installation eines POP3 & Imap Server ein, sowie auf die Filterung der eingehene Emails durch Spamassassin und Clamav. Als Filter für Qmail wird simscan verwendet, da qmail-scanner unter Gentoo mehr Probleme als Freunde macht. Die aktuellen Ebuild (2.01) von qmail-scanner funktionieren leider nicht und die Alternativen in den Bug Reports sind leider nicht 100% fehlerfrei. Mit Simscan steht dazu eine modernere Variante zur Verfügung.

Genug gequatscht. Nun wird installiert.




1) Vorbereitung

Vor der eigentlichen Installation passe ich bereits die gewünschten USE-Flags und Keywords an, damit wir später bei der Installation nicht mehr manuell eingreifen müssen:

www ~ # cat /etc/portage/package.use
net-mail/vpopmail -mysql clearpasswd
net-libs/courier-authlib -mysql
mail-filter/spamassassin -mysql tools
app-antivirus/clamav bzip2 curl
mail-mta/netqmail mailwrapper ssl noauthcram qmail-spp
mail-client/squirrelmail -mysql
mail-filter/simscan attachment clamav passthru spamassassin received

 
 

Sowie die Keywords Datei:

www ~ # cat /etc/portage/package.keywords
app-antivirus/clamav ~amd64
net-mail/tnef ~amd64
mail-filter/simscan ~amd64

 

 



2) Installation der benötigten Packete

"ssmtp" deinstallierenPer Default hat Gentoo einen Mini SMTP Server installiert. Früher oder später wird dieses mit netqmail in Konflikt treten, daher deinstallieren wir ihn.

www ~ # emerge --unmerge ssmtp
mail-mta/ssmtp
selected: 2.61-r2
protected: none
omitted: none

 

netqmail und vpopmail installieren

Achtung ! Es gibt einmal Qmail und einmal das modernere Netqmail. Wir wollen Netqmail installieren. Außerdem Vpopmail, die Userverwaltung

www ~ # emerge -pv netqmail vpopmail
[ebuild  N    ] mail-mta/netqmail-1.05-r8  USE="mailwrapper noauthcram qmail-spp ssl -gencertdaily -highvolume -vanilla" 331 kB
[ebuild  N    ] virtual/qmail-1.03  0 kB[ebuild  N    ] net-mail/vpopmail-5.4.16  USE="clearpasswd -ipalias -mysql" 443 kB
+ einige andere Pakete, die automatisch mit gemerged werden

 

Courier Imap/Pop3 Server

Außerdem mergen wir die courier-authlib mit, da wir dieses Paket zur Abfrage der Logindaten für Imapd & smtp benutzen. Courier hat jedoch in neueren Version die Unterstützung für vpopmail gestrichen. Wir behelfen uns damit, daß wir Versionen über 0.58 maskieren:

in " /etc/portage/package.mask" eintragen:
>net-libs/courier-authlib-0.58


nun installieren wir courier:

www ~ # emerge -pv courier-authlib courier-imap
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild  N    ] net-libs/courier-authlib-0.58  USE="berkdb crypt gdbm pam -debug -ldap -mysql -postgres" 1,873 kB
[ebuild  N    ] net-mail/courier-imap-4.0.6-r2  USE="berkdb gdbm nls -debug -fam -ipv6 (-selinux)" 3,084 kB

 

 

Spamassasin & clamav

www ~ # emerge -pv spamassassin clamav

 

3) Installation von Qmail

3.1) Qmail konfigurieren

Zunächst das Server Zertifikat anpassen:

/var/qmail/control/servercert.cnf

anschliessend werden die Grundeinstellungen von Qmail vorgemommen. Dieses passiert mehr oder minder automatisch durch aufruf des Configuration Scriptes

www ~ # emerge --config =mail-mta/netqmail-1.05-r8


3.2) Qmail in die Runlevel eintragen
Qmail wird anders als die meisten andere Server Dienste nicht direkt über Init Scripte gestartet, sondern über die Daemontools. Dieses Toolset (Tcpserver) starten qmail bei Befarf neu:

www ~ # ln -s /var/qmail/supervise/qmail-send /service/qmail-send
www ~ # ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd

 

3.3) Qmail anpassen

Qmail ist sehr modular aufgebaut und dieses zeigt sich auch in den Config Dateien. Man findet  für jeden Bereich von Qmail eine eigene Config Datei in /var/qmail. Zunächst die allgemeine Datei:

 /var/qmail/control/conf-common

Die Softlimit Option bestimmt wieviel speicher sich Qmail holen kann. Dieses beinhaltet auch das Scannen von Archiven später mit Qmail-scanner. Daher eher höher setzen:

SOFTLIMIT_OPTS="-m 256000000"

 

Dann die Config Datei für den smtp Prozess:

/var/qmail/control/conf-smtpd

Bei Bedarf/auf Wunsch kann qmail bereits beim SMTP Connect eine Anfrage bei einer Blacklist tätigen. ich frage die Blacklist von Spamcop ab, eine Liste gibt es bei:

#QMAIL_SMTP_PRE="${QMAIL_SMTP_PRE} rblsmtpd -r RBL-SERVER"
QMAIL_SMTP_PRE="${QMAIL_SMTP_PRE} rblsmtpd -r bl.spamcop.net"

Außerdem wird hier auch die SMTP Auth konfiguriert. Relativ am Ende der Datei stehen mehrere (auskommentierte) Beispiele. Dort fügen wir ein:

QMAIL_SMTP_CHECKPASSWORD="/var/vpopmail/bin/vchkpw"

 

3.4) svscan starten

Wie oben erwähnt wird Qmail indirekt über svscan gestartet. Dieses müssen wir nun noch in die Runlevels eintragen.

www ~ # rc-update add svscan default
 * svscan added to runlevel default

www ~ # /etc/init.d/svscan start
* Starting service scan ...

 

 

3.5) qmail-spp

Wir hatten Qmail ja mit spp support kompiliert. spp steht für SMTP plugin patch und erlaubt das aufführen von Scripts für jeden Teil des SMTP Prozesses. Eine genaue Erklärung gibt es hier: http://qmail-spp.sourceforge.net/

Welche Scripte benutzt werden, wird in der Datei /var/qmail/control/smtpplugins eingestellt. Ich empfehle zunächst einmal Überprüfung der Empfängeradresse beim SMTP Dialog, dadurch ersparen wir uns die ganzen Bounce und Doublebounce Messages. Das Script findet man hier: http://www.maiers.de/qmail/art38,71.html?fCMS=af8e0106bfeed5cef928cb6aa173e374 roi

 
Ein direkter Download Link ist hier: www.maiers.de/qmail/vpopmail_check_recipient.sh

Einfach in /var/qmail/plugins kopieren und mittels "chmod +x" ausführbar machen. Die  /var/qmail/control/smtpplugins wie folgt anpassen:

# plugins to execute on RCPT command
[rcpt]
plugins/vpopmail_check_recipient.sh

 

 und nun noch diverse Rechte richtig und einige Dateien kopieren setzen in /var/vpopmail/bin:

www bin # chmod +s vuserinfo vdominfo valias
www bin # cp /bin/ls /var/vpopmail/bin/vpopls
www bin # cp /bin/grep /var/vpopmail/bin/vgrep
www bin # chown vpopmail:vpopmail /var/vpopmail/bin/vpopls /var/vpopmail/bin/vgrep
www bin # chmod +s /var/vpopmail/bin/vpopls /var/vpopmail/bin/vgrep

  

 

 

4) Installation von Courier-Authlib und Imap

4.1) Courier-Authlib anpassen, damit es mit vpopmail zusammenarbeitet

/etc/courier/authlib/authdaemonrc

Zeile 27: authmodulelist="authvchkpw"


4.2) Server Zertifikate für SSL Zugang von Pop3 und IMAP anpassen:

/etc/courier-imap/imapd.cnf
/etc/courier-imap/pop3d.cnf

 

Nun die Zertikate erstellen:

 mkimapdcert
 mkpop3dcert

 

4.3) Courier Authlib und Imap starten

/etc/init.d/courier-authlib start
/etc/init.d/courier-imapd start
/etc/init.d/courier-imapd-ssl start
/etc/init.d/courier-pop3d start
/etc/init.d/courier-pop3d-ssl start

 

4.4) Courier Authlib und Imap den Runlevel hinzufügen

# rc-update add courier-authlib default
 * courier-authlib added to runlevel default
# rc-update add courier-pop3d default
 * courier-pop3d added to runlevel default
# rc-update add courier-pop3d-ssl default
 * courier-pop3d-ssl added to runlevel default
# rc-update add courier-imapd default
 * courier-imapd added to runlevel default
# rc-update add courier-imapd-ssl default
 * courier-imapd-ssl added to runlevel default

 

5) SimScan installieren

Qmail verfügt selber über keine Möglichkeiten Emails zu überprüfen, sei es auf Viren oder um Spam zu erkennen. Dazu wird ein externes Programm benötigt, daß die Viren- und Spamscanner dann aufruft. In der Vergangenheit war dazu qmail-scanner die Wahl der Stunde, nur seit der Version 2.0 sind die Ebuilds voller Fehler und auch die gefixten Version in der Bug Sektion sind nicht 100% fehlerfrei. Mit Simscan steht eine alternative zur Verfügung, die mir persönlich besser gefällt.

Installieren:

# emerge -pv simscan
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] net-mail/ripmime-1.4.0.6  160 kB
[ebuild  N    ] mail-filter/simscan-1.3.1  USE="attachment clamav passthru spamassassin -dropmsg -per-domain -quarantine -received -regex" 270 kB

simscan cdb file built. /var/qmail/control/simcontrol.cdb
 *
 * You have to do that every time you update clamav or spamassassin

                Current settings
---------------------------------------
 user                  = simscan
 qmail directory       = /var/qmail
 work directory        = /var/qmail/simscan
 control directory     = /var/qmail/control
 qmail queue program   = /var/qmail/bin/qmail-queue
 clamdscan program     = /usr/bin/clamdscan
 clamav scan           = ON
 trophie scanning      = OFF
 attachement scan      = ON
 ripmime program       = /usr/bin/ripmime
 custom smtp reject    = OFF
 drop message          = OFF
 regex scanner         = OFF
 quarantine processing = OFF
 domain based checking = OFF
 add received header   = ON
 spam scanning         = ON
 spamc program         = /usr/bin/spamc
 spamc arguments       =
 spamc user            = OFF
 authenticated users scanned = OFF
 spam passthru         = ON
 spam hits             = 10
 dspam scanning        = OFF

Nun noch clamav der Simscan Gruppe hinzufügen:

usermod -G simscan clamav

 


TCP Server anpassen:

/etc/tcprules.d/tcp.qmail-smtp

Die Zeile ":allow" suchen und auskommentieren

 Dann steht zum schluss:

<IP vom eigenen Server>:allow,RELAYCLIENT="",RBLSMTPD=""
:allow,NOP0FCHECK="1",QMAILQUEUE="/var/qmail/bin/simscan"

Also von lokal (weiter oben steht auch localhost) ist relayen erlaubt und es wird kein simscan aufgerfen, bei allen anderen ist relayen nicht erlaubt und simscan wird aufgerufen. Ohne den "NoPOFCheck" stürzt simscan leider mit einem  [pid XXXX] --- SIGSEGV (Segmentation fault) @ 0 (0) - ab

 Nach jeder Veränderung muss die eigentliche Datei neu geschrieben werden. Sonst sind die Änderungen nicht aktiv:

tcprules /etc/tcprules.d/tcp.qmail-smtp.cdb /etc/tcprules.d/.tcp.qmail-smtp.tmp < /etc/tcprules.d/tcp.qmail-smtp

Damit clamav mit simscan vernünftig funktioniert, empfiehlt es sich, clamav unter dem Usernamen "simscan" laufen zu lassen. Es gibt einige patches im Netz, damit man das auch über die Gruppenzugehörigkeit machen kann. Die Rechteprobleme erkennt man an:

imscan: runned_scanners is  attach: 1.3.1 clamav: 0.91.2/m:44/d:44
simscan: found 0.91.2/m:44/d:44
simscan: fatal error executing clamdscan

Hintergrund ist der, daß die Dateien zum scannen mit den rechten "simscan:simscan" und 600 angelegt werden. Das wir vorher als clamav der Gruppe hinzugefügt haben, hilft leider nicht. Patches und eine detaillierte erklärung gibt es hier: http://qmail.jms1.net/simscan/

/etc/clamd.conf

#User clamav
User simscan

 

/etc/freshclam.conf

#User clamav
DatabaseOwner simscan

Erst jetzt darf man clamav starten. Wenn man das vorher gemacht hat, dann hat /var/run/clamav die falschen Rechte und der Daemon stirbt gleich nach dem Start wieder (kann man mit /etc/init.d/clamav status überprüfen)

chmod -R simscan:clamav /var/lib/clamav
chmod -R simscan:clamav /var/run/clamav

www run # ls -als /var/run/clamav/
total 8
0 drwxr-xr-x 2 simscan clamav    39 Aug 22 11:01 .
4 drwxr-xr-x 5 root    root    4096 Aug 22 11:00 ..
4 -rw-rw---- 1 simscan simscan    5 Aug 22 11:01 clamd.pid
0 srwxrwxrwx 1 simscan simscan    0 Aug 22 11:01 clamd.sock

 
Testen:

www run # QMAILQUEUE=/var/qmail/bin/simscan SIMSCAN_DEBUG=1 NOP0FCHECK=1 /var/qmail/bin/qmail-inject email@domain < /root/mailtest.txt
simscan: starting: work dir: /var/qmail/simscan/1187773720.688434.20067
simscan: calling clamdscan
simscan: normal clamdscan return code: 0
simscan: calling spamc
simscan: calling /usr/bin/spamc  spamc
simscan:[20066]:CLEAN (2.90/5.00):0.0581s::(null):root@FQDN:email@domain :
simscan: done, execing qmail-queue
simscan: qmail-queue exited 0

 

 Spamd anpassen

/etc/conf.d/spamd

# SPAMD_OPTS="-m 5 -c -H"
SPAMD_OPTS="-m 5"

und mit

rc-update add spamd default

dem Runlevel zufügen