mail greylisting bei dnsbl eintrag

ich betreue nebenbei den ein oder anderen server und habe mir einige
gedanken darum gemacht wie ich das spamaufkommen in den mailboxen auf
diesen servern verringern kann. da nicht alle kisten die gleiche oder
wenigstens ähnliche konfiguration haben, bedingt durch die
unterschiedlichen anforderungen sind die umsetzungen immer etwas anders.
aber grundsätzlich ist mir da eine idee gekommen. also es gibt zwei
umstrittene (( aber auch im moment noch wirkungsvolle )) methoden um das
spamaufkommen das auf dem server aufschlägt zu verringern. zum einen
gibt es das sogenannte
greylisting, bei dem an den
einsendenden mailserver beim ersten verbindungsversuch ein fehler
gemeldet wird und zum anderen das blockieren von mails mittels
dnsbl (( dnsbl = DNS-based
Blackhole List, DNS = Domain Name System )). beide methoden haben ihre
vor und nachteile, die an anderen stellen ausführlich beleuchtet werden,
was ich aber hier nicht so ganz auswalzen will. meine konfiguration um
unter debian mit exim ein greylisting auf dnsbl basis durchzuführen ist
sehr simpel, aber effektiv. als erstes habe ich
postgrey als greylist server
installiert, der ab der version 1.26 auch die unterstützung für exim
liefert. das ganze funktioniert unter debian einfach mittels apt-get
install postgrey
. als nächstes muss in der datei
/etc/default/postgrey die konfiguration angepasst werden. falls nur
der exim support eingebunden werden soll, könnte diese anpassung wie
folgt aussehen: POSTGREY_OPTS="--exim --unix=/var/run/postgrey.sock"
dadurch bedingt ist der postgrey jetzt mit exim kompatibel und kann
benutzt werden. über man postgrey kann sich dann noch angeschaut
werden ob evtl. noch einige andere werte angepasst werden wollen, als
beispiel ist hier der delay zu nennen für das greylisting der
standardmässig bei 5 minuten (300 sekunden) liegt. jetzt kommt der
eigentlich spaß, die anpassung der exim konfiguration. davon ausgehen
das es schon eine acl acl_smtp_rcpt gibt muss hier nur noch eine
recht kleine anpassung stattfinden. bei mir nennt sich dieser bereich
acl_check_rcpt hier habe ich an erster stelle ein acl macro gesetzt.
{% highlight tcsh %}
warn set acl_m8 = request=smtpd_access_policy\nprotocol_state=RCPT\n
protocol_name=${uc:$received_protocol}\nhelo_name=$sender_helo_name\n
client_address=$sender_host_address\nclient_name=$sender_host_name\n
sender=$sender_address\nrecipient=$local_part@$domain\n\n
{% endhighlight %}

das wird benötigt damit der exim sich mit dem postgrey unterhalten kann,
gleich darunter ist dann der eigentlich konfigurationsblock zu finden
der ein greylisting durchführt wenn die absendende ip sich in einer
dnsbl befinden
{% highlight tcsh %}
defer dnslists = bl.spamcop.net :
zen.spamhaus.org :
list.dsbl.org
message = You are being greylisted because $sender_host_address
is listed at $dnslist_domain ($dnslist_value: $dnslist_text).
$sender_host_address is not yet authorized to
deliver mail from <$sender_address> to
<$local_part@$domain>. Please try later.
log_message = Greylisted ($sender_host_address is listed at
$dnslist_domain ($dnslist_value: $dnslist_text))
!senders = :
!hosts = ${if exists {/etc/exim4/local/do-not-greylist.conf}
{/etc/exim4/local/do-not-greylist.conf}{}}
!authenticated = *
domains = +local_domains : +relay_to_domains
verify = recipient/callout=20s,use_sender,defer_ok
set acl_m9 = ${sg{${readsocket{/var/run/postgrey.sock}{$acl_m8}{5s}{}{action=DUNNO}}}{action=}{}}
condition = ${if eq{${uc:${substr{0}{5}{$acl_m9}}}}{DEFER} {1}{0}}
{% endhighlight %}

die dnsbl können nach eigenem gusto angepasst werden und auch der text
ist frei wählbar. ich habe mich allerdings dazu entschlossen diesen
etwas sprechender zu gestalten damit ein absender auch den grund für das
greylisting erfährt. der log eintrag ist für die exim statistiken und
mittels existats kann ich danach suchen. wenn jetzt ein whitelist
eintrag gewünscht ist, der nicht schon durch den postgrey abgedeckt ist,
kann dieser durch die do-not-greylist.conf datei vom exim erstellt
werden. das macht es für mich einfacher das ganze zu pflegen und auch
über ein webinterface pflegbar zu halten. bedingt durch das greylisting
kommt es natürlich zu verzögerungen und damit es nachvollziehbar ist,
warum eine mail verspätet zugestellt wurde, für ich noch einen header
eintrag hinzu. dies wird einfach nach dem oben beschriebenen abschnitt
in die konfiguration eingefügt.
{% highlight tcsh %}
warn message = ${sg{$acl_m9}{^\w+\s*}{}}
condition = ${if eq{${uc:${substr_0_7:$acl_m9}}}{PREPEND} {1}{0}}
{% endhighlight %}

nach dem neustart von postgrey und exim kann man sowohl im mainlog von
exim als auch in mail.info verfolgen was passiert. postgrey logged,
solange syslog nicht umkonfiguriert ist nach mail.info, weswegen hier
die direkten einträge zu finden sind und im mainlog vom exim nur
mittelbar die einträge stehen, wenn eine mail abgewiesen worden ist. das
ganze ist sicherlich keine masterlösung und es ist nur eine frage der
zeit bis auch botnetze mit greylisting umgehen können. aber solange es
sich um dumme zombies handelt hilft es. bis die spammer wieder einen
schritt weiter sind, aber dann wird sich bestimmt auch eine lösung
finden. leider sind die konfigurationsabschnitte nicht wirklich gut
lesbar, mit ein wenig einrücken im editor sollte das ganze auch wieder
lesbar sein.
{% include JB/setup %}

Show Comments