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