Re: [Exim-users-de] Exim4 als Mailout

Top Page
Delete this message
Reply to this message
Author: Heiko Schlichting
Date:  
To: exim-users-de
Subject: Re: [Exim-users-de] Exim4 als Mailout
Patrick von der Hagen schrieb:
> Ich finde es ganz erstaunlich, wie sehr sich die Setups von FU Berlin
> und Uni Karlsruhe in diesem Bereich ähneln.


Wenn wir unabhängig von einander zu ähnlichen Lösungen kommen, ist das
definitiv ein Beleg dafür, dass wir auf dem richtigen Weg sind. :-)

> Allerdings verwenden wir derzeit nur RBLs und fehlende DNS-Einträge als
> Greylist-Kriterien. Eure regulären Ausdrücke würden mich interessieren,
> kannst Du die veröffentlichen?


Klar - ausser dem root-Passwort kann ich alles veröffentlichen.

Zur allgemeinen Belustigung schicke ich schon mal gleich den Ausschnitt aus
exim.conf mit, der bei uns für das Greylisting zuständig ist. Nochmal zur
Erinnerung: Ziel ist es, nur Rechner zu greylisten, die irgendwie
verdächtig sind. Anregungen zur Verbesserung oder Korrekturen sind immer
gern gesehen!

----------------- Ausschnitt aus exim.conf -----------------------------
EXIM_HOME = /server/exim
hostlist fub_hosts = 160.45.0.0/16 : 130.133.0.0/16 : 87.77.0.0/16
acl_smtp_rcpt = acl_check_rcpt

[...]

begin acl

#
# Accesslist für Greylisting
# accept ==> Greylisting
# deny ==> kein Greylisting
#
acl_check_greylisting:

    # Greylisting, wenn kein HELO/EHLO-Name übermittelt wurde
    accept  condition     = ${if !def:sender_helo_name}
        set acl_c1    = no HELO name given


    # Greylisting, wenn der HELO/EHLO-Name eine IP-Nummer (einschließlich einer
    # IP-Nummer in eckigen Klammern) ist
    accept  condition     = ${if isip4{${sg {$sender_helo_name}{[\\\[\\\]]}{}}}}
        set acl_c1    = HELO name ($sender_helo_name) is IP address


    # Greylisting, wenn die IP-Nummer nicht zu einem Hostname aufgelöst werden kann
    # (oder die umgekehrte Auflösung nicht passt)
    #
    # Eventuelle Ausnahmen sollten in der postgrey-whitelist konfiguriert werden
    accept  !verify      = reverse_host_lookup
        set acl_c1    = ${if def:sender_host_name \
                {verify $sender_host_name as reverse lookup of $sender_host_address failed} \
                {reverse lookup of $sender_host_address failed}}


    # Greylisting, wenn der Hostname auf einen der regulären Ausdrücke
    # in ~/server/etc/greylisting-hosts passt
    accept  hosts      = nwildlsearch;EXIM_HOME/server/etc/greylisting-hosts
        set acl_c1    = $sender_host_name matches greylisting-hosts regexp file


    # Greylisting, wenn der Absender auf einen der regulären Ausdrücke
    # in ~/server/etc/greylisting-senders passt
    accept  senders      = nwildlsearch;EXIM_HOME/server/etc/greylisting-senders
        set acl_c1    = $sender_address matches greylisting-senders regexp file


    # Greylisting, wenn Host in RBLs eingetragen ist
    accept  dnslists      = RBLLIST
        set acl_c1    = $sender_host_address is listed at $dnslist_domain


    deny


#
# Accesslist für RCPT
#
acl_check_rcpt:
[...]
    # Greylisting für Rechner, die in Dialup-Netzen oder RBLs eingetragen sind,
    # jedoch nicht für Systeme aus der FU oder für Absender "<>"
    # (wg. Callout-Prüfungen)
    defer   log_message   = greylisted $sender_host_address ($acl_c1)
        !senders      = :
        !hosts        = : +fub_hosts
        verify        = recipient/success_on_redirect
        acl          = acl_check_greylisting
        set acl_m3      = request=smtpd_access_policy\nprotocol_state=RCPT\nprotocol_name=${uc:$received_protocol}\nhelo_name=$sender_helo_name\nclient_address=$sender_host_address\nclient_name=$sender_host_name\nsender=$sender_address\nrecipient=$local_part@$domain\n\n
        set acl_m3    = ${sg{${readsocket{inet:relay2.zedat.fu-berlin.de:10023}{$acl_m3}{3s}{}{action=DUNNO}}}{action=}{}}
        message       = $sender_host_address is not yet authorized to deliver mail from <$sender_address> to <$local_part@$domain>. Please try later.
        condition     = ${if eq{${uc:${substr{0}{5}{$acl_m3}}}}{DEFER}{true}{false}}
[...]
------------------------------------------------------------------------


und hier die beiden in der ACL benutzten Dateien, nach denen Du eigentlich
gefragt hattest. Die beiden ersten Einträge matchen so häufig, so dass ich
diese extra nochmal als Pattern vor den regulären Ausdruck geschrieben
habe. Auch wenn Geschwindigkeit hier eigentlich überhaupt kein Problem ist,
spart das ein paar CPU-Zyklen gegenüber dem komplizierten Eintrag.

---------------------- greylisting-hosts -------------------------------
#
# Hostnamen, für die Greylisting durchgeführt werden soll
# 
# Zulässig sind hostnamen, pattern und reguläre Ausdrücke
# pattern:   *.a.b.c    --> alles, was auf .a.b.c endet
# regexp:    ^\d+\.b\.c    --> alles, was mit Ziffern beginnt und auf .b.c endet
#                WICHTIG: die regexp muss *IMMER* mit ^ beginnen.
#
# Der Lookup erfolgt case-insensitively.
#
*.dip.t-dialin.net
*.pppool.de
#
# ^regexp
#
^(.*([0-9._-]))?(abo|broadband|cabel|cable|catv|cbl|cidr|client|cust(omer)?s?|dhcp|dial?(in|up)?|d[iu]p|[asx]?dsld?|dyn(a(dsl|mic)?)?|home|in-addr|modem(cable)?|(di)?pool|ppp|ptr|rev|static|user)
^.*\d+-\d+-\d+-\d+
------------------------------------------------------------------------


--------------------- greylisting-senders ------------------------------
#
# Absender, für die Greylisting durchgeführt werden soll
#
# Zulässig sind pattern und reguläre Ausdrücke (letztere müssen mit ^ beginnen)
# Der Lookup erfolgt case-insensitively.
#
^.*@(volks|deutsche-)bank\.de
^.*@sparkasse\.de
------------------------------------------------------------------------

Heiko

Heiko Schlichting        | Freie Universität Berlin
heiko@???       | Zentraleinrichtung für Datenverarbeitung (ZEDAT)
Telefon +49 30 838-54327 | Fabeckstraße 32
Telefax +49 30 838454327 | 14195 Berlin