Greylisting in Postfix mit MySQL
Spam, Viren und viele sonstige Mails verstopfen unsere Mail Postfächer. Eine interessante Methode bietet hier Greylisting.
Definition Greylisting
Auszug aus dem deutschen Wikipedia Artikel:
Der Begriff Graue Liste bzw. Greylisting (brit.)/Graylisting (USA) bezeichnet eine Form der Spam-Bekämpfung bei E-Mails, bei dem E-Mail von unbekannten Absendern temporär abgewiesen und erst nach einem zweiten Zustellversuch angenommen wird.
Funktionsweise
Das Prinzip ist so einfach und doch so wirkungsvoll. Spam Versender haben nicht die Zeit zu überprüfen, ob eine Mail auch wirklich ankommt. Es zählt einzig und alleine die Menge der Mails, die versendet wird. Dabei bleibt keine Zeit zum überprüfen, ob die Mail auch wirklich ankommt. Auch viele Mail-Viren überprüfen nicht, ob eine Mail auch wirklich ankommt.
Gerade diesen Punkt kann man mit Greylisting zunutze machen. Beim Erstkontakt merkt sich der SMTP Server ein sogenanntes Triplet (drei Parameter) bestehend aus Absenderadress, Zieladresse und Absender-IPAdress. Der erste Zustellversuch wird aber gleich abgeblockt, bzw. die Mail wird nicht angenommen.
Kommt das gleiche Triplet nach einer eingestellten Wartezeit wieder vor, wird die Mail angenommen und entsprechend zugestellt.
Das Triplet, das gerade durch seinen zweiten Zustellversuch bewiesen hat, dass es ordentlich arbeitet, wird in einer Datenbank abgelegt. Dadurch werden weitere Mails ohne Verzögerung gleich zugestellt.
Vorteile
Der gravierende Vorteil dieser Methode liegt klar auf der Hand. Massenemails kommen nicht mehr durch und viele Mail-Viren kommen auch nicht durch. Aktuelle Zahlen sprechen von einer Reduzierung von Spam Mails auf ein Zehntel.
Zur Belegung dieser Zahlen hier zwei Grafiken, die verdeutlichen, wie wirksam der Schutz funktioniert (und raten sie mal, wann Greylisting aktiviert wurde).
Wie implementiert man Greylisting in Postfix?
Persönlich favorisiere ich MySQL als Datenbank im Hintergrund. Viele Applikationen brauchen eine Datenbank und warum sollte man die vorhandene nicht auch dafür benützen.
Installation unter Gentoo
Unter Gentoo gibt es einen entsprechenden Ebuild. Mittels folgendem Kommando kann man überprüfen, ob auch alles passend eingestellt ist:
# emerge -pv sqlgrey
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] dev-perl/IO-Multiplex-1.08 14 kB
[ebuild N ] dev-perl/net-server-0.94 81 kB
[ebuild N ] dev-perl/Carp-Clan-5.3 16 kB
[ebuild N ] dev-perl/Bit-Vector-6.4 128 kB
[ebuild N ] dev-perl/Date-Calc-5.4 201 kB
[ebuild N ] mail-client/mailx-support-20030215 8 kB
[ebuild U ] sys-devel/automake-wrapper-3-r1 [1-r1] 0 kB
[ebuild U ] sys-devel/autoconf-wrapper-4-r3 [3.2] 0 kB
[ebuild U ] sys-devel/m4-1.4.7 [1.4.4] USE="nls" 499 kB
[ebuild U ] sys-devel/autoconf-2.61 [2.59-r7] USE="-emacs" 1,364 kB
[ebuild N ] dev-perl/Locale-gettext-1.05 7 kB
[ebuild N ] sys-apps/help2man-1.36.4 USE="nls" 83 kB
[ebuild NS ] sys-devel/automake-1.10 872 kB
[ebuild N ] net-libs/liblockfile-1.06-r2 31 kB
[ebuild N ] mail-client/mailx-8.1.2.20040524-r1 126 kB
[ebuild N ] mail-filter/sqlgrey-1.7.4 USE="mysql -postgres -sqlite" 55 kB
Total size of downloads: 3,492 kB
Wichtig ist hierbei, dass bei sqlgrey in der letzten Zeile auch MySQL aktiviert ist, d.h. ohne Minus Zeichen davor. Die Pakete davor sind Abhängigkeiten, die bei Ihnen anders aussehen kann. Die abhängigen Pakete sind für die Funktion des Paketes notwendig.
Steht in Ihrem Fall mysql nicht mit in der sqlgrey Zeile, gibt es 3 Möglichkeiten. Die einfachste Möglichkeit besteht im Ändern der USE Zeile in der Datei /etc/make.conf. Hier einfach mysql hinzufügen. Die zweite Möglichkeit ist das Ändern oder erstellen der Datei /etc/portage/package.use mit folgendem Inhalt:
mail-filter/sqlgrey mysql
Oder man führt folgendes aus:
USE="mysql" emerge -pv sqlgrey
Um nun das Paket zu installieren, entfernt man einfach von obigem Aufruf die Parameter "-pv" und schon legt das System los.
Die Schnelle Installation
Nach der Installation muss die Datenbank eingerichtet werden.
emerge --config sqlgrey
Configuring pkg...
* SQLgrey database backend configuration
* Please select where SQLgrey database will run:
* [l] Database backend runs on localhost
* [r] Database backend runs on remote host
* [x] Exit
* Press one of the keys [l,r,x]:
* local setup
* Generating random database user password...
* Creating SQLgrey database backend data and configuration
* Please select what kind of database you like to use:
* [m] MySQL
* [x] Exit
* Press one of the keys [m,x]:
Enter password: * MySQL database backend
* If prompted for a password, please enter your MySQL root password
*
* Creating SQLgrey MySQL database "sqlgrey" and user "sqlgrey"
* Changing SQLgrey configuration in sqlgrey.conf
* Note: the database password is stored in /etc/sqlgrey/sqlgrey.conf
Die Fragen bei der Konfiguration sind mit l (localhost) und m (MySQL) zu beantworten. Danach gibt man noch sein root Passwort der MySQL Datenbank an.
Die Konfigurationsdatei wird automatisch mit den richtigen Werten befüllt. Danach muss Postfix noch angepaßt werden, dass das Greylisting auch verwendet wird. In der Datei /etc/postfix/main.cf muss folgendes an passender Stelle eingefügt werden:
smtpd_recipient_restrictions =
...
check_policy_service inet:127.0.0.1:2501
Soweit so gut. Jetzt muss noch alles aktiviert werden oder auch neu gestartet werden:
/etc/init.d/sqlgrey start
rc-update add sqlgrey default
/etc/init.d/postfix restart
Ab hier sollte man sich folgendes Logfile genauer ansehen ob alles geklappt hat:
/var/log/mail.info oder /var/log/mail.log
Hier sollten nun nach und nach die Meldungen kommen, dass der Sender erst mal abgewiesen wurde. Nach weiteren Minuten, wenn der selbe Sender nochmals sendet, sollte er durchgelassen werden.
Weitere Beobachtungsmöglichkeiten befinden sich in der Datenbank.
Die Tabelle connect enthält alle Verbindungsversuche, die Tabelle from_awl die erfolgreichen Verbindungen (2x Connect und Zustellung der Mail).
Als weitere Lektüre sind die README Dateien zu empfehlen, die Tips & Tricks für das Feintuning mittels der weiteren Tabellen beinhalten.
Viel Spass beim Konfigurieren und dem zukünftig Spamärmeren Postfach.

