Postfix SQLite lookup table


Mail , ,


Oft braucht man für Postfix Konfigurationen für virtuelle Accounts. Die übliche Methode hierfür ist z.B. die Konfiguration mit MySQL zu machen. In vielen Fällen rentiert es sich aber nicht gleich einen MySQL Server aufzusetzen.


Vor kurzem brauchte ich ein Backend für Postfix, welches wenig Speicher verbraucht und ich per Webinterface einfach verwalten kann. Per Webinterface ein lookup table in Form eine Datei zu editieren und danach ein postmap aufzurufen, macht nicht wirklich spass. Aus diesem Grund kam für mich eigentlich nur SQLite in Frage.

Allerdings kann Postfix aktuell keine lookup tables in SQLite Datenbank, deswegen habe ich diese selber eingebaut. Der Patch für Postfix 2.3.3 ist unter http://www.treibsand.com/static/files/postfix-2.3.3_sqlite.patch verfügbar.

Sobald Postfix mit SQLite gebaut ist, sollte man eine Datenbank anlegen, die z.B. wie folgt aufgebaut ist:

CREATE TABLE mail_domains (id INT PRIMARY KEY, DOMAIN VARCHAR(250));  
CREATE TABLE mail_users (id INT PRIMARY KEY, email VARCHAR(128), maildir VARCHAR(250), DOMAIN INT(11));  
CREATE TABLE mail_virtual( id INT(11) PRIMARY KEY, email VARCHAR(50), destination text, DOMAIN INT(11));

In der Datei main.cf kann wie folgt auf die lookup table zugegriffen werden:

virtual_mailbox_maps = sqlite:/etc/postfix/sqlite-mailbox.cf
virtual_mailbox_domains = sqlite:/etc/postfix/sqlite-domains.cf
virtual_alias_maps = sqlite:/etc/postfix/sqlite-alias.cf

Jede Config Datei für SQLite muss 2 Anweisungen enthalten:

  • dbpath – Pfad zur SQLite Datenbank
  • query – SQL Query

Eine Config Datei kann z.B. wie folgt aussehen:

etc/postfix/aliases.db
query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='active'

8 Kommentare zu “Postfix SQLite lookup table”

  1. Manu Sagt:

    Ich habe Postfix compiliert und bekomme nun nurnoch fatal: unsupported dictionary type: sqlite

    Hab ich irgendwas falsch gemacht?

  2. Toast Sagt:

    Dann wurden wahrscheinlich die Source nicht richtig gepatcht. Welche Version von Postfix hast du verwendet? Mit der aktuellen Version hab ich es noch nicht getestet.

  3. RN Sagt:

    Ich habe die Sourcen(2.3.13) gepatcht und kompiliert. (Mit “CCARGS=-DHAS_SQLITE -I/usr/include” “AUXLIBS=-L/usr/lib -lsqlite3″)

    Danach ein make upgrade. postconf -m zeigt sqlite als Option an. Die main.cf ist korrekt und die .cf Dateien ebenfalls. (dbpath = /etc/postfix/email.db \\ query = bla bla bla).

    Aber sobald eine Email rein kommt landet folgende Meldung im Log:

    trivial-rewrite: fatal: Can´t open database: unable to open database file?

    Hat jemand eine Idee?

    MfG

  4. Toast Sagt:

    Schalte mal den rewirte Service in der master.cf auf verbose…

    rewrite unix – – n – – trivial-rewrite -v

    dann hast du eine genauere Ausgabe. Evtl. stimmen die Permissions der DB nicht.

  5. RN Sagt:

    Werde ich versuchen. Die Fehlermeldung stammt jedenfalls direkt aus dict_sqlite.c Sind denn wenigstens die Kompilierungs-Argumente richtig gewählt? (CCARGS usw.)
    Hast Du es schon zum Laufen bekommen? Falls Interesse an einem Austausch besteht, ich bin unter seminick (at) gmx (dot) de erreichbar.

  6. Toast Sagt:

    Die Argumente sind richtig. Zum laufen hab ich es auch schon bekommen, der Patch ist ja von mir :-)

    Ich schreibe grad aber an einem neuen, fuer die aktuelle Version von Postfix…kann aber noch ein wenig dauern.

  7. RN Sagt:

    Klar, der Patch ist von Dir. Ist mir auch (endlich) aufgefallen. :-D Peinlich. Ist der “neue” Patch dann für die 2.5er Version?

  8. Toast Sagt:

    Ja. Ich hoffe, dass ich in bis zum Wochenende fertig hab…


Kommentar hinzufügen