Postfix Policy Daemons im Eigenbau. Before-Queue vs. After-Queue - - PowerPoint PPT Presentation

postfix policy daemons im eigenbau
SMART_READER_LITE
LIVE PREVIEW

Postfix Policy Daemons im Eigenbau. Before-Queue vs. After-Queue - - PowerPoint PPT Presentation

Postfix Policy Daemons David Schweikert Filtering- berblick Postfix Policy Daemons im Eigenbau. Before-Queue vs. After-Queue Was ist eine Sinn und Implementation. Access-Policy? Beispiel SMTP-Policies Die Policy- Schnittstelle


slide-1
SLIDE 1

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Postfix Policy Daemons im Eigenbau. Sinn und Implementation.

David Schweikert

Open Systems AG

  • 3. Mailserver-Konferenz

Berlin, 3. Juli 2007

slide-2
SLIDE 2

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Über mich

7 Jahren Postmaster an der ETH Zürich Verantwortlich bei der Open Systems AG für:

Mail-Filter Service Intrusion Detection Service

Open-Source Projekte: Mailgraph, Postgrey, Gedafe, ISGTC, Perl-Module http://david.schweikert.ch

slide-3
SLIDE 3

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Über Open Systems AG

Business: Managed Security Services Expertise + berechenbare Kosten (kein Technologie-Risiko) Mehr als 900 Rechner in über 70 Ländern Management von: Mail-Filter, Firewall, Site-to-site VPN, ISP-Failover, Traffic Shaping, Content-Filtering Proxy, IDS, Reverse-Proxy, . . . http://www.open.ch

slide-4
SLIDE 4

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Postfix Policy Daemons im Eigenbau

1

Filtering-Überblick

2

Die Policy-Schnittstelle

3

Implementation

4

Fragen und Diskussion

slide-5
SLIDE 5

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Filtering-Überblick

slide-6
SLIDE 6

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

After-Queue Filtering

Klassisches Setup mit SpamAssassin, etc. Inline rejection nicht möglich Sollte bounces generieren Problemen mit Backscatter Mails können unter Last verzögert prozessiert werden

slide-7
SLIDE 7

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Before-Queue Filtering

Antwort schon beim Mail-Verkehrseingang (SMTP-Protokoll) Access-Policy Content-Filtering möglich, aber: Heikel für grosse Volumen

slide-8
SLIDE 8

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Was ist eine Access-Policy?

Entscheiden beim Mail-Verkehrseingang (SMTP-Protokoll), was mit einer E-Mail gemacht werden soll: Zurückweisen mit einem definitiven Fehler Zurückweisen mit einem temporären Fehler Mail akzeptieren (kann später noch “bouncen”) Kein Entscheid: weitere Policy-Regeln überprüfen

slide-9
SLIDE 9

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Beispiel SMTP-Session

220 example.com ESMTP Postfix HELO mail.schweikert.ch 250 example.com MAIL FROM: <david@schweikert.ch> 250 Ok RCPT TO: <test@example.com> 451 Greylisted for 300 seconds QUIT

slide-10
SLIDE 10

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Access-Policy Mechanismen

Eingebaute smtpd_xxxx_restrictions Policy delegation Milters

slide-11
SLIDE 11

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

smtpd_xxxx_restrictions

Beispiel:

smtpd_recipient_restrictions = reject_non_fqdn_recipient reject_unlisted_recipient permit_mynetworks permit_sasl_authenticated check_client_access hash:/etc/postfix/client_access reject_unauth_destination

slide-12
SLIDE 12

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Policy-Beispiel: Relaying nur für lokale Clients

Nur lokale Clients dürfen Mails schicken, die an Dritte weitergeleitet werden sollen. Input aus dem Mail-System:

IP-Adresse des Mail-Clients

Policy:

Bekannte Adresse? → ACCEPT

slide-13
SLIDE 13

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Policy-Beispiel: SPF

Bekämpfung von Fälschungen der Absenderadresse: “Darf dieser Mail-Client Mails mit dieser Absender-Mail-Domain verschicken?” Input aus dem Mail-System:

Mail-Domain des Absenders (“Envelope Sender”) IP-Adresse des Mail-Clients

Policy:

Aus der DNS (SPF TXT-Einträge): erlaubte Mail-Clients für diese Mail-Domain Mail-Client nicht in der Liste? → REJECT

Nicht möglich mit den eingebauten Restrictions von Postfix.

slide-14
SLIDE 14

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Policy-Beispiel: Greylisting

“Echte” Mail-Server reagieren auf temporäre Fehler, indem sie später erneut versuchen, die Mail zu versenden. Idee: einen temporären Fehler beim ersten Versuch erzeugen. Spammers haben keine echten Mailserver und kommen daher nicht wieder. Input aus dem Mail-System:

IP-Adresse der Mail-Client Absenderadresse Empfängeradresse

Policy:

“Triplet” neu? → DEFER

Nicht möglich mit den eingebauten Restrictions von Postfix.

slide-15
SLIDE 15

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Die Policy-Schnittstelle

slide-16
SLIDE 16

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Geschichte

Juni 2003: Greylisting-Paper von Evan Harris Juli 2003: SPF-Talk von Meng Weng Wong Juli 2003: Ankündigung von Wietse Venema: “SMTPD Policy Delegation”

slide-17
SLIDE 17

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Warum ein externer Prozess?

Hohe Komplexität (Implementation und Konfiguration) (Mail::SPF::Query ist 64KB Perl-Code) Sicherheit: Keine Abhängigkeit zu externen Libraries Hohe Flexibilität verlangt Policy-Entscheide können an einen anderen Server delegiert werden Performance kann trotzdem gut sein

slide-18
SLIDE 18

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Anwendungsbeispiele für Policy-Daemons

Authentisierung Authentisierung der eigenen Clients SPF Anti-SPAM Greylisting Spam-Trap Blacklisting Rate Limiting Nicht geeignet Caller-ID / Sender-ID Content-Filter Outbound-Policy (z.B. SPF/SRS)

slide-19
SLIDE 19

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Das Protokoll: Postfix → Daemon

request=smtpd_access_policy protocol_state=RCPT protocol_name=SMTP helo_name=some.domain.tld queue_id=8045F2AB23 sender=foo@bar.tld recipient=bar@foo.tld client_address=1.2.3.4 client_name=another.domain.tld instance=123.456.7 sasl_method=plain sasl_username=you sasl_sender= size=12345 [leere Zeile]

slide-20
SLIDE 20

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Das Protokoll: Daemon → Postfix

action=defer_if_permit Greylisted [leere Zeile]

slide-21
SLIDE 21

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Mögliche Antworten (aus accept(5)): DUNNO OK all-numerical (wie OK) 4NN text (temporäre Fehler) 5NN text (definitive Fehler) REJECT optional text DEFER_IF_REJECT optional text DEFER_IF_PERMIT optional text

slide-22
SLIDE 22

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Mögliche Antworten (aus accept(5)): restriction (entsprechende restriction applizieren) DISCARD optional text FILTER transport:destination HOLD optional text PREPEND headername: headervalue REDIRECT user@domain WARN optional text

slide-23
SLIDE 23

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Konfiguration in Postfix

smtpd_recipient_restrictions = reject_non_fqdn_recipient reject_unlisted_recipient permit_mynetworks permit_sasl_authenticated check_client_access hash:/etc/postfix/client_access reject_unauth_destination check_policy_service inet:127.0.0.1:10023

slide-24
SLIDE 24

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Milters

Sendmail Milter-Schnittstelle Seit Postfix 2.3 Sehr flexibel Kann Mail-Inhalt überprüfen und ändern Viele Applikationen verfügbar Kehrseite: Komplexität Entweder Proxy-Filters oder Milters

slide-25
SLIDE 25

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation

slide-26
SLIDE 26

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation mit spawn

Postfix-Äquivalent zu inetd Wrapper für Programme, die mit stdin/stdout arbeiten Prozesse werden nach Bedarf gestartet (parallel) Prozesse werden nach maximal 100 (max_use) Anfragen terminiert

slide-27
SLIDE 27

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation mit spawn: master.cf

# service type priv unpri chroot wakeup maxproc cmd 127.0.0.1:10023 inet - n n

  • spawn

user=nobody argv=/some/where/policy-server

slide-28
SLIDE 28

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation mit spawn: Hauptschleife

while (<STDIN>) { 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 Postfix’s greylist.pl, vereinfacht)

slide-29
SLIDE 29

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation mit spawn: Vor-/Nachteile

Vorteile: Sehr einfache Implementation Ideale Integration in Postfix Überwachung durch Postfix Nachteile: Muss schnell starten Viele unabhängige Prozesse → Schwierigkeit bei gemeinsame Daten → (greylist.pl ist nicht zuverlässig)

slide-30
SLIDE 30

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation als einzelner Prozess

Wie kann man das Locking Problem lösen? Nur ein Prozess Mehrere Clients Select-loop Schwierigkeit: nur Ausschnitte vom gesamten Verkehr → Man muss zuerst den vollständigen Request zusammenbauen

slide-31
SLIDE 31

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation als einzelner Prozess: Vor-/Nachteile

Vorteile: Schnell unabhängig von der Startup-Zeit Kein Locking Nachteile: Skaliert nicht auf mehrere CPU Programmierung nicht ganz trivial

slide-32
SLIDE 32

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation als einzelner Prozess

Die Implementation mit select ist komplex Abhilfe schafft Net::Server

slide-33
SLIDE 33

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Implementation mit Net::Server

Prozess-Modell ist wählbar und austauschbar:

Inetd/spawn Single Multiplexing (einzelner Prozess mit select) Forking, Pre-Forking

Optionen Logging Daemonisierung Zugriffskontrolle (allow/deny) Signal-Handling (inklusive HUP)

slide-34
SLIDE 34

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Datenbanken-Wahl

Welche Datenbank ist am besten geeignet? Welche Vor- und Nachteile?

slide-35
SLIDE 35

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Datenbanken: Text-Dateien

Vorteile: Einfach zu debuggen / auszuwerten Nachteile: Performance Random access (read/write) schwierig Locking muss selber gemacht werden

slide-36
SLIDE 36

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Datenbanken: Persistente Objekte

Zum Beispiel mit Perl’s Storable... Vorteile: Einfache Programmierung Nachteile: Alles im Memory! Nur ein globales Lock Keine Transactions / Recovery Prozedur

slide-37
SLIDE 37

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Datenbanken: Berkeley-DB

Vorteile: Performance Angenehm für Key/Value (tie im Perl) Transactions und Recovery Locking Nachteile: Locking ist etwas komplex (Deadlock detection) Nur Key/Value-Modell Postgrey: Die CPU ist mit 40’000 eingehende Mails pro Tag 0.2% ausgelastet (1.2 Ghz UltraSparc IIIi)

slide-38
SLIDE 38

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Datenbanken: SQLite

Vorteile: Performance Public Domain! Flexibilität und Features von SQL Locking Nachteile: DBD ist schwieriger als tie Globales Lock (mit nicht zu häufige COMMITs aber trotzdem sehr schnell) Meine Empfehlung ausser es gibt spezielle Bedürfnisse

slide-39
SLIDE 39

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Datenbanken: MySQL / PostgreSQL

Vorteile: Performance Flexibilität und Features von SQL Locking Client-Server Nachteile: Installation Komplexität des gesamten Systems

slide-40
SLIDE 40

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Testen

Von Hand

telnet localhost 10023 Copy/Paste eines Policy-Requests

Mit XCLIENT

Fälschung von Eckdaten einer SMTP-Session Client muss freigeschaltet werten: smtpd_authorized_xclient_hosts=localhost

slide-41
SLIDE 41

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Testen

dws@nigel:~$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is ’^]’. 220 mail.schweikert.ch ESMTP Postfix XCLIENT NAME=test.example.com ADDR=192.168.1.1 250 Ok MAIL FROM:<test@example.com> 250 Ok RCPT TO:<david@schweikert.ch> 450 <david@schweikert.ch>: Recipient address rejected: Greylisted

slide-42
SLIDE 42

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Falle: Mails mit mehrere Empfänger

Postgrey fügt einen Header ein, falls es ein Delay verursacht hat Mehrere Empfänger → mehrere Header Lösung: Mit instance die Requests korrelieren und nur einmal den Header einfügen

slide-43
SLIDE 43

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Falle: Crash des Daemon

Postgrey: Crash wenn %n in der Absender-Adresse vorkommt Ursache: indirekt syslog (wie printf) wie ein puts gebraucht Konsequenz: 450 Server configuration problem Denial-of-Service!

slide-44
SLIDE 44

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Zusammenfassung

Sehr mächtig für spezielle Anwendungen. Kein Content-Filter! Aufpassen, wie es in Postfix konfiguriert wird Implementation muss robust sein: das ganze Mail-System hängt davon ab Net::Server und SQLite sind nützlich bei der Programmierung Alternative: Milter-Schnittstelle für Content-Filtering

slide-45
SLIDE 45

Postfix Policy Daemons David Schweikert

Filtering- Überblick

Before-Queue vs. After-Queue Was ist eine Access-Policy? Beispiel SMTP-Policies

Die Policy- Schnittstelle

Motivation für einen externen Prozess Das Protokoll Konfiguration in Postfix Milters

Implementation

Implementation mit spawn Implementation als einzelner Prozess Datenbanken Testen Typische Fallen Zusammenfassung

Fragen und Diskussion

Fragen und Diskussion