Sådan bruges DNS block lister til Detect Spam

En af løsningerne på spam er en -frequent updated- database med IP-adresser, der synes at være uartig. Databasen skal helst være tilfældig tilgængelige ved høj hastighed. DNS tilbyder en løsning til det.

Introduction.
Heldigvis Internettet har fundet svar på de immens voksende spam problem. En løsning er en -frequent updated- database med IP-adresser, der synes at være uartig. Databasen skal helst være tilfældig tilgængelige ved høj hastighed. DNS tilbyder en løsning til det.

DNS-indgange kan opdateres hurtigt. Også, for det meste er der ingen grund til at hente en kopi af den (potentielt store) database ofte. Hvis en mailserver kan registrere, i en brøkdel af et sekund, at den afsendende IP øjeblikket er sortlistet, for eksempel fordi den er inficeret med en virus, og bruges som open relay, kan det effictively blokere modtagelse.

Et velkendt DNSBL udbyder er spamhouse.org. For en (komplet) liste over DNSBL udbydere, se her

Anvendelse
Både SMTP-servere og e-mail-klienter (eller postkasse rengøringsmidler) kan bruge denne metode. Stien en mail gik altid gemt, så du altid kan hente oprindelse IP. Dette er en vigtig del af SMTP-protokollen.

Bruger POP3-protokollen, kan du se en brevkasse, top (top betyder hente kun brevhovedet) overskrifter i meddelelser og se, om de er blacklistet ved at se på de "Modtaget: fra somehost (1.2.3.4)" linjer.

Da disse spam-databaser kan opdateres ofte, kan de effektivt opdage en stor mængde (> 50%?) Af spam.

Hvordan virker det

Dybest set, hvad du skal gøre, er at kontrollere mod en DNSBL (DNS Bloklist) kilde, ligesom
www.spamhaus.org. Dette gøres på følgende måde:

Antag, at du ønsker at kontrollere, om IP adresse 60.70.80.90 er en spammer, du blot udføre en DNS forespørgsel til sbl.spamhaus.org med (omvendt) ip-adresse indsat, ligesom
forespørgsel dns: 90.80.70.60.sbl.spamhaus.org
hvis du får tilbage en A record, det er en spammer. hvis du får tilbage ingenting, denne IP er ikke på listen spam.

Test det
Du kan nemt kontrollere dette ved hjælp af kommandoen "ping".
Hvis du vil gøre:
ping 90.80.70.60.sbl.spamhaus.org, så er der to muligheder:
* Du får 'ukendt vært' budskab. Det er ok, at IP ikke blacklisted.
* Du får '127.0.0.x', hvor x> 1, ligesom 127.0.0.2. X betegner en statuskode. Generelt 2 anvendes til (semi) permanent netblocks, og 4 anvendes til "åbne proxies« (ligesom: maskiner inficeret af en virus).

Eksempel
Jeg bruger denne enhed succes i en mail-klient. Lubos har integreret denne enhed med succes i en SMTP / POP3 server suite.

du kan bruge denne enhed med eller uden synapse TCP / IP-bibliotek ved at sætte {$ DEFINE SYNAPSE} direktiv.

spamchck.pas

enhed spamchck;

grænseflade

// Forespørgslens den spamhaus.org database over spammere

bruger Klasser, SysUtils, {$ ifdef SYNAPSE} SynaUtil, SynSock {$ ELSE} WinSock {$ ENDIF};

typen
TSpamCheck = klasse (TObject)
beskyttet
offentlige
FDNSBL: String; // DNS Bloklist
konstruktør Opret;
fungere IsSpammer (IP: String): Integer; overbelastning;
fungere IsSpammer (MailHeader: TStrings): Integer; overbelastning;
ende;

implementering

{TSpamCheck}

konstruktør TSpamCheck.Create;
begynde
arvet;
FDNSBL: = 'sbl-xbl.spamhaus.org «;
// Alternativt bruge sbl.spamhaus.org (spam) eller
// Xbl.spamhaus.org (åbne relæer, proxys)
// Eller en alternativ kilde DNSBL kilde.
// SBL-XBL er den kombinerede liste.
ende;

funktion TSpamCheck.IsSpammer (IP: String): Integer;
var RevIP: String;
I: Integer;
p: PHostEnt;
begynde
// Søge i databasen
// Først vende IP
Resultat: = -1;
{$ Ifdef SYNAPSE}
hvis IsIP (IP) og derefter
{$ ENDIF}
begynde
// Reverse IP
RevIP: = '';
for i: = 0-2 gøre
begynde
RevIP: ». '= + Copy (". "IP, 1, pos (IP) -1) + RevIP;
IP: = Kopier (IP, pos (, IP) +1, MAXINT '.');
ende;
RevIP: = IP + RevIP;

// Nu søge i databasen:
RevIP: = RevIP + '. « + FDNSBL;
p: = gethostbyname (PChar (RevIP));
hvis Tildelt (p), så
begynde // Resultaterne komme tilbage som 127.0.0.x hvor x> 1
// 127.0.0.2 = spam
// 127.0.0.4 = åben relæ etc.
Resultat: = byte (p ^ .h_addr ^ .S_un_b.s_b4);
ende
ellers // ingen dns post fundet, markere den som sikker:
Resultat: = 0;
ende;

ende;

fungere TSpamCheck.IsSpammer (MailHeader: TStrings): Integer;
Var v, ip: String;
Jeg, r: Integer;
begynde
// Parse en email header
// Se efter "Modtaget" header
// Ekstrakt IP-adresse, antager form «modtaget: fra (abcd) ved (wxyz)
// Godkend denne IP-adresse på SpamHaus.
I: = 0;
Resultat: = -1;
mens jeg <MailHeader.Count do
begynde
hvis pos (»modtaget:», små bogstaver (MailHeader [i])) = 1 derefter
begynde
v: = MailHeader [i];
// Søgen efter yderligere overskrifter:
while ((i + 1) <MailHeader.Count) og
(MailHeader [i + 1] <> ''), og
(MailHeader [i + 1] [1] = '') gør
begynde
inc (I);
v: = V + MailHeader [i];
ende;
// V indeholder nu en linje, finde fra ip-adresse:
v: = små bogstaver (v);
// Efter:
// Modtaget: fra somehost.com (1.2.3.4).
v: = kopi (v, pos ("fra", v) +4, MAXINT);
v: = kopi (v, pos ('(', v) +1, MAXINT);
v: = kopi (v, 1, pos ('), v) -1);

hvis pos (»[', v)> 0 så
// Gyldigt format er også:
// Modtaget: fra somehost.com (somehost.com [1.2.3.4])
begynde
v: = kopi (v, pos ('[', v) +1, MAXINT);
v: = kopi (v, 1, pos ('] «, v-1));
ende;

Resultat: = IsSpammer (v);

// En enkelt modtaget linje er tilstrækkelig
hvis resultat> 0 så
break;
//
ende;
inc (I);
ende;
ende;

ende.