Installation von MySQL und zusätzlich benötigter Software
Dokumentation ausstehend
Installation von Courier und Saslauthd
Dokumentation ausstehend
MySQL Passwörter einrichten
Dokumentation ausstehend
MySQL Datenbank für Postfix/Courier erstellen
Wir erstellen eine Datenbank mit der Bezeichnung mail:
mysqladmin -u root -p create mail
Als Nächstes begeben wir uns in die MySQL Kommandozeile:
mysql -u root -p
In der MySQL Kommandozeile erstellen wir den Benutzer mail_admin mit dem Passwort xxxxx, der SELECT,INSERT,UPDATE,DELETE Privilegien in der mail Datenbank hat. Mit diesem Benutzer werden sich Postfix und Courier mit der mail Datenbank in Verbindung setzen:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'xxxxx';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'xxxxx';
FLUSH PRIVILEGES;
Immer noch in der MySQL Kommandozeile, erstellen wir die Tabellen, die Postfix und Courier benötigen:
USE mail;
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
quit;
Die domains Tabelle speichert jede virtuelle Domain, für die Postfix E-Mails erhalten sollte (z.B. example.com).
domain
ccf-it.com
Die forwardings Tabelle ist für das Aliasing einer eMail Adresse zur anderen, z.B. eMails für an weiterleiten.
source
destination
info@example.com
sales@example.com
Die users Tabelle speichert alle virtuellen Benutzer (d.h. eMail Adressen, da eMail Adresse und Benutzername identsich sind),
Passwörter (in verschlüsselter Form!) und einen Quota-Wert für jede eMail Box (in diesem Beispiel ist der Standardwert 10485760 Bytes, was 10MB bedeutet).
email
password
quota
service@ccf-it.com
No9.E4skNvGa. (”secret” in encrypted form)
10485760
Die transport Tabelle ist optional, sie ist für fortgeschrittene Benutzer geeignet. Sie erlaubt Mails an einzelne Benutzer,
ganze Domains oder alle Mails an einen anderen Server weiterzuleiten. Zum Beispiel würde
alle eMails für ccf-it.com via smtp Protokoll an den Server mit der IP Adresse 1.2.3.4 weiterleiten (die eckigen Klammern [] bedeuten
“schlage den MX DNS Record nicht nach” (was für IP Adressen Sinn macht…).
Wenn Du stattdessen einen Fully Qualified Domain Name (FQDN) nutzt, verwendest Du die eckigen Klammern nicht.).
Konfiguration von Postfix
Nun müssen wir Postfix mitteilen, wo es alle Informationen in der Datenbank finden kann. Dafür müssen wir sechs Textdateien erstellen.
Du wirst feststellen, dass ich Postfix mitteile, sich mit MySQL auf der IP Adresse 127.0.0.1 anstatt sich mit localhost zu verbinden.
Postfix läuft in einem Chroot Gefängnis und hat keinen Zugriff auf den MySQL Socket welchen er versuchen würde zu verbinden,
wenn ich Postfix mitgeteilt hätte, localhost zu verwenden. Wenn ich 127.0.0.1 verwende, nutzt Postfix den TCP Netzwerkbetrieb
um sich mit MySQL zu verbinden, was auch im Chroot Gefängnis kein Problem darstellt.
Erstellen der sechs Textdateien.
vi /etc/postfix/mysql-virtual_domains.cf
user = mail_admin
password = xxxxx
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_forwardings.cf
user = mail_admin
password = xxxxx
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailboxes.cf
user = mail_admin
password = xxxxx
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_email2email.cf
user = mail_admin
password = xxxxx
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_transports.cf
user = mail_admin
password = xxxxx
dbname = mail
query = SELECT transport FROM transport WHERE domain='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
user = mail_admin
password = xxxxx
dbname = mail
query = SELECT quota FROM users WHERE email='%s'
hosts = 127.0.0.1
Generating a 2048 bit RSA private key
.+++
........................................................+++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NRW
Locality Name (eg, city) []:Lichtenau
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Reinhold Flecke CCF
Organizational Unit Name (eg, section) []:Husen
Common Name (eg, YOUR name) []:Reinhold Flecke
Email Address []:rf@ccf-consulting.de
Ändere dann die Berechtigungen des smtpd.keys:
chmod o= /etc/postfix/smtpd.key
Konfiguration von Saslauthd
Bearbeite /etc/sasl2/smtpd.conf.
vi /etc/sasl2/smtpd.conf
So sollte das file aussehen:
# all parameters are documented into:
# /usr/share/doc/cyrus-sasl/options.html
# The mech_list parameters list the sasl mechanisms to use,
# default being all mechs found.
#mech_list: plain login
# To authenticate using the separate saslauthd daemon, (e.g. for
# system or ldap users). Also see /etc/sysconfig/saslauthd.
#pwcheck_method: saslauthd
#saslauthd_path: /var/lib/sasl2/mux
# To authenticate against users stored in sasldb.
#pwcheck_method: auxprop
#auxprop_plugin: sasldb
#sasldb_path: /var/lib/sasl2/sasl.db
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/lib/authdaemon/socket
Startup Links für Postfix erstellen und Postfix, saslauthd und courier-authdaemon starten:
Bearbeite dann /etc/courier/authmysqlrc. Es sollte ganz genau so aussehen (Achtung: vergewissere Dich, dass Du die korrekten Datenbank Angaben eingibst):
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
vi /etc/courier/authmysqlrc
kannst Du sehen, ob Dein POP3 Server richtig funktioniert. Er sollte +OK Hello there. zurückgeben (tippe quit um wieder zur Linux Kommandozeile zu gelangen):
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
quit
+OK Better luck next time.
Connection closed by foreign host.
Installation von Amavisd-new, ))SpamAssassinund?ClamAV((
Um amavisd-new, spamassassin und clamav zu installieren, führe folgenden Befehl aus:
Damit werden die Rulesets jeden zweiten Tag um 2:35 Uhr aktualisiert.
Quota Überschreitungsmeldung
Wenn Du Meldungen bezüglich aller E-Mail Konten erhalten möchtest, die über Quota sind, dann führe Folgendes aus:
cd /usr/local/sbin/
wget http://puuhis.net/vhcs/quota.txt
mv quota.txt quota_notify
chmod 755 quota_notify
Öffne /usr/local/sbin/quota_notify und bearbeite die Variablen zu Beginn. Weiter unten in der Datei (gegen Ende) gibt es zwei Zeilen, denen Du ein % Zeichen anhängen solltest:
vi /usr/local/sbin/quota_notify
[...]
my $POSTFIX_CF = "/etc/postfix/main.cf";
my $MAILPROG = "/usr/sbin/sendmail -t";
my $WARNPERCENT = 80;
my @POSTMASTERS = ('service@ccf-consulting.de');
my $CONAME = 'Reinhold Flecke CCF';
my $COADDR = 'rf@ccf-consulting.de';
my $SUADDR = 'rf@ccf-consulting.de';
my $MAIL_REPORT = 1;
my $MAIL_WARNING = 1;
[...]
print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.n";
[...]
print "Your mailbox: $luser is $lusers{$luser}% full.nn";
[...]
Die forwardings Tabelle könnte folgende Einträge haben:
source
destination
Beschreibung
info@example.com
sales@example.com
Redirects emails for to
@example.com
thomas@example.com
Creates a Catch All account for . All emails to example.com will arrive at , except those that exist in the users table (i.e., if exists in the users table, mails to will still arrive at ).
@example.com
@otherdomain.de
This redirects all emails to example.com to the same user at otherdomain.de. E.g., emails to will be forwarded to .
info@example.com
sales@example.com billing@otherdomain.de
Forward emails for to two or more email addresses. All listed email addresses under destination receive a copy of the email.
Transport Tabelle füllen
Die transport Tabelle könnte folgende Einträge haben:
domain
transport
Beschreibung
example.com
:
Delivers emails for example.com locally. This is as if this record would not exist in this table at all.
example.com
smtp:mail.otherdomain.de
Delivers all emails for example.com via smtp to the server mail.otherdomain.com.
example.com
smtp:mail.otherdomain.de:2025
Delivers all emails for example.com via smtp to the server mail.otherdomain.com, but on port 2025, not 25 which is the default port for smtp.
The square brackets prevent Postfix from doing lookups of the MX DNS record for the address in square brackets. Makes sense for IP addresses.
.example.com
smtp:mail.otherdomain.de
Mail for any subdomain of example.com is delivered to mail.otherdomain.de.
*
smtp:mail.otherdomain.de
All emails are delivered to mail.otherdomain.de.
joe@example.com
smtp:mail.otherdomain.de
Emails for are delivered to mail.otherdomain.de.
Um mehr zu erfahren, siehe auch:
man transport
Bitte immer daran denken, dass die Reihenfolge der Einträge in der transport Tabelle wichtig ist! Die Einträge schließen sich von oben nach unten an.
Wichtig: Postfix verwendet einen Caching Mechanism für den Transport, daher kann es eine Weile dauern, bis Deine Änderungen in der transport Tabelle übernommen werden. Wenn Du möchtest, dass sie sofort übernommen werden, lass Folgendes laufen
postfix reload
nachdem Du die Änderungen in der transport Tablle vorgenommen hast.