Gentoo Logo

Leitfaden zum virtuellen Mailhosting System mit Postfix

Inhalt:

1.  Einführung

Für die meisten Gentoo-Benutzer reicht ein einfacher E-Mail-Client und fetchmail. Wenn Sie jedoch eine Domain auf Ihrem System hosten, werden Sie einen voll ausgewachsenen MTA (Mail Transfer Agent) benötigen. Wenn sie mehrere Domains hosten, dann werden Sie definitv etwas robusteres brauchen um alle E-Mails Ihrer Benutzer zu verwalten. Dieses System wurde geschaffen um eine elegante Lösung für die folgende Aspekte zu bieten.

Ein virtuelles Mailsystem muss fähig sein die E-Mails zahlreicher Domains mit mehreren Benutzern über verschiedenste Schnittstellen zu verwalten. Das bringt einige Probleme mit sich, die gelöst werden müssen. Was ist wenn Sie zum Beispiel zwei Benutzer haben, die auf verschiedenen Domains die gleichen Benutzernamen verwenden möchten? Wenn Sie IMAP Zugriff und SMPT-Auth anbieten, wie kombinieren Sie dann die verschiedenen Authentifizierungsdienste zu einem einzelnen System? Wie schaffen Sie Sicherheit für die zahlreichen Komponenten, die das System umfasst? Wie werden Sie all das umsetzen?

Dieses HowTo zeigt Ihnen wie man ein Mailsystem aufsetzt, das fähig ist soviele Domains zu verwalten wie Ihre Hardware verkraften kann, virtuelle Benutzer unterstützt, die keinen Shell Account benötigen, domainspezifische Benutzernamen hat, web, imap, smtp und pop3 Clients über eine einzige Datenbank identifiziert, SSL für TLS (Transport Layer Security) verwendet, ein Webinterface beinhaltet, Mailinglisten für jegliche Domain auf dem Rechner verwalten kann und von einer schlanken, zentralen und bequemen MySQL-Datenbank gesteuert wird.

Es gibt eine Menge von Möglichkeiten um ein virtuelles Mailsystem aufzubauen. Bei den zahlreichen Alternativen kann ein anderes die beste Wahl für Ihren speziellen Bedarf sein. Berücksichtigen Sie http://www.qmail.org/ und http://www.exim.org/ um etwas über Ihre Alternativen zu erfahren.

Die folgenden Pakete werden während dieser Einrichtung verwendet: apache, courier-imap, courier-authlib, postfix, mod_php, phpmyadmin, squirrelmail, cyrus-sasl, mysql, php und mailman.

Verwenden Sie folgende USE-Variablen in /etc/make.conf bevor Sie mit dem Kompilieren der Pakete beginnen: USE="mysql pam-mysql imap libwww maildir sasl ssl". Andernfalls werden Sie sehr wahrscheinlich die Pakete neu kompilieren müssen um die Unterstützungen, die von den verwendeten Protokollen benötigt werden, zu erhalten. Außerdem sollten Sie alle anderen Mail- und Netzwerk-Werte wie ipv6 aus den USE Flags entfernen.

Wichtig: Sie brauchen eine Domain, oder wenigstens einen MX Eintrag für eine Domain, um einen öffentlichen Mailserver zu betrieben. Im Idealfall haben Sie die Kontrolle über mindestens zwei Domains um einen Vorteil aus Ihrem neuen Mailsystem zu ziehen.

Wichtig: Stellen Sie sicher dass /etc/hostname den richtigen Hostname Ihres Mailservers hat. Sie können jegliche Veränderungen an dieser Datei aktivieren, indem Sie /etc/init.d/hostname restart ausführen. Überprüfen Sie durch hostname, dass Ihr Hostname korrekt gesetzt wurde. Überprüfen Sie auch, dass es keine widersprüchlichen Einträge in /etc/hosts gibt.

Notiz: Es ist empfehlenswert, dass Sie das ganze Dokument lesen und sich mit allen Schritten vertraut machen bevor Sie mit der Installation beginnen. Wenn Sie Probleme mit einem Schritt haben sollten, konsultieren Sie den Abschnitt zur Fehlersuche am Ende dieses Dokuments. Nicht alle der verwiesenen Pakete sind nötig. Die Einrichtung ist sehr flexibel. Wenn Sie zum Beispiel kein Webinterface benötigen, lassen Sie einfach den Abschnitt zu squirrelmail aus.

2.  Postfix Grundlagen

Befehlsauflistung 2.1: Postfix installieren

# emerge postfix

Warnung: Stellen Sie sicher, dass Sie keine anderen MTAs wie ssmtp, exim oder netqmail installiert haben, andernfalls werden Sie sehr sicher GROßE Schwierigkeiten bekommen.

Nachdem Postfix installiert ist, ist es an der Zeit es zu konfigurieren. Ändern Sie folgende Einstellungen in /etc/postfix/main.cf. Denken Sie daran $variables dunch Ihre eigenen Namen zu ersetzen.

Befehlsauflistung 2.2: /etc/postfix/main.cf

myhostname = $host.domain.name
mydomain = $domain.name
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = my.ip.net.work/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10

Als nächstes ändern Sie folgendes in /etc/postfix/master.cf. Dies wird die detaillierte Ausgabe für Fehlerbeseitigungen aktivieren.

Befehlsauflistung 2.3: /etc/postfix/master.cf

# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (50)
#
==========================================================================
(Fügen Sie nur ein -v dem smtpd in der oberen Zeile hinzu)
smtp      inet  n       -       n       -       -       smtpd -v

Editieren Sie nun /etc/mail/aliases um ihre lokalen Aliase hinzuzufügen. Es sollte mindestens ein Alias für root gesetzt werden, wie: root: ihre@email.adresse

Befehlsauflistung 2.4: postfix das erste Mal starten

# /usr/bin/newaliases
Das wird die neuen aliases installieren. Sie müssen das nur tun,
wenn Sie Aliase installieren oder aktualisieren wollen.

# /etc/init.d/postfix start

Nun da postfix läuft, starten Sie ihren bevorzugten Konsolenmailclient und senden sich selbst eine E-Mail. Ich empfehle mutt für alle meine Konsolenmail. Stellen Sie sicher, dass postfix die Mails an lokale Benutzer ausliefert. Wenn dies erledigt ist, geht es weiter mit dem nächsten Abschnitt.

Notiz: Es wird empfohlen, dass Sie sicherstellen, dass diese grundlegende postfix Einrichtung funktioniert, bevor Sie mit dem nächsten Schritt dieses Leitfadens fortfahren.

3.  Courier-imap

Befehlsauflistung 3.1: Courier-imap und Courier-authlib installieren

# emerge courier-imap courier-authlib

Befehlsauflistung 3.2: Courier-imap Konfiguration

# cd /etc/courier-imap
(Wenn Sie die SSL Unterstützung von courier-imap oder pop3 nutzen wollen,
müssen Sie Zertifikate dafür erstellen.
Dieser Schritt wird empfohlen. Wenn Sie SSL nicht nutzen wollen, lassen Sie ihn aus.)

# nano -w pop3d.cnf
# nano -w imapd.cnf
(Ändern Sie die C, ST, L, CN und email Parameter so, dass sie zu Ihrem Server passen.)

# mkpop3dcert
# mkimapdcert

Befehlsauflistung 3.3: Starten Sie den gewünschten Courier Dienst

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

Öffnen Sie den Mailclient Ihrer Wahl und stellen Sie sicher, dass alle Verbindungen, die Sie gestartet haben, Mails empfangen und versenden können. Natürlich können Sie sich auf keinem der Dienste einloggen, da die Authentifizierung noch nicht konfiguriert wurde, aber es ist klug zu prüfen, ob die Verbindungen selbst funktionieren.

Nun da die Grundlagen funktionieren, werden wir nun eine ganze Menge auf einmal einrichten umd den Rest des Systems zum Laufen zu bringen. Nochmals: Stellen Sie bitte sicher, dass alles was Sie bisher installiert haben richtig funktioniert, bevor Sie weitermachen.

4.  Cyrus-sasl

Als nächstes installieren wir cyrus-sasl. Sasl wird die AUTH-Variablen zu PAM weiterleiten, welches die Informationen zu MySQL weiterleitet um die Authentifikation der SMTP-Benutzer durchzuführen. In diesem HowTo werden wir nicht feststellen dass SASL richtig arbeitet, bis MySQL nicht aufgesetzt ist und einen Testbenutzer enthält. Dies ist in Ordnung, da wir letztendlich gegen Mysql so oder so authentifizieren.

Befehlsauflistung 4.1: Cyrus-sasl Ebuild einstellen und installieren

# emerge cyrus-sasl

Editieren Sie nun /etc/sasl2/smtpd.conf.

Befehlsauflistung 4.2: SASL starten

# nano -w /etc/sasl2/smtpd.conf
mech_list: PLAIN LOGIN
pwcheck_method: saslauthd
# nano -w /etc/conf.d/saslauthd
SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"
SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"
# /etc/init.d/saslauthd start

5.  SSL Zertifikate für Postfix und Apache

Als nächstes erstellen wir einen Satz von Zertifikaten für Postfix und Apache.

Befehlsauflistung 5.1: SSL Zertifikate erstellen

# cd /etc/ssl/
# nano -w openssl.cnf

Ändern Sie die folgenden Standardwerte für Ihre Domain:
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.

(Wenn die Variablen nicht existieren, dann erstellen Sie sie an einem sinnvollen Platz.)


# cd misc
# ./CA.pl -newreq-nodes
# ./CA.pl -newca
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newkey.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix
(Nun dasselbe für Apache.)

# openssl req -new > new.cert.csr
# openssl rsa -in privkey.pem -out new.cert.key
# openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365
(Lassen Sie die Zertifikate einfach hier liegen.
Wir installieren sie nachdem der Apache installiert ist.)

6.  SSL und SASL Unterstützung zu Postfix hinzufügen

Editieren Sie nun die Postfix-Konfigurationsdateien, damit es mit SASL und SSL umgehen kann. Fügen Sie die Parameter am Ende der Datei ein, damit man sie später leicht finden kann.

Befehlsauflistung 6.1: /etc/postfix/main.cf

# nano -w /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =

(Die broken_sasl_auth_clients Option und die login auth Methode
sind nur für Outlook und Outlook Express; beide sind undokumentiert.
smtpd_sasl_local_domain hängt, für Clients die SMTP-AUTH verwenden, einen
Domainnamen an. Stellen Sie sicher dass kein Wert für die Variable gesetzt
ist, sonst werden Ihre Benutzernamen von Postfix verstümmelt und sie werden
nicht in der Lage sein zu authentifizieren.)

smtpd_recipient_restrictions =
  permit_sasl_authenticated,
  permit_mynetworks,
  reject_unauth_destination

(Die nächsten zwei Optionen aktivieren ausgehende Verschlüsselung.)
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newkey.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

(smtpd_tls_auth_only ist auskommentiert um uns das Testen zu
erleichtern. Sie können es später wieder aktivieren, wenn Sie wünschen.)

# postfix reload

Jetzt werden wir überprüfen ob Postfix unsere neuen Einstellungen übernommen hat. Dafür werden wir telnet (enthalten u.a. in net-misc/netkit-telnetd), auch wenn Sie nc (aus net-analyzer/netcat) verwenden können:

Befehlsauflistung 6.2: Überprüfen des SASL und TSL Supports

# telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.domain.com ESMTP Postfix
EHLO domain.com
250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-XVERP
250 8BITMIME
^]
telnet> quit

Stellen Sie sicher dass die obigen AUTH und STARTTLS Zeilen nun in Ihrer Postfix-Installation erscheinen. Wie schon gesagt, wird AUTH zum jetzigen Zeitpunkt nicht funktonieren, weil sals versuchen wird die Benutzer über seine sasldb, anstatt über die shadow Datei - aus irgendeinem Grund, zu authentifizieren, welche wir noch nicht eingerichtet haben. Also werden wir nun mysql dafür einrichten, all unsere auth und virtual domain Informationen aufzunehmen.

7.  Der Benutzer vmail

Bevor wir unsere virtuelle Mailhosting Umgebung aufsetzen, erstellen wir einen funktionellen Benutzer, unter dem die virtuellen Mailboxen gehostet werden werden. Um der Klarheit willen nennen wir diesen vmail:

Befehlsauflistung 7.1: Den Benutzer vmail anlegen

  # adduser -d /home/vmail -s /bin/false -m vmail

Nun haben Sie also den vmail Benutzer angelegt. Sie können mehrere Konten erstellen, falls Sie wollen (um eine gewisse Struktur in Ihren virtuellen Mail-Konten zu behalten). Auf die Benutzer-ID, Gruppen-ID und Heimatverzeichnisse wird in den MySQL-Tabellen verwiesen.

Neben den Benutzerkonten müssen wir auch den Ort anlegen, an dem sich die Mailboxen befinden werden:

Befehlsauflistung 7.2: Mailboxen erstellen

# mkdir -p /home/vmail/virt-domain.com/foo
# chown -R vmail:vmail /home/vmail/virt-domain.com
# maildirmake /home/vmail/virt-domain.com/foo/.maildir

8.  MySQL

Als nächstes installieren und konfigurieren wir MySQL. Sie werden für diesen Schritt die genericmailsql.sql Dumpdatei benötigen.

Befehlsauflistung 8.1: MySQL installieren und konfigurieren

# emerge mysql

# /usr/bin/mysql_install_db
(Nach diesem Befehl befolgen Sie die Anweisungen auf ihrem Bildschirm,
um ein root-Passwort mit mysql, nicht mysqladmin, festzulegen. Andernfalls ist
Ihre DB weit offen.)

# /etc/init.d/mysql start
# mysqladmin -u root -p create mailsql
# mysql -u root -p mailsql < genericmailsql.sql
# mysql -u root -p mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE
  ->     ON mailsql.*
  ->     TO mailsql@localhost
  ->     IDENTIFIED BY '$password';
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
(Stellen Sie sicher dass der neue mailsql Benutzer sich mit dem MySQL-Server verbinden kann.)

# mysql -u mailsql -p mailsql

Ihre neue Datenbank enthält Standardwerte und -tabellen für zwei Domains. Die folgenden Tabellen sind enthalten:

  • alias - lokale Email aliases und mailman alias Informationen
  • relocated - umgezogene Benutzer Email-Zuweisung
  • transport - Mail Transport Informationen für alle Domains, die Sie hosten
  • users - Alle Benutzerinformationen
  • virtual - Virtuelle E-Mail-Domain Aliase.

Befehlsauflistung 8.2: Beispieleinträge für die Tabelle alias

id   alias      destination
1    root       foo@bar.com
2    postmaster foo@bar.com

Befehlsauflistung 8.3: Benutzer-Beispielstabelle

(Zeilenumbruch für Klarheit.)
id email            clear     name     uid     gid     homedir     \
  maildir                                quota  postfix
10 foo@virt-domain.com $password realname virtid  virtid  /home/vmail \
  /home/vmail/virt-domain.com/foo/.maildir/        y
13 foo@bar.com      $password realname localid localid /home/foo   \
  /home/foo/.maildir/                           y

Die Werte der virtid uid und gid sollten die des vmail Benutzers und der Gruppe sein.

Befehlsauflistung 8.4: Beispieleinträge für die Tabelle transport

id   domain          destination
1    bar.com         local:
2    virt-domain.com virtual:

Befehlsauflistung 8.5: Beispieleinträge für die Tabelle virtual

id   email                destination
3    root@virt-domain.com other@email.address

9.  Apache und phpMyAdmin

Als nächstes installieren wir Apache und eine Schnittstelle mit der wir die Datenbank einfacher editieren können.

Befehlsauflistung 9.1: Apache und phpMyAdmin installieren

# emerge apache phpmyadmin

Es existieren viele Anleitungen, wie man einen Apache mit PHP aufsetzt, miteinbezogen die Leitfäden, die vom Gentoo PHP Projekt bereit gestellt werden. Es gibt auch zahlreiche Einträge auf http://forums.gentoo.org, wie man Probleme mit der Installation löst (suchen Sie nach 'apache php'). Der Autor wird daher auf das hier nicht eingehen. Setzen Sie Apache mit PHP auf und fahren Sie mit dem Howto fort. Sie müssen auf jeden Fall eine .htaccess Datei in ihrem phpmyadmin Verzeichnis anlegen. Falls Sie diese Anweisung nicht befolgen, wird es vorkommen, dass Ihre phpmyadmin Seite von Suchmaschinen indiziert und so via z.B. Google erreichbar wird. Jeder könnte auf Ihre Datenbanken zugreifen und sie verändern, wie es ihnen beliebt, dies ist nicht gut! Es gibt sehr viele Howtos dazu, so auch: http://www.csoft.net/docs/micro/htaccess.html.en.

Jetzt werden wir die Zertifikate für Apache installieren, die wir zuvor erstellt haben. Die Apache-SSL-Anweisungen, die Sie benötigen, um die folgenden Zertifikate zu verwenden, sind:

  • SSLCertificateFile /path/to/certs/new.cert.cert
  • SSLCertificateKeyFile /path/to/certs/new.cert.key

Befehlsauflistung 9.2: Apache-SSL-Zertifikate installieren

# cp /etc/ssl/misc/new.cert.cert /etc/apache2/ssl/
# cp /etc/ssl/misc/new.cert.key /etc/apache2/ssl/
# cd /etc/apache2/vhosts.d
(Prüfen Sie, ob bereits ein ssl-vhost Template vorliegt. Kopieren Sie
dieses anstelle on default_vhost, falls dies der Fall ist)
# cp 00_default_vhost.conf ssl-vhost.conf/
# nano -w ssl-vhost.conf

(Ändern Sie die folgenden Parameter)
NameVirtualHost host.domain.name:443

<VirtualHost host.domain.name:443>
ServerName host.domain.name
ServerAdmin your@email.address

  DocumentRoot "/var/www/localhost/htdocs/phpmyadmin";
  <Directory "/var/www/localhost/htdocs/phpmyadmin">
    ...
  </Directory>

  SSLCertificateFile /etc/apache2/ssl/new.cert.cert
  SSLCertificateKeyFile /etc/apache2/ssl/new.cert.key
  SSLEngine on
    ...
</VirtualHost>

# nano -w /etc/conf.d/apache2
(Fügen Sie -D SSL -D PHP5 zu APACHE2_OPTS hinzu)

# /etc/init.d/apache2 restart

Konfigurieren Sie nun phpMyAdmin.

Befehlsauflistung 9.3: Konfigurieren von phpMyAdmin

# cd /var/www/localhost/htdocs/phpmyadmin
# cp config.sample.inc.php config.inc.php
# nano -w config.inc.php
(Ändern Sie die folgenden Parameter)
$cfg['blowfish_secret'] = 'someverysecretpassphraze';

$cfg['Servers'][$i]['host'] = 'localhost';          // MySQL hostname
$cfg['Servers'][$i]['controluser'] = 'mailsql';     // MySQL Kontroll-Benutzereinstellung
                                                    // (dieser Benutzer muss Leseberechtigung
$cfg['Servers'][$i]['controlpass'] = '$password';   // für die  "mysql/user"
                                                    // und "mysql/db" Tabellen besitzen)
$cfg['Servers'][$i]['user'] = 'mailsql';            // MySQL Benutzer
$cfg['Servers'][$i]['password'] = '$password';      // MySQL Passwort

Betreten Sie nun die phpmyadmin Seite und blättern Sie durch die Tabellen. Fügen Sie ihre lokalen Aliase ein, editieren Sie die Benutzertabelle, fügen Sie einen Testbenutzer hinzu und ändern Sie die Transporttabelle, um Informationen Ihrer Domains hinzuzfügen. Die vorgegeben Einträge sollten ausreichend sein, um zu erkennen welche Werte wo eingetragen werden müssen. Stellen Sie sicher, dass die eingetragenen Informationen fehlerfrei sind. Das Heimatverzeichnis lokaler Benutzer sollte existieren und die korrekte uid/gid haben. Die Mailverzeichnisse sollten automatisch von Postfix erstellt werden, wenn der Benutzer seine erste Email erhält. Es ist also eine gute Idee jedem Benutzer eine "Willkommens-Email" zu schicken, nachdem Sie den Account angelegt haben. Das stellt sicher, dass ein .maildir angelegt wird.

10.  MySQL-Authentifikation und vhosts konfigurieren

Als nächstes werden wir die Authentifizierung so konfigurieren, dass die mailsql Datenbank in courier-imap und Postfix verwendet wird. In allen folgenden Beispielen müssen Sie $password durch das Passwort des mailsql Mysql-Benutzers ersetzen.

Befehlsauflistung 10.1: Authentifikation konfigurieren

# nano -w /etc/courier/authlib/authdaemonrc
authmodulelist="authmysql authpam"

# nano -w /etc/courier/authlib/authmysqlrc
MYSQL_SERVER            localhost
MYSQL_USERNAME       mailsql
MYSQL_PASSWORD      $password
MYSQL_DATABASE          mailsql
MYSQL_USER_TABLE        users
(Stellen Sie sicher dass der Wert auskommentiert ist. Wir verwenden keine Verschlüsselung.)
#MYSQL_CRYPT_PWFIELD    crypt
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       email
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir

# /etc/init.d/courier-authlib restart
# /etc/init.d/saslauthd restart

Wir sind fast fertig. Nun setzten wir die restlichen Einstellungen, die Postfix für die Zusammenarbeit mit der Datenbank benötigt, auf. Denken Sie daran für jeden Wert Ihren eigenen Benutzer, User-IT, Passwort, Alias, Email-Adresse usw. einzusetzen.

Befehlsauflistung 10.2: /etc/postfix/mysql-aliases.cf

# nano -w /etc/postfix/mysql-aliases.cf
# mysql-aliases.cf

user         = mailsql
password     = $password
dbname       = mailsql
table        = alias
select_field = destination
where_field  = alias
hosts        = unix:/var/run/mysqld/mysqld.sock

Befehlsauflistung 10.3: /etc/postfix/mysql-relocated.cf

# nano -w /etc/postfix/mysql-relocated.cf
# mysql-relocated.cf

user         = mailsql
password     = $password
dbname       = mailsql
table        = relocated
select_field = destination
where_field  = email
hosts        = unix:/var/run/mysqld/mysqld.sock

Befehlsauflistung 10.4: /etc/postfix/mysql-transport.cf (optional)

# nano -w /etc/postfix/mysql-transport.cf
# mysql-transport.cf

user         = mailsql
password     = $password
dbname       = mailsql
table        = transport
select_field = destination
where_field  = domain
hosts        = unix:/var/run/mysqld/mysqld.sock

Befehlsauflistung 10.5: /etc/postfix/mysql-virtual-gid.cf (optional)

# nano -w /etc/postfix/mysql-virtual-gid.cf
# myql-virtual-gid.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = gid
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Befehlsauflistung 10.6: /etc/postfix/mysql-virtual-maps.cf

# nano -w /etc/postfix/mysql-virtual-maps.cf
# myql-virtual-maps.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = maildir
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Befehlsauflistung 10.7: /etc/postfix/mysql-virtual-uid.cf (optional)

# nano -w /etc/postfix/mysql-virtual-uid.cf
# mysql-virtual-uid.cf

user            = mailsql
password        = $password
dbname          = mailsql
table           = users
select_field    = uid
where_field     = email
additional_conditions = and postfix = 'y'
hosts           = unix:/var/run/mysqld/mysqld.sock

Befehlsauflistung 10.8: /etc/postfix/mysql-virtual.cf

# nano -w /etc/postfix/mysql-virtual.cf
# mysql-virtual.cf

user         = mailsql
password     = $password
dbname       = mailsql
table        = virtual
select_field = destination
where_field  = email
hosts        = unix:/var/run/mysqld/mysqld.sock

Editieren Sie nochmals die /etc/postfix/main.cf.

Befehlsauflistung 10.9: /etc/postfix/main.cf

# nano -w /etc/postfix/main.cf
(Stellen Sie sicher, dass keine weiteren alias_maps Definitionen
vorhanden sind)
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf

local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname

virtual_transport = virtual
(Die von mydestination aufgelisteten Domains sollten nicht im Parameter
virtual_mailbox_domains auftauchen)
virtual_mailbox_domains = virt-domain.com, $other-virtual-domain.com

virtual_minimum_uid = 1000
(Ersetzen Sie $vmail-gid durch die GID der Gruppe vmail)
virtual_gid_maps = static:$vmail-gid
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
(Ersetzen Sie $vmail-uid durch die UID des Benutzers vmail)
virtual_uid_maps = static:$vmail-uid
virtual_mailbox_base = /
#virtual_mailbox_limit =

Aus Sicherheitsgründen sollten Sie die Berechtigungen der /etc/mail/mysql-*.cf Dateien ändern:

Befehlsauflistung 10.10: Ändern der Berechtigungen

# chmod 640 /etc/postfix/mysql-*.cf
# chgrp postfix /etc/postfix/mysql-*.cf

Seit Postfix 2.0.x gab es einige nennenswerte Änderungen, verglichen mit der 1.1.x Version. Genauer gesagt sind die Transport, virtual-gid und virtual-id Tabellen nicht länger notwendig. Die Tabellen sind weiterhin enthalten, falls Sie sie benutzen wollen.

Notiz: Es empfiehlt sich die VIRTUAL_README, welche zur Postfix Dokumentation gehört, zu lesen, falls Sie mehr Informationen dazu benötigen.

Befehlsauflistung 10.11: Postfix-Tabellen neu laden

# postfix reload

Jetzt sollten Sie einen funktionierenden Mailhost haben. Benutzer sollten sich nun mit ihrer kompletten E-Mail-Adresse, über die SQL Tabelle, durch POP3, IMAP und SMTP authentifizieren können. Sie sollten an dieser Stelle überprüfen ob alles richtig arbeitet. Wenn Probleme auftreten dann sollten Sie den Troubleshooting Abschnitt am Ende des Howtos lesen.

11.  Squirrelmail

Befehlsauflistung 11.1: Squirrelmail installieren

# emerge squirrelmail
(Richten Sie squirrelmail am localhost so ein, dass es mit http://localhost/mail erreicht werden kann)
(Setzen Sie Ihre Versionnummer anstatt 1.4.3a-r2 ein.)

# webappconfig -- localhost --mail squirrelmail 1.4.3a-r2
# cd /var/www/localhost/htdocs/mail/config
# perl ./conf.pl
(Ändern Sie die Organisation, Server und Ordner Einstellungen für
squirrelmail. Jetzt sollten Sie sich in squirrelmail mit Ihrer kompletten
E-Mail-Adresse einloggen und das Setup benutzen können.)

12.  Mailman

Der letzte Schritt: mailman. Die neue Version hat einen sehr guten Virtual Domain Support. Damit das Paket richtig mit virtuellen Domains zusammenarbeitet, müssen wir einiges editieren. Sie sollten die mailman Dokumentation und die README.POSTFIX.gz lesen damit sie verstehen was hier geschieht.

Befehlsauflistung 12.1: Mailman installieren

# emerge mailman

Befehlsauflistung 12.2: Standardwerte einstellen: Mailman/Defaults.py

#  nano -w /usr/local/mailman/Mailman/Defaults.py
(Setzen Sie die Werte für Ihre Standarddomain, virtuelle Domains werden als nächstes gesetzt.)
DEFAULT_EMAIL_HOST = 'domain.com'
DEFAULT_URL_HOST = 'www.domain.com'

Befehlsauflistung 12.3: mailman config: mm_cfg.py

# nano -w /usr/local/mailman/Mailman/mm_cfg.py
MTA = "Postfix"
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['virt-domain.com', 'virt.domain2.com']
add_virtualhost('www.virt.domain.com', 'virt.domain.com')
add_virtualhost('www.virt.domain2.com', 'virt.domain2.com')
(Diese Werte sind für Ihre virtuellen Domains notwendig, damit mailman funktionieren kann.)

Befehlsauflistung 12.4: Letzter Schritt

(Wenn Sie damit fertig sind, tragen Sie Ihre erste Liste ein.)

# su mailman
# cd ~
# ./bin/newlist --urlhost='www.virt-domain.com'
--emailhost='virt-domain.com' test
Enter the email of the person running the list: your@email.address
Initial test password:
Hit enter to continue with test owner notification..
(Listen für virtuelle Domains können auch in der Listenform
list@domain.com eingetragen werden.)
# ./bin/genaliases
(Nun da Ihre aliase generiert wurden,
stellen Sie sicher dass sie erfolgreich eingetragen wurden.)

# nano -w data/aliases
# STANZA START: test
# CREATED:
test:             "|/usr/local/mailman/mail/mailman post test"
test-admin:       "|/usr/local/mailman/mail/mailman admin test"
test-bounces:     "|/usr/local/mailman/mail/mailman bounces test"
test-confirm:     "|/usr/local/mailman/mail/mailman confirm test"
test-join:        "|/usr/local/mailman/mail/mailman join test"
test-leave:       "|/usr/local/mailman/mail/mailman leave test"
test-owner:       "|/usr/local/mailman/mail/mailman owner test"
test-request:     "|/usr/local/mailman/mail/mailman request test"
test-subscribe:   "|/usr/local/mailman/mail/mailman subscribe test"
test-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe test"
# STANZA END: test

(Erstellen Sie die benötigte mailman Liste)
# ./bin/newlist mailman
# ./bin/genaliases

(Zum Benutzer root zurückkehren)
# exit

# /etc/init.d/mailman start
# rc-update add mailman default
(Um mailmain jetzt gleich und bei jedem Neustart zu starten.)

Befehlsauflistung 12.5: mailman alias U für postfix

# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
(Lesen Sie README.POSTFIX.gz für Details.)

alias_maps     =
  hash:/usr/local/mailman/data/aliases,
  mysql:/etc/postfix/mysql-aliases.cf

virtual_alias_maps =
  hash:/usr/local/layman/data/virtual-mailman,
  mysql:/etc/postfix/mysql-virtual.cf
(Hiermit bekommen Sie mailman alias Dateiunterstützung für postfix
Sie können hier auch selbstverständlich die MySQL Tabellen eintragen,
aber ich hasse es das von Hand zu tun. Wenn Sie keine virtuellen Domains
benutzen können Probleme auftreten.)

Sie sollten jetzt in der Lage sein Mailinglisten für jede Ihrer Domains auf dem Server einzurichten. Sie müssen alle Befehle hierfür als mailman Benutzer ausführen (su mailman). Andernfalls werden die Rechte falsch sein und Sie werden sie korrigieren müssen. Lesen Sie die mailman Dokumentation um mehr über das Erstellen und Verwalten von Listen zur erfahren.

13.  Inhalte filtern und Anti-Virus

Falls Sie Inhalte filtern oder Anti-Virus möchten, bitte lesen sie den Mailfilter Gateway Leitfaden.

14.  Die Arbeiten abschließen

Wenn Sie mit all dem fertig sind schalten Sie den verbose Modus in /etc/postfix/master.cf ab. Sie werden sehr wahrscheinlich auch die Dienste in die Startup-Routine einbinden wollen, damit sie sofort nach einem Neustart wieder verfügbar sind. Fügen Sie die gewünschten Dienste hinzu: apache, mysql, saslauthd, postfix, courier-imapd, courier-imapd-ssl, courier-pop3d und courier-pop3d-ssl können, je nachdem welche Dienste Sie zur Verfügung stellen möchten, hinzugefügt werden. Der Author hat hier alle aktiviert.

Befehlsauflistung 14.1: Abschließende Arbeiten

# postfix reload
# rc-update add $dienst default

Viel Spaß!

15.  Troubleshooting

Einführung

Troubleshooting: Dies ist eine kurze Fehlersucheanleitung. Sie deckt nicht alles ab aber hilft Ihnen die Probleme zu lokalisieren. Bei solch einem komplexen System wie diesem, ist es unumgänglich dass Sie sich auf die nicht funktionierende Komponente beschränken können. Der Author startet bei der Basis des Systems und schließt dabei Komponente aus bis er den Fehler gefunden hat.

Schritt 1: Überprüfen Sie Ihre Konfigurationsdateien.

Tippfehler sind gefährlich, besonders wenn man mit Authentifizierungssystemen arbeitet. Suchen Sie in den Konfigurationsdateien und in der Datenbank nach Tippfehlern. Sie können so viel suchen wie Sie wollen - wenn die richtigen Informationen ins System nicht übertragen werden, wird es nicht funktionieren. Wenn Sie eine Konfigurationsdatei editiert haben, müssen Sie den Dienst neu starten, damit die Änderungen übernommen werden.

Befehlsauflistung 15.1: Einen Dienst neu starten

# /etc/init.d/dienst restart

Schritt 2: Sind die benötigten Dienste gestartet?

Wenn sie nicht gestartet sind dann starten Sie die Dienste. Es ist sehr schwer einen Dienst zu reparieren, der nicht gestartet ist. Manchmal kann ein Dienst gestartet sein, aber trotzdem den Dienst komplett verweigern. Manchmal wenn schlechte Einstellungen verwendet werden oder schlechte Übertragungen in den Mailkomponenten gelangen wird der Dienst sich aufhängen und seinen Port belegen, damit kein anderer Prozess darauf zugreifen kann. Oft können Sie das mit netstat feststellen. Wenn Sie eine Zeit lang gewartet haben können Sie den Server auch einfach rebooten. Das wird alle hängenden Dienste bereinigen. So können Sie es frisch von vorne nochmal versuchen.

Befehlsauflistung 15.2: Status eines Dienstes überprüfen

# /etc/init.d/$dienst status
# netstat -a | grep $dienst (oder $port)

Schritt 3: Benutzen alle Dienste die aktuellen Konfigurationsdateien?

Wenn Sie vor kurzem Änderungen an einer Konfigurationsdatei vorgenommen haben, starten sie den Dienst neu, um sicherzugehen dass er alle Einstellungen übernimmt. Einige Dienste wie Postfix können Ihnen die verwendeten Einstellungen anzeigen.

Befehlsauflistung 15.3: Einige Dienste können ihre momentane Konfiguration ausgeben

# apache2ctl fullstatus (benötigt installiertes lynx)
# apache2ctl configtest (überprüft Korrektheit der Konfiguration)
# postconf -n (sagt Ihnen exakt, welche Parameter postfix verwendet)
# /etc/init.d/$dienst restart

Schritt 4: Kontrollieren Sie die Protokolldateien.

Protokolldateien sind Ihnen freundlich gesinnt. Der Author überprüft im nächsten Schritt immer die Protokolldateien. Oft ist es hilfreich wenn man die fehlgeschlagenen Operationen nochmal wiederholt. Dadurch hat man die Fehlermeldung am Ende (oder Anfang, je nach Protokollierer) der Protokolldatei anstatt irgendwo in der Mitte. Suchen Sie nach einer Information in der Protokolldatei, die Ihnen helfen könnte eine Diagnose zu erstellen oder den fehlerhaften Komponenten zu finden.

Befehlsauflistung 15.4: Protokolldateien prüfen

# kill -USR1 `ps -C metalog -o pid=`(metalog Puffer ausschalten)
# nano -w /var/log/mail/current
# cat /var/log/mysql/mysql.log
# tail /var/log/apache2/error_log

Den depug_peer Parameter in der main.cf werden Sie wahrscheinlich auch als nützlich empfinden können. Dadurch wird mehr geloggt als im Verbose Mode.

Befehlsauflistung 15.5: debug_peer Unterstützung aktivieren

# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.domain.name
(Kommentieren Sie auch einen vorgeschlagenen Debuggerbefehl aus.)

Schritt 5: Überprüfen Sie den Dienst

Dass SMTP, IMAP und POP3 zu Telnet Sitzungen antworten haben wir schon gesehen als wir die Postfixkonfiguration überprüft hatten. Manchmal ist es hilfreich wenn man eine Telnet Sitzung zu dem Dienst öffnet und nachsieht was geschieht.

Befehlsauflistung 15.6: Dienste durch Telnet verbinden

# telnet localhost $port
(SMTP ist 25, IMAP ist 143, POP3 ist 110. Sie sollten wenigstens eine "OK"-Zeile sehen.
Dadurch sehen Sie dass der Dienst in diesem Moment läuft und auf Anfragen antwortet.)

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.

Schritt 6: Manchmal bekommen Sie nur durch schwere Geschütze die gewünschte Information: strace

Sie sollten strace so oder so installiert haben. Es ist ein unbezahlbares debugging Tool. Mit strace können Sie Prozesse von der Kommandozeile aus starten und alle Systemaufrufe kontrollieren. strace gibt oft eine riesige Menge von Daten aus. Sie werden es entweder in Echtzeit kontrollieren oder die Ausgabe in eine Datei weiterleiten wollen.

Befehlsauflistung 15.7: Strace verwenden

# emerge strace
# strace $command
# strace -p `ps -C $dienst -o pid=`

Schritt 7: Nachforschungen

Wenn Sie den Fehler gefunden und behoben haben ist das gut. Wenn nicht werden Sie wohl im Netz nach Informationen suchen müssen, die Ihnen weiterhelfen. Hier ist eine Liste von Seiten auf denen Sie überprüfen können ob Ihr Problem vielleicht schon einmal zuvor gelöst wurde. Es gibt dort auch eine wirklich gute smtp-auth Installationsanleitung, die einige nette Ideen für die Fehlersuchen beinhalten.



Drucken

Seite aktualisiert 28. September 2008

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieses Dokument zeigt wie man ein virtuelles Mailhosting System, basierend auf postfix, mysql courier-imapd und cyrus-sasl erstellt.

Ken Nowack
Autor

Ezra Gorman
Autor

Zack Gilburd
Bearbeiter

Scygro
Bearbeiter

Sven Vermeulen
Bearbeiter

Sebastian Stumpf
Übersetzer

Tobias Matzat
Übersetzer

Sophie Lee
Übersetzer

Tobias Heinlein
Übersetzer

Jan Hendrik Grahl
Korrektor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.