Home | Comics | wishlist | Impressum | Datenschutzerklärung | 23.20.25.122


POP-BEFORE-SMTP

Mailserver für Mobile User mit Postfix

Wir alle kennen das Problem: Man betreibt einen Mailserver und bietet SMTP und POP/IMAP für Kunden an, will aber nicht von Spammern als Relay mißbraucht werden! Problem: Wie unterscheide ich den Spammer vom legitimen User?

Lösungsansätze:

Überprüfung des Envelope-From (MAIL FROM: <absender>): Nicht praktikabel, denn der Spammer kann die Absenderadresse ja beliebig fälschen. Tatsächlich wird dies sogar getan, sodaß durch Beschränkung der Absenderadresse auf die eigene Domain absolut wirkungslos ist. Diese Beschränkung wird nur von Administratoren eingesetzt, die das SMTP Protokoll nicht verstanden haben.

POP/IMAP-before-SMTP Autorisierung:

Der Benutzer muß von DERSELBEN IP-Adresse sich erfolgreich per POP/IMAP authentifizieren, bevor er von dieser IP-Adresse aus über unseren Mailserver relayen darf. Dies ist nur innerhalb eines Zeitfensters nach der Autorsierung möglich. SMTP-AUTH: Die eleganteste Methode. Im SMTP-Dialog werden Username und Passwort übermittelt. Ist diese Autorisierung erfolgreich, wird das Relaying erlaubt.

Generelle Realisierung:

Die IP Adressen von Clients mit erfolgreicher Autorisierung werden in eine Datenbank eingetragen. Schlüssel ist dabei die IP-Adresse, Wert ist der Unix-Timestamp der Autorisierung. Der Daemon, der die Datenbank verwaltet, entfernt periodisch Einträge aus der Datenbank, die älter sind als das vorkonfigurierte Zeitfenster.

Realisierung vom POP-before-SMTP mit Postfix:

Für Postfix existieren zwei Daemonen: dracd und pop-before-smtp.pl Beide haben Vor- und Nachteile: dracd Vorteile: dracd Nachteile: pop-before-SMTP Vorteile: pop-before-SMTP Nachteile: Aus diesen Gründen fällt bei mir die Wahl auf pop-before-SMTP.pl.

Konfiguration von pop-before-SMTP.pl:

Zuallererst müssen wir das Programm von hier laden.

Der Start sollte am besten zur Bootzeit automatisch geschehen. Wir wollen es nun aber manuell starten, um die ersten Tests vorzunehmen. Standardmäßig beobachtet pop-before-SMTP.pl die Datei /var/log/maillog, extrahiert die IP-Adressen der erfolgreichen Logins und schreibt diese in die hash Datenbank /etc/postfix/pop-before-smtp.db. Die Aufrufparameter sind wie folgt:

nohup pop-before-smtp \
      [--[no]write] \
      [--[no]debug] \ 
      [--[no]flock] \
      [--logfile=filename] 
      [--dbfile=filename] 
      [--grace=seconds] &
Sollten beim Start Fehler auftreten, sind evtl. die benötigten Perl-Module nicht installiert, sie können diese via:
% perl -MCPAN -e shell;
und dann innerhalb der CPAN Shell:
% install Time::HiRes
% install File::Tail
% install Net::Netmask
% install Date::Parse
% install DB_File
nachinstallieren. pop-before-smtp.pl ist auf UW-ipop3/imapd angepaßt. Zur Zusammenarbeit mit anderen POP/IMAP Server muß die Definition von $pat und $pat2 geändert werden. Diese Definitionen befinden sich hinter den Zeilen:

# This regex pull the lines I'm interested in out of $logfile, and yanks out
# the timestamp and IP address
Für SuSE 8.2:

# Testpattern qpopper fuer SuSE 8.2 Personal nach Update
$pat = '^(... .. ..:..:..).* (\d+\.\d+\.\d+\.\d+) \[pop_updt\.c:296\]$';

Test in Postfix:

Wir können mit postmap direkt den Inhalt der hash Datenbank /etc/postfix/pop-before-smtp.db abfragen:
% postmap -q ip.add.res.se hash:/etc/postfix/pop-before-smtp
sollte für ip.add.res.se (von der hoffentlich vorher ein POP/IMAP Login erfolgreich durchgeführt wurde) einen numerischen Wert zurückgeben.

Einbindung in Postfix:

Die Standard-UCE-Restrictionen:
smtpd_recipient_restrictions = 
   permit_mynetworks,
   reject_unauth_destination
werden erweitert zu:
smtpd_recipient_restrictions = 
   permit_mynetworks,
   check_client_access hash:/etc/postfix/pop-before-smtp,
   reject_unauth_destination
D.h. sobald ein Client NICHT in mynetworks ist, wird die Datenbank hash:/etc/postfix/pop-before-smtp abgefragt, in die pop-before-smtp.pl die IP Adressen einträgt. Wird die IP Adresse dort gefunden, so wird der numerische Rückgabewert als OK interpretiert und die Mail akzeptiert.
© by Ralf Hildebrandt
This document contains links to external information sources that I do neither monitor nor control. I explicitly disclaim any liabilities in respect to external references.
You are getting this document without any guarantees. Any methods shown above are meant as demonstration and may be wrong in some place. You may damage your system if you try to follow my hints and instructions. You do this at your own risk!

This file was last modified 27. Apr 2007 by root