24 April 2008

Kollateral Spam Damage

Heute hatte ich dann die Schnauze endgültig voll. Spam mit meinem Absender im From: müllt mir das Postfach mit Fehlermledungen voll. Ich bin begeistert. Also hab' ich mal den großen Hammer ausgepackt: exim. Nachdem das unmotivierte Wegfiltern von Bounces eine saublöde Idee ist, hab' ich das etwas eleganter gelöst.

Trick ist: in alle ausgehende Mail frickle ich erst einen hinreichend unwahrscheinliche Headerzeile ein. Bounces sollen zumindest den Header der gebouncten Mail im Body haben, also ist auch meine Headerzeile drin.

Wenn also ein Bounce kommt, der diese Zeile nicht im Body hat, war die verursachende Mail nicht von mir und deshalb kann ich den Bounce direkt ablehnen (Doublebounce).

Mit exim unter debian (verteilte Config) geht das so:

transport/30_exim4-config_remote_smtp wird erweitert auf
### transport/30_exim4-config_remote_smtp
#################################
# This transport is used for delivering messages over SMTP connections.
remote_smtp:
headers_remove = "X-MRTLBRNFT-Hotongo:"
headers_add = "X-MRTLBRNFT-Hotongo: Palimbo 20080424"
debug_print = "T: remote_smtp for $local_part@$domain"
driver = smtp
Das fügt den recht unwahrscheinlichen X-MRTLBRNFT-Hotongo Header ein. Wenn schon einer da ist, wird der vorher zuerst entfernt, um einer unheimlichen Vermerung von X-MRTLBRNFT-Hotongo Headern vorzubeugen.

In main/02_exim4-config_options wird eine acl_send_data=acl_check_data installiert, die ich in acl/40_exim4-config_check_data damit erweitert habe:
# Noch was ganz krankes: Inzwischen wird ein X-MRTLBRNFT-Hotongo: Header
# in ausgehende Mails eingefügt. Wenn ein Bounce im Body diesen
# Header nicht hat, wird der Bounce gedoublebouncet. Verhindert
# Kollateralspam.
deny
message = This looks like collateral spam - original mail not from here
!hosts = 192.168.0.0/16
!regex = X-MRTLBRNFT-Hotongo: Palimbo 20080424
senders = :
log_message = Bounce ohne X-MRTLBRNFT-Hotongo im Body
Weil ich ein Angsthase bin, habe ich zuerst eine Testphase gefahren, in der ich das deny durch warn ersetzt hatte - das verhindert böse Überraschungen, da nur eine Warnung in die Message und das Log eingetragen wird.

Danach war Ruhe.

Keine Kommentare: