Leitfaden zum virtuellen Mailhosting System mit Postfix
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)
#
==========================================================================
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
# /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
# nano -w pop3d.cnf
# nano -w imapd.cnf
# 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
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.
# 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
# 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
|
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 =
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
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
# 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
# /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
# 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 |
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
# cp 00_default_vhost.conf ssl-vhost.conf/
# nano -w ssl-vhost.conf
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
# /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
$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
#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
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
virtual_mailbox_domains = virt-domain.com, $other-virtual-domain.com
virtual_minimum_uid = 1000
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
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
# webappconfig -- localhost --mail squirrelmail 1.4.3a-r2
# cd /var/www/localhost/htdocs/mail/config
# perl ./conf.pl
|
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
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')
|
Befehlsauflistung 12.4: Letzter Schritt |
# 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..
# ./bin/genaliases
# 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
# ./bin/newlist mailman
# ./bin/genaliases
# exit
# /etc/init.d/mailman start
# rc-update add mailman default
|
Befehlsauflistung 12.5: mailman alias U für postfix |
# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
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
|
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
|
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
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.
|