\\

======Installation eines kompletten Mailservers====== ==Die einzelnen Komponenten== * Das komplette System basiert auf unterschiedlichen Software-Komponenten, die so miteinander bekannt gemacht werden, dass das komplette System problemlos funktioniert. Folgende Komponenten übernehmen Verantwortung: * Postfix: Der MTA (Mail Transfer Agent - also der, der eMail vom Absender zum Empfänger transportiert) empfängt die eMails über SMTP (Simple Mail Transfer Protocol) und speichert diese eMails dann an unterschiedlichen Plätzen auf Ihrer Festplatte. * MySQL: Der Datenbankserver, der Informationen über Domänen, Mail-Weiterleitungen, Benutzer und Paßwörter speichert und hierüber das Verhalten von Postfix steuert. * Courier: Courier ist ebenso wie Postfix ein eigenständiger Mailserver - wir werden allerdings nur seine POP3 und IMAP Funktionen verwenden, um damit auf die Postfächer zuzugreifen. * SASL (eine Bibliothek von cyrus): Anhand dieser Bibliotheken machen wir es möglich, dass Benutzer, die sich nicht innerhalb eines vertrauenswürdigen Netzwerkes befinden, sich trotzdem bei Postfix authentifizieren können. So können Sie auch von außerhalb - also zum Beispiel von einem Einwahlrechner - eMails versenden. Das ist deshalb nötig, weil Postfix aus Sicherheitsgründen nur aus einem bestimmten Bereich des Netzwerkes ohne weiteres eMails entgegen nehmen wird. * AMaViS: "A Mail Virus Scanner" - arbeitet als Filter in Postfix und ermöglicht die Untersuchung eingehender eMails auf SPAM und Viren. * phpmyadmin: Ein Webinterface zur Verwaltung von MySQL-Datenbanken - etwas komfortabler als die Verwendung von 'mysql' als Kommandozeileninterface. ==Was sind Zuordnungen?== Kurz gesagt wird bei einer Zuordnung ("mapping") ein Wert einem anderen zugewiesen. Sie kennen wahrscheinlich die Datei /etc/aliases, in der eMail-Weiterleitungen für Ihre Domäne eingetragen sind. Eine klassische Zeile sieht so aus: <file> postmaster: root </file> Hiermit sagen wir Postfix, dass alle eMails an postmaster@ihre-domain.tld an root@ihre-domain.tld weitergeleitet werden sollen. Die linke Seite - also Postmaster - wird normalerweise LHS (kommt aus dem englischen, da steht das für "left-hand side") und die rechte Seite - also root - konsequenterweise RHS (wie "right-hand side") genannt. Merken Sie sich das - es sind häufig verwendete Abkürzungen wenn über Zuordnungen gesprochen wird. Achtung: Normalerweise haben Zuordnungstabellendateien (nettes Wort, oder?) keine ":" auf der linken Seite - aber die /etc/aliases ist ein Spezialfall, sowohl aus historischen als auch aus Kompatibilitätsgründen. Außerdem ist diese Datei auch aus einem anderen Grund noch ein Spezialfall: er wird nicht wie üblich mit postmap, sondern mit newaliases übersetzt. Das ist also eigentlich ein ziemlich unpraktisches Beispiel - aber es sollte trotzdem verdeutlichen, was gemeint ist ;-). Wenn Sie also Postfix einfach mal so aus der Hüfte aufsetzen, werden sie mit Sicherheit mit Dateien wie oben beschrieben anfangen. Sie schreiben die Zuordnungen in die Datei und rufen dann postmap ihre-datei für ihre-datei auf. Das erzeugt eine Hash-Datei names "ihre-datei.db" für Ihre Datei, die Sie dann aus Postfix als Zuordnung mit hash:dateiname benutzen können. Und wahrscheinlich haben Sie als aufmerksamer Leser auch schon bemerkt, dass die Standard alias-Tabelle mit alias_maps = "hash:/etc/aliases" eingebunden wird. hash: steht übrigens für diese spezielle Methode auf Dateien diesen Formates zuzugreifen. In meiner Konfiguration ersetze ich Textdateien durch MySQL-Tabellen - das ermöglicht einen flexibleren Umgang mit den Daten. Da nun aber Datenbanktabellen im allgemeinen mehr als nur zwei Spalten enthalten, müssen wir Postfix irgendwie verraten, welche Spalte die LHS und welche die RHS ist. Das können wir wie folgt in einfachen Textdateien erreichen: <file> user = provider_admin password = DomAKg07 dbname = provider table = virtual_mailboxes select_field = mailbox where_field = email hosts = 127.0.0.1 </file> Wenn wir diese Datei jetzt als "/etc/postfix/mysql_virtual_mailboxes.cf" abspeichern, können wir also eine Zuordnung der Form "virtual_mailbox_maps=mysql:/etc/postfix/mysql_virtual_mailboxes.cf" verwenden. Das "where_field" entspricht in diesem Fall der LHS, und das "select_field" der RHS unserer Zuordnung - in diesem Fall bedeutet das eine Zuordnung der Spalte email zu der Spalte mailbox. Das Feld user beinhaltent den Benutzernamen für die Datenbank dbname, die mit dem in password definierten Paßwort auf dem Rechner hosts befragt wird. ==Wie funktionieren virtuelle Domänen?== Zunächst möchte ich ein paar generelle Worte zu Virtuellen Domänen in Postfix sagen (mit Postfix 1.x - ein wenig veraltet - funktionieren virtuele Domänen noch etwas anders), denn eine fehlerhafte Konfiguration wird Sie außer Haaren auch noch Zeit kosten. Es gibt also zwei unterschiedliche Formen von Domänen: * Lokale Domänen Alle Domänen in mydestination in Ihrer main.cf werden als lokale Domänen behandelt. Ihre Standard-Domäne (höchstwahrscheinlich in /etc/defaultdomain) ist im Normalfall Ihre lokale Domäne, und eMails an lokale Domänen werden an Systembenutzer zugestellt - das sind die, die in /etc/passwd stehen. Das heißt aber auch, dass diese eMail nach /var/mail ausgeliefert werden. * Virtuelle Domänen Ihr Mail-Server empfängt eMails für weitere Domänen - virtuelle Domänen genannt. Virtuelle Domänen sind sehr flexibel, da man keinen Systembenutzer für jeden einzelnen eMail-Benutzer benötigt - daraus folgt, dass Ihr System eine Unmenge von eMail-Benutzern vollkommen unproblematisch verwalten kann. Für diesen Zweck verwende ich in dieser Anleitung SQL-Zuordnungen. Da uns das aber noch nicht komplex genug ist, gibt es zwei unterschiedlich Formen von Virtuellen Domänen: * Virtual Alias Domains - (virtuelle Alias-Domänen) Eine virtuelle Alias-Domäne könnte man verwenden, um eMails von einer bestimmten eMail-Adresse an eine andere eMail-Adresse weiterzuleiten. Der Nachteil ist, dass man damit keine eMails so empfangen kann, dass sie an einem bestimmten Ort auf der Festplatte gespeichert werden. Daher werde ich das hier nicht weiter verwenden. Man kann diese Funktion auch über virtual_alias_maps erreichen, die als allgemeine Tabellen für eMail-Weiterleitungen gedacht sind - hier können wir sogar eMails für lokale Domänen umleiten. * Virtual Mailbox Domains (virtuelle Mailbox-Domänen) Eine virtuelle Mailbox-Domäne ermöglicht es, eMails für Adressen einer bestimmten Domäne zu empfangen und auf der Festplatte abzuspeichern. Auch hier ist es uns wieder möglich, anhand von Zuordnungen in virtual_alias_maps eine eMail an eine andere eMail-Adresse in einer beliebigen Domäne weiterzuleiten. Das Ganze ist lediglich ein Parameter mit dem wir Postfix verraten, wie der Großteil der Adressen für diese Domäne gehandhabt werden soll. Übrigens wird die Zuordnungstabelle virtual_mailbox_maps dafür genutzt, festzustellen, wo auf der Festplatte eine eMail abgespeichert werden soll. Und jetzt noch was ganz wichtiges: eine Domäne ist entweder eine lokale Domäne virtuelle Alias-Domäne oder eine virtuelle Mailbox-Domäne. Wenn eine Domäne zur zweiten Kategorie gehört, dann können sie eMails an diese Domäne nie auf ihrem Server empfangen. Wenn Sie allerdings virtual_alias_maps verwenden, können Sie Aliase und Weiterleitungen für beide Arten von virtuellen Domänen benutzen. Wir schlußfolgern also: virtual_mailbox_domains sind normalerweise die bessere - weil flexiblere - Wahl. <file> Eine Domäne kann nur entweder virtuell oder lokal sein - beides gleichzeitig geht nicht! Wenn also auch die Standard-Domäne virtuell sein soll, dann löschen Sie diese aus mydestination und lassen Sie diese Einstellung entweder leer oder setzen Sie höchstens auf "mydestination=localhost". Emails an Adressen der Form root@localhost werden dann also an root auf diesem System zugestellt. </file> Außerdem empfehle ich Ihnen, bei Gelegenheit auch die von Postfix zur Verfügung gestellte Dokumentation zu virtuellen Domänen zu lesen - sie finden Sie in /usr/share/doc/postfix/VIRTUAL_README.gz. ==Schritt 1: Installation der benötigten Debian Pakete== Pakete, die Sie auf jeden Fall benötigen: * postfix (In debconf wählen Sie bitte "Nur lokale Zustellung" aus) * postfix-mysql * postfix-doc Wenn Sie den MySQL-Server auf dem selben Rechner installieren möchten: * mysql-server (für MySQL 3.x/4.0) oder mysql-server-4.1 (für MySQL4.1) Für POP3- und IMAP-Zugriff brauchen Sie außerdem: * courier-authdaemon * courier-authmysql * courier-pop (für unverschlüsselten POP3 Zugriff) * courier-pop-ssl (für SSL-verschlüsselten POP3 Zugriff) * courier-imap (für unverschlüsselten IMAP Zugriff) * courier-imap-ssl (für SSL-verschlüsselten IMAP Zugriff) Wenn Sie außerdem noch SMTP-Auth für Dial-Up Benutzer einrichten möchten: * postfix-tls (für verschlüsselte SMTP-Authentifizierung) * libsasl2 (die Cyrus SASL Bibliothek) * libsasl2-modules (die Mechanismen für die SASL Bibliothek) * libsasl2-modules-sql * openssl (um ein Zertifikat zu erstellen) Für die Untersuchung eingehender eMail auf SPAM und Viren: * amavisd-new * spamassassin * clamav * clamav-daemon * zoo * unzip * unarj * lha (in non-free!) Und last but not least der Webmail-Zugriff: * squirrelmail Nicht unbedingt nötig, aber sehr nützlich: * phpmyadmin (Web-Interface für die bequeme Administration von MySQL-Datenbanken) \\ ==Schritt 2: Anlegen der Datenbank== Für die benötigten Zuordnungstabellen müssen wir in MySQL eine Datenbank anlegen. Wenn Sie Erfahrung im Umgang mit MySQL haben können Sie das natürlich von der Kommandozeile aus mit dem mysql-Befehl erledigen. Ich würde Ihnen allerdings empfehlen, hierfür phpmyadmin zu benutzen. Die Entscheidung überlasse ich Ihnen. Tip: wenn der MySQL-Server zum ersten Mal gestartet wird, können Sie auf die Datenbanken als Benutzer 'root' ohne Paßwort zugreifen. Sie sollten zunächst ein Paßwort für diesen Benutzer anlegen: <file> mysqladmin -u root password Ihr-mysql-paßwort </file> Legen Sie zunächst eine Datenbank an. Ich nenne sie 'provider', da ich damit später noch mehr machen möchte, als nur eMail-Konten darin zu speichern (was allerdings den Rahmen dieser Einführung definitiv sprengen würde). Sie können das entweder in phpmyadmin oder aber auf der Kommandozeile wie folgt erledigen: <file> mysqladmin -u [username] -p -h [hostname] create provider </file> Sie müssen nun eine neuen Datenbankbenutzer anlegen, der Nur-Lese-Zugriff auf die Datenbank "provider" für Ihre eMail-Daten hat. Öffnen Sie hierfür eine Verbindung zu ihrem MySQL-Server: <file> mysql -u root -p </file> und geben Sie folgendes Kommando ein, sobald Sie den MySQL-Prompt mysql> sehen: grant select on provider.* to provider_admin@localhost identified by 'your-password'; Dadurch wird ein neuer Benutzer namens provider_admin für die Datenbank angelegt, der lediglich die 'SELECT'-Berichtung für die Datenbank provider hat. Ersetzen Sie bitte your-password mit einem Paßwort Ihrer Wahl - automatisch erzeugen können Sie eines mit dem Kommando pwgen -s 16 (Hierzu müssen Sie allerdings das Kommando aptitude install pwgen ausführen. Schlußendlich müssen Sie die Zugriffsberechtigungen noch neu laden: <file> flush privileges; </file> ==Schritt 3: Definition der Tabellen== Jetzt haben Sie zwar eine Datenbank - aber eine leere Datenbank ist ziemlich nutzlos. Also brauchen wir noch Tabellen, damit wir in die Datenbank auch noch reinschreiben können, was wir Postfix später abfragen lassen wollen. Falls Sie das Kommandozeilen-Programm mysql benutzen, starten Sie dieses. Darin öffnen Sie dann mittels USE provider; die Datenbank 'provdier, damit hierin die Tabellen angelegt werden. Domänen Die erste Tabelle, die wir anlegen, wird nicht mehr als eine langweilige Spalte für Domänen beinhalten - genauer gesagt, für jede virtuelle Domäne gibt es eine Zeile in dieser Spalte. <file> CREATE TABLE domains ( domain varchar(50) NOT NULL, PRIMARY KEY (domain) ) TYPE=MyISAM; </file> Mit der Tabelle 'forwardings' können wir eMails für eine bestimmte eMail-Adresse an eine andere eMail-Adresse weiterleiten. Das funktioniert sogar für lokale Domänen. Anlegen können wir die Tabelle mit folgendem SQL-Befehl: <file> CREATE TABLE forwardings ( source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ) TYPE=MyISAM; </file> Benutzer Und schlussendlich noch die Tabelle 'users' - sie enthält Informationen und Paßwörter für den Zugriff auf eMails über POP3 und IMAP. Im Allgemeinen haben die Benutzer die Angewohnheit, die Sicherheit von Passwörtern nicht sehr ernst zu nehmen - zum Leid der Systemadministratoren. Schauen Sie doch einmal unter die Schreibtischunterlage ihres Vorgesetzten - wahrscheinlich finden Sie hier alle seine Paßwörter. Also enthält diese Tabelle exakt zwei Spalten: die eMail-Adresse ('email') und das zugehörige Passwort. Anhand der Spalte 'email' werden wir außerdem bestimmen, wo wir die eMails abspeichern und wie der Benutzername lautet. Hierfür also noch ein letzter SQL-Befehl zum Anlegen dieser Tabelle: <file> CREATE TABLE users ( email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) ) TYPE=MyISAM; </file> Schritt 4: Festlegen der Datenbankzuordnungen Bis hierhin ist ja wohl dann alles soweit gut gegangen - aber da Sie ja aufmerksam sind und auch mitdenken, fragen Sie sich wahrscheinlich, ob Postfix mindestens genauso aufmerksam wie Sie ist, und beobachtet hat, dass es neue Plätze zum Auffinden von Informationen gibt. Ich muß Sie enttäuschen: so schlau ist Postfix leider nicht. Wir müssen es Postfix also noch irgendwie beibringen. Dazu müssen wir in /etc/postfix die folgenden vier Dateien anlegen: [Important] Postfix arbeitet teilweise innerhalb eines chroot-Verzeichnisses. (/var/spool/postfix) und kann daher keine Dateien außerhalb dieses Verzeichnisses lesen. Normalerweise - wenn ein MySQL-Server auf dem gleichen Rechner betrieben wird, wie Postfix - wird man seine Anfragen durch eine sogenannte Socket-Datei an MySQL stellen (/var/run/mysqld/mysqld.sock. Logischerweise kann Postfix das aber nicht. Nun haben Sie zwei Möglichkeiten: * Sie verschieben die Socket-Datei * oder Sie verwenden Netzwerkzugriffe über TCP über das lo-Interface. Letzteres bedeutet aber auch, dass nicht nur Postfix über das Netzwerk mit ihrem MySQL reden kann - was theoretisch ein Sicherheitsloch sein kann, allerdings sind Zugriffe, die nicht von Ihrem eigenen Rechner kommen, nicht möglich. (In der nächsten Version dieses Tutorials wird sich das zu einem cleveren mount-Eintrag für den MySQL-Socket in /etc/fstab ändern.) mysql-virtual_domains.cf Diese einfache Zuordnung von Domänennamen (LHS) zu dem Wort 'virtual' (RHS) wird für 'virtuelle mailbox-Domänen verwendet. In diesem Fall ist eigentlich nur die linke Seite von Bedeutung, allerdings gilt das erst seit Postfix v2.x, im Fall von Postfix v1.x mußte die rechte Seite dieser Zuordnung 'virtual' sein, so dass ich diesen Wert aus mehr oder weniger nostalgischen Gründen beibehalten habe. Für Postfix v2.x ist die rechte Seite dieser Tabelle nicht mehr von Bedeutung - sie können es also meinetwegen auf Erbeer-Bananen-Milch-Shake-gemischt-mit-Tequila-Sunrise setzen, wenn Sie möchten. Legen Sie die Datei so wie Sie sie unten dargestellt sehen an, und ersetzen Sie die '...' mit dem Zugriffspaßwort für die Datenbank. Verwenden sie nicht "localhost" als Servername, da das dazu führen würde, dass Postfix versuchen würde, über den Socket von MySQL auf die Datenbank zuzugreifen. Verwenden Sie anstatt dessen einen Hostnamen oder eine IP-Adresse, wenn der MySQL-Server auf Ihrem Rechner arbeitet, können Sie als IP-Adresse 127.0.0.1 nutzen. <file> user = provider_admin password = ... dbname = provider table = domains select_field = 'virtual' where_field = domain hosts = 127.0.0.1 </file> mysql-virtual_forwardings.cf Die Einträge in dieser Tabelle ('forwardings') verwendet Postfix dafür, eMails für die Adresse in der linken Spalte ('source') an die eMail-Adresse in der rechten Spalte ('destination') weiterzuleiten. Wir verwenden diese Tabelle für die virtual_alias_maps-Zuordnung. <file> user = provider_admin password = ... dbname = provider table = forwardings select_field = destination where_field = source hosts = 127.0.0.1 </file> mysql-virtual_mailboxes.cf In dieser Datei erklären wir Postfix, wo es für die einzelnen eMail-Adressen die eMails ablegen soll. Später werden wir diese Zuordnungen für virtual_mailbox_maps verwenden. Postfix wird sich für eine bestimmte eMail-Adresse ('email' - LHS) die Mailbox ('mailbox' - RHS) aus unserer Tabelle heraussuchen. Wenn Sie an den Eintrag in Mailbox einen / anhängen, wird Postfix die eMail nicht in einer mailbox-Datei ablegen, sondern anstatt dessen ein Verzeichnis für die eMails anlegen - um mehr darüber zu erfahren, sollten Sie sich mit der sogenannten 'Maildir'-Technik beschäftigen. Wichtig ist für uns an dieser Stelle allerdings vor allem, dass wir den / anhängen, da wir Maildirs für Courier IMAP und POP3-Dienste brauchen. <file> user = provider_admin password = ... dbname = provider table = users select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') where_field = email hosts = 127.0.0.1 </file> mysql-virtual_email2email.cf Einer der Fallstricke von virtuellen Domänen sind sogenannte catch-all-Adressen. Im Klartext heißt das: in der Forwarding-Tabelle steht eine Weiterleitung der Form "@domain.com"->"service@domain.com", die dazu führt, dass alle eMails, die an irgendeinen Empfänger dieser Domain geschickt werden, an die eMail-Adresse service@domain.com ausgeliefert werden, wenn wir nur @domain.com, aber nicht alle eMail-Adressen in dieser Domain zuordnen - und das, obwohl die eMail-Adresse in virtual_mailbox_maps aufgelistet ist. Hier ordnen wir alle eMail-Adressen in der users-Tabelle sich selbst zu, um das oben beschriebene Problem zu umgehen. Klingt komisch, ist aber so. :) <file> user = provider_admin password = ... dbname = provider table = users select_field = email where_field = email hosts = 127.0.0.1 </file> Sie müssen unbedingt sicherstellen, dass auf diese Dateien niemand anders als root selbst zugreifen kann. Ansonsten kann jeder Benutzer ihres Systems das Passwort für den Zugriff auf diese Datenbank im Klartext in diesen Dateien lesen. Führen Sie hierzu das Kommando <file> "chmod o= /etc/postfix/mysql-virtual_*.cf" </file> aus. Diese Dateien müssen wir jetzt noch so beackern, daß sie zum einen der Gruppe postfix gehören, und zum anderen müssen wir ein bißchen an den Zugriffsrechten rumbasteln. Also: <file> "chgrp postfix /etc/postfix/mysql-virtual_*.cf" </file> und <file> d u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf". \\ </file> ==Schritt 5: Anlegen eines vmail-Benutzers== Mit dem hier beschriebenen System können Sie eMails für tausende von Benutzern speichern - wahrscheinlich wollen Sie aber nicht allen Benutzer auch eine UID (user ID = Benutzer-ID) zuweisen. Daher empfehle ich Ihnen, einen Benutzer anlegen, der Besitzer aller virtuell angelegten Mailboxen wird. Hierfür müssen Sie lediglich folgendes Kommando in einer shell ausführen: <file> roupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail -m </file> Anmerkung: die Zahl 5000 ist die zu vergebene UID - sie müssen natürlich sicher stellen, dass diese UID noch nicht in Benutzung ist - sollte sie schon vergeben sein, benutzen Sie bitte eine andere UID. ==Schritt 6: Editieren von main.cf== Die Hauptkonfigurationsdatei von Postfix ist /etc/postfix/main.cf. Ich werde hier nur die grundsätzlich notwendigen Einstellungen für virtuelle Domänen beschreiben. Werfen Sie also Ihre alte main.cf nicht weg. Sie werden wahrscheinlich die Konfiguration an anderen Stellen noch anpassen wollen, also kann ich hier keine komplette Konfiguration zur Verfügung stellen. * inet_interfaces = all Debian nutzt hier als Standard loopback-only. Wir wollen ja aber eigentlich mehr im Sinne eines ISPs arbeiten - wir müssen also auch nach außen ein bißchen zuhören - daher sollten wir diesen Parameter auf 'all' setzen, oder einfach gleich ganz weg lassen, denn 'all' ist bei Postfix Standard. * myhostname = ... Stellen Sie sicher, dass sich hier ihr FQDN (Fully Qualified Domain Name) befindet - für genaueres: schauen Sie doch bei Gelegenheit mal auf der Postfix Seite zum Thema 'myhostname' vorbei. * mydestination = ... Tragen Sie hier alle Domänen ein, die lokal zugestellt werden sollen, aber auf keinen Fall virtuelle Domänen. Auch hier gilt wie immer: Postfix stellt zu den Parametern Dokumentation bereit. * sichs wahrscheinlich schon gedacht: es gibt auch hierzu Dokumentation. * virtual_alias_domains = Dieser Parameter wird von uns als nicht gesetzt vorausgesetzt. Wir verwenden virtual alias domains nicht. Wenn Sie die Standardeinstellung belassen haben, sollte dieser Parameter auf virtual_alias_maps eingestellt sein - für Abwärtskompatibilität zu älteren Postfix-Versionen. Und - es wird ja jetzt wohl kaum noch einen überraschen, auch hierzu stellt Postfix wieder Dokumentation bereit. * virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_forwardings.cf mysql:/etc/postfix/mysql-virtual_email2email.cf Dieser Parameter setzt allgemeine Umleitungen von eMail-Adressen. Hier können Sie eine eMail-Adresse an eine andere weiterleiten oder auch alle eMails für eine Domain an eine bestimmter eMail-Adresse weiterleiten. Diese Information werden in der Tabelle 'forwardings' gespeichert. Jede auf der linken Seite der Zuordnung zu findende eMail-Adresse wird umgeschrieben in die Adresse auf der rechten Seite. Wenn Sie auf der rechten Seite mehrere eMail-Adressen eintragen wollen, trennen sie diese durch Kommas. Außerdem verwende ich die mysql-virtual_email2email.cf Zuordnung, um jede Adresse sich selbst zuzuordnen. Das klingt zwar ziemlich blöde, aber wird dringend benötigt wenn Sie Catch-All-Adressen verwenden. Beachten Sie hierzu unter umständen nochmals den Abschnitt the mysql-virtual_email2email mapping file to see what's in that mapping file. See also its definition in the Postfix documentation. * virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf Die Liste der virtuellen Domänen aus der `domains` Tabelle. Ein bißchen mehr hierzu bei Wietse Venema selbst. * virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf Auch dies ist eine wichtige Zuordnung - zugeordnet werden hier eMail-Adressen zu Speicherorten von eMail-Postfächern auf Ihrer Festplatte. Diese Speicherorte sind relativ zu virtual_mailbox_base. Auch hierzu hat Wietse was geschrieben * virtual_mailbox_base = /home/vmail Der Pfad, wo eMail-Postfächer von Benutzern gespeichert werden. Was genau das heißt, kann man bei Postfix nachlesen * virtual_uid_maps = static:5000 Sie sollten Postfix verraten, wem die eMail-Postfächer gehören - die Benutzer ID des Benutzers, dem Sie das zuordnen wollen (steht in /etc/passwd). Setzen Sie es bitte auf die Benutzer-ID von dem Benutzer "vmail", den Sie gerade angelegt haben. Mehr dazu bei Postfix selbst. * virtual_gid_maps = static:5000 Dasselbe nochmals für die Gruppen-ID. Und wie zum Benutzer so auch zu den Gruppen... * smtpd_sasl_auth_enable = yes Hier aktivieren wir die Benutzer-Authentifizierung über SASL. Und die Postfix Dokumentation * broken_sasl_auth_clients = yes Es gibt ein paar etwas seltsame eMail-Programme (manche nennen das auch kaputt), die eine im mindesten veraltete Technik nutzen, um rauszufinden, ob der Server Benutzerauthentifizierung kann - die wollen wir auch glücklich machen. Wer hat was von Outlook gesagt? :) Die Postfix Dokumentation beschäftigt sich allerindgs zumindest mit kaputten eMail-Programmen. * smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination Diese Regeln werden angewendet, wenn eine neue eMail bei ihrem Server ankommt - sie überprüfen, wer über ihren Server überhaupt eMails verschicken darf. permit_mynetworks genehmigt das für alle, die von einem Rechner aus mynetworks eMail einliefern. permit_sasl_authenticated erlaubt das jedem, der sich gegenüber uns authentifiziert hat. Und außerdem darf natürlich jeder, der an relay_domains oder an eine lokale Domäne eine eMail verschicken will, die auch abgeben. Aber lassen wir doch einfach Postfix zum Thema smtp_recipient_restrictions zu Wort kommen. * smtpd_use_tls = yes Authentifizierte SMTP Verbindungen verschlüsseln wir mit SSL - was das heißt, verrät uns die Postfix Dokumentation * smtpd_tls_cert_file = /etc/postfix/smtpd.cert Der Ort, an dem wir unsere SSL Zertifikate ablegen - anlegen werden wir die später noch... Auch fürs Zertifikat gibts der Postfix Dokumentation. * smtpd_tls_key_file = /etc/postfix/smtpd.key Und zu guter Letzt noch der Speicherort des privaten SSL-Schlüssels für TLS. Mehr Infos wie üblich in der Postfix Dokumentation. \\ Mal eben testen Geben Sie in der Shell <file> /etc/init.d/postfix restart und postfix check </file> ein. Sollten keine Warnungen angezeigt werden, sind Sie mit diesem Teil fertig. \\ ==Schritt 7: Wir bringen Postfix SMTP-Auth bei - oder: Postfix lernt SASL== Ihre Benutzer holen eMails via POP3 ab - aber wie versenden Ihre Benutzer eMails? Aus Sicherheitsgründen erlaubt Postfix nur den Benutzern, die in mynetworks definiert wurden, den Versand von eMails. Und normalerweise wird Ihr eMail-Server ansonsten nur eMails für seine eigenen Domänen annehmen. Würden Sie jedem erlauben, über Ihren eMail-Server eMails an jede mögliche eMail-Adresse zu versenden - sie würden damit ein sogenanntes Offenes Relais zur Verfügung stellen, etwas, was von Spammern nur zu gerne benutzt wird, um ihren Müll zu versenden. Also müssen wir uns einen Weg einfallen lassen, Benutzern, die gerade nicht in mynetworks sind, eine Möglichkeit zur Authentifizierung zu geben - sprich: Benutzername und Paßwort anzugeben. Wenn diese Daten korrekt sind, können sie genau wie die Benutzer in mynetworks eMails versenden. Glücklicherweise haben fast alle eMail-Programme die Möglichkeit, das zu nutzen. Die Einrichtung von authentifiziertem SMTP ist ziemlich einfach. Das einzige Hindernis ist die Tatsache, dass Debians Postfix standardmäßig in einem chroot in /var/spool/postfixarbeitet. Wir bringen Postfix bei, SASL/MySQL zu verwenden Wie ich schon einmal sagte, verwendet Postfix die Cyrus SASL Bibliothek für authentifiziertes SMTP. Also müssen wir ihm beibringen, wie er auf die gespeicherten Daten (Benutzernamen und Paßwörter) zugreifen kann. Das ist eine relativ einfache Angelegenheit: Editieren Sie einfach die SASL-Konfigurationsdatei in /etc/postfix/sasl/smtpd.conf: <file> pwcheck_method: auxprop auxprop_plugin: sql mech_list: plain login cram-md5 digest-md5 sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: provider_admin sql_passwd: ... sql_database: provider sql_select: select password from users where email='%u@%r' </file> Sie wissen schon: immer auf die Berechtigungen achten. Hier und jetzt heißt das: chown root:postfix /etc/postfix/sasl/smtpd.conf and chmod u=rw,g=r,o= /etc/postfix/sasl/smtpd.conf. (Sollten Sie mit SASL Probleme haben, schlage ich vor, dass Sie noch die Zeile "log_level: 7" anhängen. Dadurch erhalten Sie in den Logdateien ausführlichere Informationen, die Ihnen vielleicht helfen, die Ursache für die Fehlfunktion zu finden.) TLS zur Verschlüsselung von SMTP-Verbindungen nutzen Ein wichtiger Bestandteil der Konfiguration ist die Verschlüsselung einer SMTP-Sitzung. Wenn Sie diese nicht verschlüsseln, können Benutzername und Passwort außerordentlich unsicher übertragen werden. Es gibt eMail-Programme, die tatsächlich noch Klartext-Authentifizierungsmethoden nutzen. Also nochmal: verschlüsseln Sie SMTP-Verbindungen mit TLS. TLS ist die Abkürzung für "Transport Layer Security" (RFC2246) - kurz gesagt: SSL (Secure Socket Layer) wird für die Verschlüsselung der Verbindungen zwischen mobilem Benutzer und Mail-Server verwendet. Als erstes brauchen Sie natürlich ein SSL-Zertifikat. Sie wollen Ihr Lieblings-Trustcenter aber nicht für ein Zertifikat bezahlen? Benutzen Sie eben ein eigenes Zertifikat. (Kleine Randnotiz: ich frage mich sowieso, wie Geld etwas vertauenswürdiger macht.) Der einzige Nachteil eines eigenen Zertifikats: das eMail-Programm wird Ihre CA (certificate authority) noch nicht kennen und daher den Benutzer warnen. Entweder müssen Ihre Benutzer diese Warnung ignorieren, oder aber das Zertifikat auf ihren Rechnern installieren. (Bei Outlook kann man diese Warnung nicht ignorieren. Sie müssen hier das Zertifikat vorher als vertrauenswürdige CA installiert haben.) Um ein Zertifikat zu erstellen, das zehn Jahre für den Rechnernamen smtpd.domain.tld gültig ist, geben Sie folgenden Befehl ein: <file> openssl req -new -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 \ -nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 3650 -x509 </file> openssl wird Ihnen dann ein paar Fragen zu den Details für Ihr Zertifikat stellen. Eigentlich ist es egal, was Sie eingeben - Sie müssen nur irgendwas eingeben. Mit einer Ausnahme: "Common Name" muss der Rechnername Ihres Mailservers sein. Das sieht zum Beispiel dann so aus: <file> Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Hamburg Locality Name (eg, city) []:Hamburg Organization Name (eg, company) [Internet Widgits Pty Ltd]:workaround.org email services Organizational Unit Name (eg, section) []:Master of Disaster Common Name (eg, YOUR name) []:smtp.domain.tld Email Address []:postmaster@domain.tld </file> Einen kurzen Moment später werden Sie zwei neue Dateien haben: "smtpd.key" (der geheime Schlüssel) und "smtpd.cert" (das Zertifikat). Stellen Sie sicher, dass der Schlüssel nicht für alle Systembenutzer lesbar ist: chmod u=rw,g=r,o= /etc/postfix/smtpd.key und chown root:postfix /etc/postfix/smtpd.key ==Schritt 8: Einrichten von POP3 und IMAP== Einen großen Teil des Einrichtens haben wir jetzt hinter uns. Allerdings wollen wir ja Benutzer glücklich machen - und Benutzer, die ihre Mails nicht lesen können, sind nicht glücklich. Also müssen wir wohl noch POP3 und IMAP einrichten. Als erstes müssen Sie dazu /etc/courier/authdaemonrc editieren - ändern Sie die Option "authmodulelist" in "authmysql". Also etwa so: <file> authmodulelist="authmysql" </file> Außerdem müssen wir natürlich noch verraten, in welchen MySQL-Tabellenfeldern die wichtigen Dinge stehen. Dafür beackern Sie /etc/courier/authmysqlrc wie folgt: <file> MYSQL_SERVER localhost MYSQL_USERNAME provider_admin MYSQL_PASSWORD ... MYSQL_PORT 0 MYSQL_DATABASE provider MYSQL_USER_TABLE users #MYSQL_CRYPT_PWFIELD (comment this out) MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" #MYSQL_NAME_FIELD (comment this out) MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') </file> Und seien Sie hierbei bitte sorgfältig - authmysqlrc ist ein bißchen empfindlich. Am Zeilenende auch bitte keine überflüssigen SPACEs (wenn sie mit vim arbeiten, wird ihnen :%s/\s\+$//g helfen). Dann starten wir den authdaemon noch neu: /etc/init.d/courier-authdaemon restart. Nochmal kurz testen... Versuchen Sie mal, an POP3 ranzukommen: führen Sie telnet localhost pop3 aus. Hier sollten Sie jetzt mit "+OK Hello there." belohnt werden. Voila - jetzt haben Sie glückliche Benutzer. :) eMails können Sie erst dann abholen, wenn mindestens eine eMail an diesen Benutzer gesendet wurde - sonst bekommt der Benutzer irgendwelche kryptischen Fehlermeldungen. Der Trick: schicken Sie neuen Benutzern einfach eine Willkommensnachricht.

Navigation

{{indexmenu>:noswiki#1|js#noswiki navbar nocookie}} {{indexmenu>:noserp#1|js#noserp navbar nocookie}} {{indexmenu>:noswawi#1|js#noswawi navbar nocookie}} {{indexmenu>:nosrewe#1|js#nosrewe navbar nocookie}} {{indexmenu>:nosshop#1|js#nosshop navbar nocookie}} {{indexmenu>:noscms#1|js#noscms navbar nocookie}} {{indexmenu>:nosintern#1|js#nosdienst navbar nocookie2}}

Drucken/exportieren