Home |
Comics |
Gallery |
(Amazon|
ThinkGeek) wishlist |
Donations |
Impressum |
The Book of Postfix |
Postfix - Einrichtung, Betrieb und Wartung |
Blog
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:
- POP/IMAP Server kann auf anderer Maschine als der SMTP Server sein
dracd Nachteile:
- Portmapper benötigt (RPC Programm)
- Sourcecode von IMAP und POP Daemonen muß gepatcht werden.
pop-before-SMTP Vorteile:
- Anpassung an beliebige Server möglich; mittels regulärem Ausdruck wird das Logfile geparsed
- kein Portmapper benötigt
- gutes Debugging
pop-before-SMTP Nachteile:
- Perl wird benötigt
- POP/IMAP Server muß dorthin loggen, wo pop-before-SMTP.pl läuft
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] &
- --debug ermöglicht ein effektives Debugging von Problemen -- aber erfahrungsgemäß ist sowieso lediglich der
reguläre Ausdruck zum Extrahieren der IP Adresse falsch
- --grace=seconds gibt die Größe des Zeitfensters an, in dem ein Relaying von der autorisierten IP-Adresse möglich
ist. Standardmässig sind die 1800 Sekunden (= 30 Minuten).
- --logfile=logfile spezifiziert das Logfile. Standardmäßig
ist dies /var/log/maillog, es kann aber auch ganz anders
heißen (/var/log/mail, /var/log/messages)
- --nowrite verhindert zu Testzwecken, daß in die Datenbank geschrieben wird.
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