Postfix Denylist mit SQLite
am in: LinuxWer seinen eigenen Mailserver betreibt, muss sich früher oder später mit dem Thema SPAM auseinandersetzen. Manchmal wird nur ein einzelner Mailserver für SPAM missbraucht und daher ist eine einfache Lösung den ganzen Host vom Mailversand für euer System zu sperren. Diese Anleitung beschreibt, wie eine Denylist für Postfix und SQLite umgesetzt werden kann.
Voraussetzungen
- Postfix
- SQLite
Datenbank
Wir öffnen eine bestehende oder erstellen eine neue SQLite Datenbank falls noch keine existiert:
sqlite3 /var/vmail/vmail.sqlite
Wenn alles klappt öffnet sich jetzt eine SQLite REPL:
$ sqlite3 vmail.sqlite
SQLite version 3.50.4 2025-07-30 19:33:53
Enter ".help" for usage hints.
sqlite>
Wir erstellen nun die Tabelle, in der die Zugangsregeln definiert werden:
CREATE TABLE access_control (
pattern TEXT,
action TEXT
);
Die IP oder Hostname wird in pattern gespeichert; action enthält die Anweisung REJECT, dass die Mail verweigert werden soll.1 Beispiel:
INSERT INTO access_control (pattern, action) VALUES ('mrw-1-xc.mail.tiscali.it', 'REJECT');
Postfix konfigurieren
Postfix SQL Konfigurationsdatei anlegen:
vim /etc/postfix/sql/access_control.cf
dbpath = /var/vmail/vmail.sqlite
query = SELECT action FROM access_control WHERE pattern = '%s'
Postfix Konfiguration anpassen:
vim /etc/postfix/main.cf
smtpd_recipient_restrictions = check_client_access proxy:sqlite:/etc/postfix/sql/access_control.cf
proxy_read_maps = proxy:sqlite:/etc/postfix/sql/access_control.cf
Zum Abschluss die Konfiguration von Postfix neu laden:
systemctl reload postfix
Damit haben wir mit einfachsten Mitteln eine dynamische Denylist/Blacklist für Postfix umgesetzt.
-
Weitere REJECT ACTIONS sind in der Postfix Dokumentation beschrieben: Postfix manual - access(5) ↩