Als erstes kommt die Datenbank PostgreSQL dran in der die virtuellen Domains, User und Aliasse abgelegt werden

 

Installation und Konfiguration

root@tutorial:~# apt install postgresql 

In der Standardeinstellung sollte in

/etc/postgresql/9.6/main/pg_hba.conf 

unter anderem folgendes drinstehen:

host all all 127.0.0.1/32 md5 

Das heißt, daß wir uns von localhost (und nur von dort) mit jedem Benutzer zu jeder Datenbank verbinden können. Das Passwort für diese Verbindung ist md5-Verschlüsselt.

Jetzt wechseln wir zum User postgres (der automatische bei der PostgreSQL-Installation angelegt wurde)

su - postgres 

erstellen die Datenbank

createdb mails 

und starten den Postgres-Client um die Datenbank zu "füllen"

psql mails

Als erstes erstellen wir die Tabelle transport. Hier wird die Domain eingegeben und der dazugehörige Transport (also wie die E-Mail von Postfix weiterverarbeitet wird.

CREATE TABLE transport (
domain VARCHAR(128) NOT NULL,
transport VARCHAR(128) NOT NULL,
PRIMARY KEY (domain)
);

Dann kommt die users-Tabelle. In dieser Tabelle werden (wie der Name schon sagt) die User-Daten, wie z. B. User-ID, Passwort, Mail-Verzeichnis gespeichert.

CREATE TABLE users (
userid VARCHAR(128) NOT NULL,
password VARCHAR(128),
realname VARCHAR(128),
uid INTEGER NOT NULL,
gid INTEGER NOT NULL,
home VARCHAR(128),
mail VARCHAR(255),
PRIMARY KEY (userid)
);

Als letztes die Tabelle virtual. Hier findet die Zuordnung zwischen der E-Mail-Adresse und der User-ID statt.

CREATE TABLE virtual (
address VARCHAR(255) NOT NULL,
userid VARCHAR(255) NOT NULL,
PRIMARY KEY (address)
);

Nun noch 2 Views zur Abfrage der User-Mailbox und Adresse

create view postfix_mailboxes as
select userid, home||'/' as mailbox from users
union all
select domain as userid, 'dummy' as mailbox from transport;

create view postfix_virtual as
select userid, userid as address from users
union all
select userid, address from virtual;

Jetzt legen wir 2 User an jeweils einen mit dem wir die Abfragen tätigen und dazu noch einen mit dem wir neue Daten in die DB schreiben bzw. vorhandene Daten verändern können. Zweiteres wird in diesem Tutorial nicht gemacht. Wenn also kein Bedarf daran besteht kann auf den user mailwriter verzichtet werden.

Password sollte natürlich auf ein eigenes SICHERES Passwort geändert werden!

CREATE USER mailreader PASSWORD 'supergeheim';
grant select on transport, users, virtual, postfix_mailboxes, postfix_virtual to mailreader;

create user mailwriter password 'supergeheim';
grant select, insert, update, delete on transport, users, virtual, postfix_mailboxes, postfix_virtual to mailwriter;

Test-User anlegen

Hier fügen wir nun noch eine Testdomain und einen Testuser ein. Das Anlegen eines "normalen" Users wird nachher noch genauer beschrieben.

insert into transport (domain, transport) values ('testdomain.de', 'lmtp:unix:private/dovecot-lmtp');

insert into users (userid, uid, gid, home) values (Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!', 5000, 5000, 'testdomain.de/mails/testuser');

insert into virtual (address, userid) values (Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!', Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!');