postfix policy daemons.pdf
Post on 13-Sep-2015
254 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
Die Schnittstelle Implementation Fragen und Diskussion
Postfix Policy Daemons im Eigenbau.Sinn und Implementation.
David Schweikert
ISG.EE - ETH Zrich
2. Mailserver-KonferenzMagdeburg, 20. Mai 2005
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
ber die ISG.EE
IT Support Gruppe an der ETH Zrich15 MitarbeiterAlle unsere Tools sind GPLhttp://isg.ee.ethz.ch
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
ber mich
Arbeite seit 5 Jahren bei der ISG.EEAdministration von Mail-Servers (unter anderem)Open-Source Projekte: Mailgraph, Postgrey, Gedafe, ISGTC,Perl-Modulehttp://people.ee.ethz.ch/dws
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Postfix Policy Daemons im Eigenbau1 Die Schnittstelle
Was ist eine SMTP-Policy?Beispiel SMTP-PoliciesMotivation fr ein externer ProzessDas ProtokollKonfiguration in Postfix
2 ImplementationImplementation mit spawnImplementation als einzelne ProzessDatenbankenTestenTypische Fallen
3 Fragen und Diskussion
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Was ist eine SMTP-Policy?
Was ist eine SMTP-Policy?
Entscheiden beimMail-Verkehrseingang (SMTP-Protokoll), wasmit einer E-Mail gemacht werden soll:
Zurckweisen mit einem definitiven FehlerZurckweisen mit einem temporren FehlerMail akzeptieren (kann spter noch bouncen)Kein Entscheid: weitere Policy-Regeln berprfen
Postfix: smtpd_xxx_restrictions
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Was ist eine SMTP-Policy?
Beispiel SMTP-Session
220 example.com ESMTP PostfixHELO ee.ethz.ch250 example.comMAIL FROM: 250 OkRCPT TO: 451 Greylisted for 300 secondsQUIT
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Beispiel SMTP-Policies
Policy-Beispiel: Relaying nur fr lokale Clients
Nur lokale Clients drfen Mails schicken, die an Dritteweitergeleitet werden sollen.
Input aus demMail-System:IP-Adresse der Mail-Client
Policy:Bekannte Adresse? ACCEPT
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Beispiel SMTP-Policies
smtpd_recipient_restrictions
In Postfix sind Policies mit smtpd_xxx_restrictionskonfiguriert:smtpd_recipient_restrictions =
reject_non_fqdn_recipientreject_unlisted_recipientpermit_mynetworkspermit_sasl_authenticatedcheck_client_access
hash:/etc/postfix/client_accessreject_unauth_destination
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Beispiel SMTP-Policies
Policy-Beispiel: SPFBekmpfung von Flschungen der Absender-Adresse:Darf dieser Mail-Client, Mails mit dieser Absender-Mail-Domainzu verschicken?
Input aus demMail-System:Mail-Domain der Absender (Envelope Sender)IP-Adresse der Mail-Client
Policy:Aus der DNS (SPF TXT-Eintrge):erlaubte Mail-Clients fr diese Mail-DomainMail-Client nicht in der Liste? REJECT
Ist mit den eingebauten Restrictions von Postfix nicht mglich.
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Beispiel SMTP-Policies
Policy-Beispiel: Greylisting
Echte Mail-Servers reagieren auf temporre Fehler indem siespter erneut Versuch die Mail zu versenden. Idee: einentemporren Fehler beim ersten Versuch erzeugen. Spammershaben keine echten Mailserver und kommen daher nicht wieder.
Input aus demMail-System:IP-Adresse der Mail-ClientAbsender AdresseEmpfnger Adresse
Policy:Triplet neu? DEFER
Nicht mglich mit den eingebauten Restrictions von Postfix.
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Beispiel SMTP-Policies
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Motivation fr ein externer Prozess
Geschichte
Juni 2003: Greylisting-Paper von Evan HarrisJuli 2003: SPF-Talk von MengWengWongJuli 2003: Ankndigung vonWietse Venema:SMTPD Policy Delegation
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Motivation fr ein externer Prozess
Warum ein externer Prozess?
Hohe Komplexitt (Implementation und Konfiguration)(Mail::SPF::Query ist 64KB Perl-Code)Sicherheit: Keine Abhngigkeit zu externen LibrariesHohe Flexibilitt verlangtPolicy-Entscheide knnen an einen anderen Server delegiertwerdenPerformance kann trotzdem gut sein
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Motivation fr ein externer Prozess
Anwendungsbeispiele fr Policy-Daemons
AuthentisierungAuthentisierung der eigenen ClientsSPF
Anti-SPAMGreylistingSpam-Trap Blacklisting
Nicht geeignetCaller-ID / Sender-IDContent-FilterOutbound-Policy (z.B. SPF/SRS)
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Das Protokoll
Das Protokoll: Postfix Daemonrequest=smtpd_access_policyprotocol_state=RCPTprotocol_name=SMTPhelo_name=some.domain.tldqueue_id=8045F2AB23sender=foo@bar.tldrecipient=bar@foo.tldclient_address=1.2.3.4client_name=another.domain.tldinstance=123.456.7sasl_method=plainsasl_username=yousasl_sender=size=12345[leere Zeile]
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Das Protokoll
Das Protokoll: Daemon Postfix
action=defer_if_permit Greylisted[leere Zeile]
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Das Protokoll
Mgliche Antworten (aus accept(5)):
OK
all-numerical (wie OK)4NN text (temporre Fehler)5NN text (definitive Fehler)REJECT optional textDEFER_IF_REJECT optional textDEFER_IF_PERMIT optional text
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Das Protokoll
Mgliche Antworten (aus accept(5)):
restriction (entsprechende restriction applizieren)DISCARD optional textDUNNO
FILTER transport:destinationHOLD optional textPREPEND headername: headervalueREDIRECT user@domainWARN optional text
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Konfiguration in Postfix
Konfiguration in Postfix
smtpd_recipient_restrictions =reject_non_fqdn_recipientreject_unlisted_recipientpermit_mynetworkspermit_sasl_authenticatedcheck_client_access
hash:/etc/postfix/client_accessreject_unauth_destinationcheck_policy_service inet:127.0.0.1:10023
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation mit spawn
Implementation mit spawn
Postfix-quivalent zu inetdWrapper fr Programmen, die mit stdin/stdout arbeitenProzesse werden nach Bedarf gestartet (parallel)Prozesse nach maximal 100 (max_use) Anfragen terminiert
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation mit spawn
Implementation mit spawn: master.cf
# service type priv unpri chroot wakeup maxproc command127.0.0.1:10023 inet - n n - - spawn
user=nobody argv=/some/where/policy-server
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation mit spawn
Implementation mit spawn: Hauptschleife
while () {if (/(.*?)=(.*)\n/) {
$attr{$1} = $2;} elsif ($_ eq "\n") {
fatal_exit "unrecognized request type"unless $attr{request} eq "smtpd_access_policy";
$action = smtpd_access_policy(\%attr);print STDOUT "action=$action\n\n";%attr = ();
}}
(aus Postfixs greylist.pl, vereinfacht)
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation mit spawn
Implementation mit spawn: Vor-/Nachteile
Vorteile:Sehr einfache ImplementationIdeale Integration in Postfixberwachung durch Postfix
Nachteile:Muss schnell startenViele unabhngige Prozesse Schwierigkeit bei gemeinsame Daten (greylist.pl ist nicht zuverlssig)
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation als einzelne Prozess
Implementation als einzelne Prozess
Wie kann man das Locking Problem lsen?Nur ein ProzessMehrere ClientsSelect-loopSchwierigkeit: nur Ausschnitte vom gesamten VerkehrManmuss zuerst den vollstndigen Requestzusammenbauen
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation als einzelne Prozess
Implementation als einzelne Prozess: Vor-/Nachteile
Vorteile:Schnell unabhngig der Startup-ZeitKein Locking
Nachteile:Skaliert nicht auf mehrere CPUProgrammierung nicht ganz trivial
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation als einzelne Prozess
Implementation als einzelne Prozess
Die Implementation mit select ist komplexAbhilfe schafft Net::Server
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation als einzelne Prozess
Implementation mit Net::Server
Prozess-Modell ist whlbar und austauschbar:Inetd/spawnSingleMultiplexing (einzelne Prozess mit select)Forking, Pre-Forking
OptionenLoggingDaemonifizierungZugriffskontrolle (allow/deny)Signal-Handlung (inklusive HUP)
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation als einzelne Prozess
Implementation mit Net::Server
Prozess-Modell whlenApplikation als Subklasse schreiben$self->process_request und andere bentigteProzeduren nach Bedarf berschreiben
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Implementation als einzelne Prozess
Implementation mit Net::Server::Multiplex
$self->mux_input statt process_requestInput konsumierenWenn Input reicht, Request behandeln
sub mux_input(){
my ($self, $mux, $fh, $in_ref) = @_;while ($$in_ref =~ s/^([^\r\n]*)\r?\n//) {
next unless defined $1;my $in = $1;# etwas mit $in tun
}}
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Datenbanken
Datenbanken-Wahl
Welche Datenbank ist am besten geeignet?Welche Vor- und Nachteile?
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Datenbanken
Datenbanken: Text-Dateien
Vorteile:Einfach zu debuggen / auswerten
Nachteile:PerformanceRandom access (read/write) schwierigLocking muss selber gemacht werden
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Datenbanken
Datenbanken: Persistente Objekte
Zum Beispiel mit Perls Storable...
Vorteile:Einfache Programmierung
Nachteile:Alles imMemory!Nur ein globales LockKeine Transactions / Recovery Prozedur
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Datenbanken
Datenbanken: Berkeley-DBVorteile:
PerformanceAngenehm fr Key/Value (tie im Perl)Transactions und RecoveryLocking
Nachteile:Locking ist etwas komplex (Deadlock detection)Nur Key/Value-Modell
Postgrey: Die CPU ist mit 40000 eingehende Mails pro Tag 0.2%ausgelastet (1.2 Ghz UltraSparc IIIi)
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Datenbanken
Datenbanken: SQLiteVorteile:
PerformancePublic Domain!Flexibilitt und Features von SQLLocking
Nachteile:DBD ist schwieriger als tieGlobales Lock (mit nicht zu hufige COMMITs aber trotzdemsehr schnell)
Meine Empfehlung ausser es gibt spezielle Bedrfnisse
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Datenbanken
Datenbanken: MySQL / PostgreSQL
Vorteile:PerformanceFlexibilitt und Features von SQLLockingClient-Server
Nachteile:InstallationKomplexitt des gesamten Systems
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Testen
Testen
Von Handtelnet localhost 10023Copy/Paste einer Policy-Request
Mit XCLIENTFlschung von Eckdaten einer SMTP-SessionClient muss freigeschaltet werten:smtpd_authorized_xclient_hosts = localhost
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Testen
Testen
dws@tardis:~$ telnet localhost 25Trying 127.0.0.1...Connected to localhost.Escape character is ^].220 smtp.ee.ethz.ch ESMTP PostfixXCLIENT NAME=test.example.com ADDR=192.168.1.1250 OkMAIL FROM:250 OkRCPT TO:450 : Recipient address rejected: Greylisted
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Typische Fallen
Falle: Mails mit mehrere Empfnger
Postgrey fgt einen Header ein, falls es ein Delay verursachthatMehrere Empfngermehrere Header
Lsung:Mit instance die Requests korrelieren und nur einmal denHeader einfgen
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Typische Fallen
Falle: Crash des Daemon
Postgrey: Crash wenn %n in der Absender-Adresse vorkommtUrsache: indirekt syslog (wie printf) wie ein putsgebrauchtKonsequenz: 450 Server configuration problemDenial-of-Service!
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Zusammenfassung
Zusammenfassung
Sehrmchtig fr spezielle Anwendungen. KeinContent-Filter!Aufpassen, wie es in Postfix konfiguriert wirdImplementation muss robust sein: das ganze Mail-Systemhngt davon abNet::Server und SQLite sind ntzlich bei derProgrammierung
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
-
Die Schnittstelle Implementation Fragen und Diskussion
Fragen?
David Schweikert ISG.EE - ETH ZrichPostfix Policy Daemons
Die SchnittstelleWas ist eine SMTP-Policy?Beispiel SMTP-Policies
top related