Die Konfiguration von Courier-MTA als POP3/SMTP-Server für lokale Testzwecke ist grundsätzlich nicht schwierig, es gibt nur leider sehr wenige brauchbare und vor allem kurze HowTos dazu - Das mag wohl daran liegen dass in den meisten Fällen von Produktivmaschinen mit IMAP bzw. in Kombination mit Postfix ausgegangen wird.
authmodulelist="authmysql"
daemons=2
authdaemonvar=/usr/local/var/spool/authdaemon
DEBUG_LOGIN=1
DEFAULTOPTIONS="disablewebmail=1,disableimap=1"
LOGGEROPTS=""
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME courier_mta
MYSQL_PASSWORD [pwd]
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE courier_mta
MYSQL_USER_TABLE mail_users
MYSQL_LOGIN_FIELD username
MYSQL_CRYPT_PWFIELD pwd_crypt
MYSQL_CLEAR_PWFIELD pwd_clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_NAME_FIELD fullname
MYSQL_HOME_FIELD home
MYSQL_QUOTA_FIELD quota
MYSQL_AUXOPTIONS_FIELD auxoptions
DEFAULT_DOMAIN test.dk
Eine geniale Möglichkeit ist es die verwendeten Querys selbst anzupassen (Das Beispiel ist als eine zusammenhängende Zeile in der „/usr/local/etc/authlib/authmysqlrc“ zu sehen.
Damit kann zB ein Benutzer regulär angelegt und ein zusätzlicher Eintrag mit „*.@domain“ für alle nicht definierten Adressen mit der gleichen Home-Angabe fängt alles was kein eigenes Postfach hat ab. So lassen sich auch verschiedene Domains komplett auf einen einzigen Account umleiten.
MYSQL_SELECT_CLAUSE SELECT username,pwd_crypt,pwd_clear,uid,gid,home,'',quota,fullname,auxoptions FROM mail_users WHERE (username='$(local_part)@$(domain)' and pwd_crypt!='') or username='*@$(domain)';
Passwörter sind beim Hinzufügen von Benutzern im Feld „pwd_crypt“ mittels „crypt pwd“ auf der Kommandozeile zu verschlüsseln. Auf Unix-Rechnern kann das auch ein PHP-Skript mit dem Kommando crypt('mypwd')
Die Felder „uid“ und „gid“ sind mit den entsprechenden System-IDs des Courier-Daemons zu versehen, ansonsten funktioniert das Ganze schlichtweg nicht und kostet Zeit und Nerven.
create table mail_users
(
auto_id mediumint(6) unsigned not null auto_increment,
username varchar(255) collate latin1_german1_ci not null,
pwd_crypt varchar(255) collate latin1_german1_ci not null,
pwd_clear varchar(255) collate latin1_german1_ci not null,
uid mediumint(6) unsigned not null,
gid mediumint(6) unsigned not null,
fullname varchar(255) collate latin1_german1_ci not null,
home varchar(255) collate latin1_german1_ci not null,
quota varchar(255) collate latin1_german1_ci not null,
auxoptions varchar(255) collate latin1_german1_ci not null,
primary key (auto_id)
)
engine=MyISAM default charset=latin1 collate=latin1_german1_ci
Dies wird dann benötigt wenn der Client versucht sich per TLS zu Authentifizieren, die Warnung des Clients im Bezug auf das Zertifikat kann ignoriert werden. Je nach Konfiguration der einzelnen Dienste ist die Verschlüsselung optional oder verpflichtend - Beispielsweise der Parameter "ESMTP_TLS_REQUIRED" in der Datei "/usr/lib/courier/esmtpd"
Die Angaben für die Zetifikat-Inhalte erfolgen in folgenden Dateien:
/usr/lib/courier/etc/imapd.conf
/usr/lib/courier/etc/pop3d.conf
/usr/lib/courier/etc/esmtpd.conf
Folgende Kommandos erstellen die Zertifikate unter "/usr/lib/courier/share/":
/usr/lib/courier/share/mkesmtpdcert
/usr/lib/courier/share/mkimapdcert
/usr/lib/courier/share/mkpop3dcert
Wenn man den Server selbst kompiliert hat und sich nicht mit den rc.d-Skripts quälen will bietet es sich an eigene Skripts zu definieren und per „/etc/rc.d/rc.local“ zu starten bzw. beim Shutdown im Skript „/etc/rc.d/init.d/killall“ zu beenden.
/usr/local/sbin/authdaemond start
/usr/lib/courier/sbin/courier start
/usr/lib/courier/sbin/pop3d start
/usr/lib/courier/sbin/esmtpd start
/usr/local/sbin/authdaemond stop
/usr/lib/courier/sbin/courier stop
/usr/lib/courier/sbin/pop3d stop
/usr/lib/courier/sbin/esmtpd stop
Weitere Konfigurationen erfolgen unterhalb von „/usr/lib/courier/etc/“ und hier soll nur von einem lokalen Testserver mit einer eigenen Domain ausgegangen werden.
In den meisten Fällen gibt es beim Courier-MTA ein Kommando welches nach Änderungen an Konfigurationsdateien auszuführen ist (Dies liegt an der internen Struktur in Datenbank-Dateien).
echo "test.dk" >> /usr/lib/courier/etc/esmtpacceptmailfor.dir/domainlist.txt
/usr/lib/courier/share/makeacceptmailfor
echo "test.dk" >> /usr/lib/courier/etc/hosteddomains/domainlist.txt
/usr/lib/courier/share/makehosteddomains
Hier bietet sich natürlich ein Skript mit Eingabeaufforderung an welches wie unter „Aliase“ beschrieben auch gleich Catch-All-Einträge in der Datenbank erzeugt.
Als "home" wird „/home/courier/dksoft/“ für die Adresse „test@dk-software.org“ angenommen. Auf diesen und sämtliche Unterordner benötigt der Benutzer unter dem der Mailserver läuft Schreibrechte (In der Regel „courier“).
Bei der Verwendung von „mysqlauth“ bietet es sich an unter „/home/courier/“ die Mailordner für die einzelnen virtuellen Benutzer zu erzeugen. Bei entsprechender Rechtevergabe lassen sich diese mit dem MySQL-Eintrag per PHP-Skript erstellen.
mkdir /home/courier/dksoft/
mkdir /home/courier/dksoft/Maildir/
mkdir /home/courier/dksoft/Maildir/cur/
mkdir /home/courier/dksoft/Maildir/new/
mkdir /home/courier/dksoft/Maildir/tmp/
chown -R courier /home/courier
chgrp -R courier /home/courier
chmod -R 750 /home/courier
Bei Verwendung von „mysqlauth“ ist das Anlegen von Alias-Adressen denkbar einfach indem es mehrere Einträge mit dem gleichen „home“ gibt (Für diese ist kein Passwort nötig).
Mit der oben beschriebenen Erweiterung der „„/usr/local/etc/authlib/authmysqlrc“ lassen sich damit „*@domain“-Adressen problemlos realisieren.
Wenn das Zustellen aufgrund eines Konfigurationsfehlers nicht funktioniert wird eine Adresse deaktiviert. Unter „/usr/lib/courier/var/track“ liegende Dateien können wie die Inhalte der Ordner „/usr/lib/courier/var/msgs“ und „/usr/lib/courier/var/msgq“ gelöscht werden.
In der Datei „/usr/lib/courier/etc/smtpaccess/default“ werden Policies angegeben welche IPs SMTP-Zugriff haben. Nach Änderungen das Kommando „/usr/lib/courier/share/makesmtpaccess“ ausführen.
Eigentlich sollte laut Entwickler auf Fedora problemlos das RPM selbst gebaut werden können, bei mir funktionierte dies nicht wirklich - Mit ein paar Anlaufschwierigkeiten lässt sich der Server aber problemlos selbst kompilieren.
#! /bin/bash
cd /usr/src/courier-authlib/
CFLAGS="-march=i686" ./configure --with-redhat && make && sudo make check && sudo make install && sudo make clean > /dev/null
cd /usr/src/courier/
CFLAGS="-march=i686" ./configure --with-redhat --without-ispell && make && sudo make check && sudo make install && sudo make clean > /dev/null