Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

LugBE Linux User Group Bern Markus Wernig 20. Oktober 2011 The Big Picture The fight against SPAM - IP-based - Header-based - Content-based The Theory:

Ähnliche Präsentationen


Präsentation zum Thema: "LugBE Linux User Group Bern Markus Wernig 20. Oktober 2011 The Big Picture The fight against SPAM - IP-based - Header-based - Content-based The Theory:"—  Präsentation transkript:

1 LugBE Linux User Group Bern Markus Wernig 20. Oktober 2011 The Big Picture The fight against SPAM - IP-based - Header-based - Content-based The Theory: DNSBL, DNSWL - How it works - How it came about - Who is in the game God rolls his own... Mailserver – Praxis und Hintergründe

2 LugBE Linux User Group Bern The Big Picture

3 LugBE Linux User Group Bern The fight against SPAM ● IP-based ● - DNS Black-/Whitelist Databases - Sender Policy Framework (SPF) - div. DNS-basierte Verifikationen ● Header-based - Domain Keys Identified Mail (DKIM) - RFC-Konsistenzchecks ● Content-based - Subject/Body Keywords (SpamAssassin etc.) - Content Hash Databases (Razor etc.) -...

4 LugBE Linux User Group Bern ● Der empfangende Mailserver prüft, ob die IP des (oder der) sendenden Mailservers in speziell für diesen Zweck geführten DNS-Zonen enthalten ist. ● Es existieren sowohl Black- als auch Whitelists ● Die Qualität dieser DNS entscheidet über den Erfolg ● False Positives ein Problem ● Kein Reverse Lookup How DNSB/WL works

5 LugBE Linux User Group Bern How DNSB/WL works ● Black-/Whitelists sind Zonen in DNS Domains. D.h. es wird der Domainname des Listenverantwortlichen (meist eine Subdomain pro Liste) benötigt ● Für den Lookup hat sich folgende Form durchgesetzt: IP: A.B.C.D Domain: liste.anbieter.com Lookup: D.C.B.A.liste.anbieter.com Wird die Adresse vom DNS gefunden, beantwortet er die Anfrage meist mit einer RFC1918-Adresse (z.B ) ● Die meisten Implementationen werten jede positive Antwort (d.h. die obige Anfrage liefert einen A-Record) als Hit. ● Manche Anbieter differenzieren zusätzlich mit der Antwort zwischen verschiedenen Typen von Hits (e.g für temporäre Einträge, für permanente)

6 LugBE Linux User Group Bern Who's in the game? ● Je nach Anbieter ist es mehr oder weniger schwierig auf und von einer solchen Liste zu kommen. Die meisten werden nicht mehr manuell gepflegt. ● Viele Mailserver kommen mit einer vordefinierten Liste von Anbietern. Diese müssen dann jedoch auch gepflegt werden. ● Die meisten Anbieter führen unterschiedliche Typen von Listen: ● - Blacklists von einzelnen Hosts - Blacklists von ganzen Netzblöcken (z.B. Dialup-Netze) ● Derzeitige Anbieter z.B. - spamhaus.org - barracudacentral.org - spamcop.net - surriel.com - dnswl.org

7 LugBE Linux User Group Bern MTA configuration Milter (dnsbl-milter + sendmail): Liste von Anbietern in dnsbl-milter beim Kompilieren anpassbar INPUT_MAIL_FILTER(`dnsbl-milter' sendmail.cf: O InputMailFilters=dnsbl-milter Xdnsbl-milter, S=:/var/run/milter/dnsbl-milter.sock, T=C:5m;S:20s;R:5m;E:10m,F=T ● MTA (sendmail FEATURE dnsbl): FEATURE(`dnsbl', `dnsbl.wernig.net', `"554 Rejected " $&{client_addr} " is known to have sent spam to this domain."')dnl sendmail.cf: # DNS based IP address spam list dnsbl.wernig.net R$* $: $&{client_addr} R$-.$-.$-.$- $: $(dnsbl $4.$3.$2.$1.dnsbl.wernig.net. $: OK $) R OK $: OKSOFAR R $+ $: TMPOK R $+ $#error $: "554 Rejected " $&{client_addr} " is known to have sent spam to this domain." ● SpamAssassin: skip_rbl_checks 0

8 LugBE Linux User Group Bern MTA configuration Oct 20 12:27:03 xfer-srv01-mail01 dnsbl-milter[6275]: [ID local6.info] p9KAQwI : dclient.hispeed.ch [ ] is blacklisted on zen.spamhaus.org Oct 20 12:27:03 xfer-srv01-mail01 dnsbl-milter[6275]: [ID local6.info] p9KAQwI : dclient.hispeed.ch [ ] is whitelisted on dnswl.wernig.net

9 LugBE Linux User Group Bern Roll your own: DNS /etc/bind/named.conf: key wernig-net-auth. { algorithm HMAC-MD5.SIG-ALG.REG.INT; secret aBC.....==; }; zone "dnswl.wernig.net" in { type master; file "dnswl.wernig.net.zone"; allow-update { key "wernig-net-auth."; }; allow-query { any; }; notify yes; }; zone "dnsbl.wernig.net" in { type master; file "dnsbl.wernig.net.zone"; allow-update { key "wernig-net-auth."; }; allow-query { any; }; notify yes; };

10 LugBE Linux User Group Bern Roll your own: DNS /etc/mail/ipextract.pl: #!/usr/local/bin/perl -w # ipextract.pl # Extract IP of original sender from message # # Copyright # This is free software. Use it under the GPLv2 terms. # use Net::DNS; use Net::Syslog; my $senderip; My $NAMESERVER = ' '; while(<>) { # break if we find "Content-Type", which comes after the transport headers with our IPs /(Content-Type|Subject):/i and last; # Skip line if not containing "Received:" /Received:/ or next; chomp($_); ($senderip = $_) =~ s/(.*)[\(\[](([01]?\d\d?|2[0-4]\d|25[0- 5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0- 5])\.([01]?\d\d?|2[0-4]\d|25[0-5]))[\)\]](.*)/$2/;

11 LugBE Linux User Group Bern Roll your own: DNS # exit if not an IP address # From O'Reilly's Mastering Regular Expressions (found on perlmonks.org) $senderip =~ m/^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0- 5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/ or exit; # exit if * or RFC1918 $senderip =~ m/^127\.0\.0\.([01]?\d\d?|2[0-4]\d|25[0-5])$/ and exit; $senderip =~ m/^192\.168(\.([01]?\d\d?|2[0-4]\d|25[0-5])){2,2}$/ and exit; $senderip =~ m/^172\.(1[6-9]|2\d|3[0-1])(\.([01]?\d\d?|2[0-4]\d|25[0-5])){2,2}$/ and exit; $senderip =~ m/^10(\.([01]?\d\d?|2[0-4]\d|25[0-5])){3,3}$/ and exit; print "registering $senderip\n"; my ($A, $B, $C, $D) = split(/\./, $senderip); my $host ="$D.$C.$B.$A"; my $domain = "dnsbl.wernig.net"; my $keyname="wernig-net-auth"; My $key="aBC...=="; my $update = Net::DNS::Update->new($domain); $update->push(pre => nxrrset("${host}.${domain}. A")); $update->push(update => rr_add("${host}.${domain} 3600 A ")); $update->sign_tsig($keyname, $key);

12 LugBE Linux User Group Bern Roll your own: DNS # Send the update to the zone's primary master. my $res = Net::DNS::Resolver->new; $res->nameservers($NAMESERVER); my $syslog=new Net::Syslog(Facility=>'mail',Priority=>'info'); my $reply = $res->send($update); if ($reply) { if ($reply->header->rcode eq 'NOERROR') { $syslog->send("Update for $host.$domain succeeded",Priority=>'info'); } else { $syslog->send("Update for $host.$domain failed: ". $reply->header->rcode, Priority=>'info'); } } else { $syslog->send("Update for $host.$domain failed (no reply): ". $res->errorstring, Priority=>'info'); }

13 LugBE Linux User Group Bern Roll your own: DNS cron: #!/bin/sh cd /var/spool/imap/user/Junk /usr/local/bin/sa-learn --spam --dbpath /var/lib/spamassassin/bayes/bayes *. for i in *.; do if [ -f "$i" ]; then cat $i | /etc/mail/ipextract.pl razor-report -home=/etc/mail/spamassassin/razor -f $i fi done


Herunterladen ppt "LugBE Linux User Group Bern Markus Wernig 20. Oktober 2011 The Big Picture The fight against SPAM - IP-based - Header-based - Content-based The Theory:"

Ähnliche Präsentationen


Google-Anzeigen