Het hol van de Code

2 december, 2006

Bouw uw eigen spamfilter met PHP en DNSBLs

Filed onder: PHP - het 1:04 p.m. van Brian @

Bent u ooit een e-mail vragend of behoefte geworden bepaalde delen van uw lichaam, delen vergrootten geen die u zelfs zou kunnen hebben? Volgende e-mail u één vroeg of lees wilt u de duim losmaken u onlangs hebt bereikt? Merkte u ooit hoe op deze e-mail altijd van mensen zijn dat u hebt niets vrij zekere bent met de inhoud van e-mail te doen. Verzond MTeresa@Vatican.org werkelijk die dieetpil e-mail? Bent u teruggekeerd ooit geworden of verworpen „niet kunnen geleverde“ e-mail van gericht u nooit ooit hebben verzonden een e-mail naar zijn?

Ik heb.

SPAM. Het is AFSCHUWELIJK! Mijn e-maildoos voor Brian@TheCodeCave.com wordt waarschijnlijk 3 tot 1 spam over echte e-mail. Ik verwachtte dat. Ik zette dat adres uit overal en bescherm het niet. Het moet mijn openbaar adres zijn. Maar VAN adressen op al dat e-mail wijst nooit op wie e-mail werkelijk van is. Zelfs wordt de bedrijfinformatie binnen de e-mailkopbal vervalst. Spammers zullen someother naam op hun spamlijst grijpen en zullen het als hun van adres gebruiken. Ik heb mijn naam gezet in van adres van e-mail een paar keer gehad. Het is een lastig probleem, vraag enkel de KernAmerikaanse elanden.

Waarom dit kan gebeuren is een lang verhaal. Het allen brengt terug naar het feit met elkaar in verband dat SMTP en haven 25 nooit voor het voorleggen van e-mail aan e-mailservers werden bedoeld. SMTP werd slechts bedoeld voor server aan server mededelingen. Nochtans, is dat voor een verschillende post. Lang en kort van het is dat alles behalve één ding kan worden vervalst: het IP adres van de server die e-mail verzond.

Omdat dat IP adres nauwkeurig is, kunt u het gebruiken om te vertellen als de persoon die e-mail verzond een spammer is. De post vertelt u een paarmanieren om dat te doen. En omdat dit het Hol van de Code is, wordt u volledig a - functionele php routine aan laars.

Laat me eerst u tonen wat ik over spreek. E-mail bevatten veel informatie geen die u normaal ziet. Het grootste deel van die informatie is in de kopbal van e-mail. Elke e-mailcliënt heeft verschillende manieren om e-mailkopballen te tonen. U zou het kunnen vinden door de eigenschappen van e-mail te bekijken. In Vooruitzichten, kunt u het zien door, van een open e-mail, View->Options te kiezen. Het zal daar onder de naam van de „Kopballen van Internet“ zijn.

Hier is wat één e-mailkopbal als dat kwam terug aan me in Juni keek:

Citaat:

Terugkeer-weg: <tkuhnel@alushiptechnology.com>
Levering-datum: Mon, 26 Jun 2006 23:53: 47 -0400
Ont*vangen-SPF: niets (mxus6: 74.139.17.40 wordt noch toegelaten noch door domein van alushiptechnology.com) client-ip= 74.139.17.40 ontkend; envelope-from=tkuhnel@alushiptechnology.com; helo=Laskowski6;
Ontvangen: van [74.139.17.40] (helo=Laskowski6)
door mx.perfora.net (node=mxus6) met ESMTP (Wraakgodin),
identiteitskaart 0MKvMg-1Fv4dv28vt-0006m9 voor brian@thecodecave.com; Mon, 26 Jun 2006 23:53: 47 -0400
Van: „Adam Field“ <tkuhnel@alushiptechnology.com>
Aan: <brian@thecodecave.com>
Onderwerp: RICARDO onderzocht BENJAMIN a gelieve van
Datum: Tue, 27 Jun 2006 03:53: 44 +0480
Nabootsenen-versie: 1.0
Tevreden-type: meerdelig/verwant;
type= " meerdelig/alternatief ";
boundary= " - - =_NextPart_000_006A_01C69962.9CE1DB50 "
X-prioriteit: 3
X-MSMail-prioriteit: Normaal
X-Mailer: Microsoft Outlook Express 6.00.2900.2670
X-MimeOLE: Geproduceerd door Microsoft MimeOLE V6.00.2900.2670
Bericht-identiteitskaart: <0MKvMg-1Fv4dv28vt-0006m9@mx.perfora.net>
Envelop-aan: brian@thecodecave.com

Bijna elk van dat informatie in er over wie dit materiaal verzond huisvuil is. „alushiptechnology.com“ had niets met e-mail te doen. Slechte TKuhnel had zeker niets met het te doen. He/She heeft enkel hun e-mailadres daar in de spamgegevensbestanden. Google toont zelfs 10 of meer namen verbonden aan dit slechte shlep.

Maar het geheim is dat „client-ip= 74.139.17.40 ″ in de Ontvangen SPF kopbal nauwkeurig is. Dat is de machine die spam verzond. En als het één spam verzond, is het vrij waarschijnlijk dat het meer heeft verzonden. Dat is wanneer DNSBLs binnen komt. DNSBL betekent de Zwarte Lijst van de Server van de Naam van het Domein. Gewoonlijk worden deze lijsten geproduceerd door een e-mailadres te creëren dat nooit voor echt gebruik wordt bedoeld. Dan om het even welke e-mail die bij dat adres aankomen is, per definitie, spam. Deze adressen worden genoemd Vallen SPAM. En de plaatsen waar zij worden gevestigd worden vaak genoemd de Potten van de Honing.

Deze lijsten van spammerIP adres worden ter beschikking gesteld van iedereen iedereen wie hen wil gebruiken. Neem een blik bij hoe een ander IP adres, 202.177.183.110, door diverse DNSBLs wordt geïdentificeerdl:

DNSBL - Resultaat (Reden)
VERMELDE AHBL - (127.0.0.3)
VERMELDE CBL - (127.0.0.2)
VERMELD DNSBLNETAUOSPS - (127.0.0.2)
VERMELD DNSBLNETAUT1 - (127.0.0.2)
VERMELDE DSBL - (127.0.0.2)
VERMELD DSBLALL - (127.0.0.2)
VERMELD EMAILBASURA - (127.0.0.2)
VERMELD NJABLPROXIES - (127.0.0.9)
VERMELDE PSBL - (127.0.0.2)
VERMELDE SBL-XBL - (127.0.0.2)
VERMELD SORBS-HTTP - (127.0.0.2)
VERMELDE SORBS-SOKKEN - (127.0.0.3)
TQM-DYNAMISCH - VERMELD (127.0.0.2)
VERMELDE TQM-SPAMTRAP - (127.0.0.3)
VERMELD UCEPROTECTL1 - (127.0.0.2)

Duidelijk werd dit adres gebruikt door een spammer. Maar hoe u uit dit kunt voordeel halen?

Goed, één van twee manieren. Eerst kunt u deze plaatsen contacteren DNSBL en de lijst downloaden. Of u kunt hen vragen om één enkel adres tegelijkertijd te verwerken. Dat is wat mijn routine doet. Het neemt een IP adres (202.177.183.110) en formatteert het als dit: 110.183.177.202.bl.spamcannibal.org voor elke spamlijst die ik heb willen om controleren. Dan roep ik een GetHostByName om die server te vragen die die gastheer werkelijk is. Als ik de nauwkeurige zelfde tekst terugkrijg die ik verzond, dan weet ik het adres schoon is. Als ik iets als 127.0.0.2 terugkrijg, weet ik dat het adres in hun DNSBL om reden #2 vermeld is (wat dat aan hen betekent). 127.0.0.3 zou op reden 3 wijzen.

Wanneer dat gebeurt, schrapt mijn routine e-mail.

Wat ik hier post is mijn inleidende versie. Ik heb een volledigere versie die meer geoptimaliseerd is en veel aardiger is aan DNSBLs. Ik zal dat aan iedereen geven wie een schenking aan de plaats maakt en om het verzoekt. Ik zou willen beginnen iets uit deze plaats een weinig te worden en deze routine voegt wat echte waarde toe. Zijn geëlimineerden 98% van mijn SPAM e-mail. Ik ben zeker genoeg daarin dat ik het geplaatst heb om e-mail zonder mijn gelijk permanent te schrappen ziend hen. Deze versie doet dat niet en als het te vaak wordt gebruikt, kon het uw verzoeken veroorzaken om door DNSBLs worden genegeerd. Ik zal ook een grote lijst van alle naamservers verstrekken ik heb en sommige hulpmiddelen verstrek u kunt gebruiken om uw lijsten te stemmen.

Hier is de downloadverbinding:
http://www.thecodecave.com/downloads/php/TCCSpamFilter.php.txt

PHP:
  1. <? php
  2. // *************************************************************************
  3. // TCCSpamFilter.php                                            11/27/2006
  4. // dat door Brian Layman wordt geschreven
  5. //
  6. // a- PHP voorbeeld dat aan filter spam van een webmailrekening wordt uitgeschreven.
  7. // verstrekt een voorbeeld van het filtreren DNSBL via de raadplegingen van de domeinnaam.
  8. // ziet http://www.thecodecave.com/article288 voor details
  9. //
  10. // Gebruik:
  11. //    Pas het wachtwoord aan, plaats het op uw website, en roep het.
  12. //    Alternatief, voeg het aan uw dossier van het cronlusje met een lijn als dit toe:
  13. //    00.15.30.45 * * * * wget - q http://www.example.com/ISpamFilter.php
  14. //
  15. // WAARSCHUWING: GEBRUIK VAKER DIT MANUSCRIPT NIET DAN ELKE MINUUT 15.
  16. // dat u zal worden geblokkeerd als u op deze wijze misbruikt de diensten DNSBL.
  17. // heb ik een geoptimaliseerde versie van dit manuscript geschreven dat kan worden in werking gesteld
  18. // zal eens per minuut en VEEL minder verkeer dan deze versie produceren.
  19. // iedereen wie een schenking aan de plaats maakt, en verzoekt om die bron
  20. // kan het krijgen.
  21. //
  22. De Originele Auteur van // - Brian Layman
  23. //
  24. GecreÃërd //       - 27/Nov/2006
  25. // Gewijzigd Laatste - 02/Dec/2006
  26. // Medewerkers: (Gezet uw naam & Initialen bij de bovenkant)
  27. //   Brian Layman - BL - http://www.TheCodeCave.com
  28. //
  29. //
  30. // Geschiedenis:
  31. //   27/Nov/2006 - GecreÃërd BL -
  32. //   02/Dec/2006 - BL - het Verdere Schoonmaken.  Definitieve commentaren over Rot13
  33. //
  34. // Vergunning - als dit u - Groot helpt! Gebruik het; wijzig het; deel het,
  35. //           verbinding terug naar mijn plaats.
  36. //
  37. // Schadevergoeding -
  38. //   Gebruik dit dossier op uw eigen risico. Ik ga niet doelbewust binnendringen in een beveiligd computersysteem
  39. //   uw server, maar anderen zouden kunnen. Ik kan of kan zich niet ongerust gemaakt te hebben
  40. //   ongeveer veiligheid toen ik deze routine schreef.  Het is aan U te maken
  41. //   bepaald dat OM HET EVEN WELKE routines die u op uw Plaats zet veilig zijn. Enkel
  42. //   omdat u een variabele ziet die hier door AddSlashes wordt beschermd of
  43. //   HTMLSpecialChar betekent niet dat ALLE variabelen beschermd zijn.
  44. //
  45. //   Als dit dossier een gat in uw plaats toestaat, is het niet mijn fout. In
  46. //   het feit, zou u dit dossier tegenhouden en op dit ogenblik enkel moeten schrappen.  Voor als
  47. //   het veroorzaakt dat blauwe rook worden uitgezonden van uw Webserver, als het
  48. //   stelt uw zaken URL terug om aan MyClientsSuck.com te richten, of als het
  49. //   veroorzaakt uw zuster verdelen met haar advocaatvriend en begin
  50. //   daterend een caver, is het niet mijn fout. (Eigenlijk dat de laatstgenoemde zou kunnen
  51. //   ben een verbetering, maar het is nog niet mijn fout.) U is
  52. //   verantwoordelijk voor UW plaats.  Leer hoe te beschermde het en begrijpen
  53. //   wat elke lijn van code doet dat u gebruikt.
  54. //
  55. // Schenkingen - als dit partijdossier u werkelijk uit helpt, voel vrij te maken
  56. //   schenk een espresso via Paypal aan Brian@TheCodeCave.com of enkel
  57. //   verlaat een commentaar in http://www.thecodecave.com/did-that-help en
  58. //   omvat uw land van herkomst.
  59.  
  60. /*********************************************************************************/
  61. /*                             De Routines van de steun                                  */
  62. /*********************************************************************************/
  63.  
  64.  
  65. // *******************************************************************************
  66. // IP in NIET de MOMENTEEL GEBRUIKTE Waaier van het Masker -
  67. // staat toe filtrerend via IP maskers enkel zoals een de normale netwerkconfiguraties.
  68. // Voorbeeld: ipinmaskrange („192.168.100.0“, „255.255.255.0“, „192.168.100.20“)
  69. // keert waar terug omdat het voorbeeld in het netwerk is
  70. // Example2: ipinmaskrange („192.168.100.0“, „255.255.255.0“, „192.168.101.20“)
  71. // keert vals terug omdat het voorbeeld buiten het netwerk is
  72. // *******************************************************************************
  73. functie ipinmaskrange ($network, $mask, $ip) {
  74.     $ip_long=ip2long ($ip);
  75.     $network_long=ip2long ($network);
  76.     $mask_long=ip2long ($mask);
  77.  
  78.     als (($ip_long & $mask_long) == $network_long) {
  79.         ware terugkeer;
  80.     } anders {
  81.         valse terugkeer;
  82.     }
  83. }
  84.  
  85. // *******************************************************************************
  86. // IP in Waaier
  87. // specificeert een waaier in de vorm ab en de routine keert waar terug als overgegaan
  88. // IP het adres is in dat gamma.
  89. // Voorbeeld: ipinrange („192.168.100.0 - 192.168.100.255“, „192.168.100.20“)
  90. // keert waar terug omdat het voorbeeld in het netwerk is
  91. // Example2: ipinrange („192.168.100.0 - 192.168.100.255“, „192.168.101.20“)
  92. // keert vals terug omdat het voorbeeld buiten het netwerk is
  93. // *******************************************************************************
  94. functie ipinrange ($range, $ip) {
  95.   $range = explodeer („-“, $range);
  96.   $rangestart = ip2long ($range [0]);
  97.   $rangeend = ip2long ($range [1]);
  98.   $remote_ip = ip2long ($ip);
  99.   als (($remote_ip>= $rangestart) && ($remote_ip <= $rangeend)) {
  100.     ware terugkeer;
  101.   }
  102.   anders {
  103.     valse terugkeer;
  104.   }
  105. }
  106.  
  107. // *******************************************************************************
  108. // IMAP krijgt Volledige Kopbal
  109. // (Dank JamieD - http://www.codingforums.com/archive/index.php?t-89994.html)
  110. // keert een serie terug die de oorspronkelijke berichtkopbal bevat
  111. // *******************************************************************************
  112. functie imap_get_full_header ($p_stream, $p_msg_number)
  113. {
  114.     $header_string = imap_fetchheader ($p_stream, $p_msg_number);
  115.     $header_array = explodeer („\ n „, $header_string);
  116.     foreach ($header_array als $line)
  117.     {
  118.         als (eregi („^ ([^:]*): (. *)“, $line, $arg))
  119.         {
  120.             $header_obj [$arg [1]] = $arg [2];
  121.             $last = $arg [1];
  122.         }
  123.         anders
  124.         {
  125.             $header_obj [$last]. = „\ n „. $line;
  126.         }
  127.     }
  128.     terugkeer ($header_obj);
  129. }
  130.  
  131.  
  132. // *******************************************************************************
  133. // Geblokkeerde IP
  134. // voert een DNS controle tegen een specifiek IP adres uit.
  135. // de Server van de Naam van het Domein zet het gebruik (van DNSBLs op de zwarte lijst) deze methode om te verklaren of
  136. // e-mail is verzonden van een IP adres dat om is gekend te verzenden spam.
  137. // *******************************************************************************
  138. functie BlockedIP ($Suspect_IP, $DNSvr_Address)
  139. {
  140.     $ReverseOrderedIP = array_reverse (explodeer (`. ', $Suspect_IP));
  141.     $FullLookupAddress = implodeer (`. ', $ReverseOrderedIP). `. '. $DNSvr_Address;
  142.     als ($FullLookupAddress! = gethostbyname ($FullLookupAddress)) {
  143.       ware terugkeer;
  144.     } anders {
  145.       valse terugkeer;
  146.     }
  147. }
  148.  
  149. // *******************************************************************************
  150. De Afzender IP van //
  151. // Gegeven een brievenbus en berichtaantal, deze routine keert het IP adres van terug
  152. // computer die e-mail verzond.  „Van“ adres kan worden vervalst, dit IP
  153. // het adres kan niet.
  154. // *******************************************************************************
  155. functie senderip ($mbox, $num) {
  156.   $struct = imap_get_full_header ($mbox, $num);
  157.   $str_in = $struct [`ont*vangen-SPF'];
  158.  
  159.   $tween= „“;  // nodig niet maar goede praktijk wanneer het toevoegen
  160.   $chr1= `client-ip=';
  161.   $chr2= `; ';
  162.  
  163.   voor ($i=strpos ($str_in, $chr1) +10; $i<strpos ($str_in, $chr2); $i++) {
  164.     $tween=$tween.$str_in [$i];
  165.   }
  166.   terugkeer $tween;
  167. }
  168.  
  169. // *******************************************************************************
  170. Vermeld // is Zwart
  171. // dit de kernroutine.  Gezien een IP adres, stelt het sommige controles in werking om te beslissen als
  172. // e-mail van vermeld zwart spammer werd verzonden.
  173. // Gebruik: $is_it_spam = isblacklisted („192.168.100.1“);
  174. // *******************************************************************************
  175. de functie isblacklisted ($ip) {
  176.   // als er sommige mensen zijn die ik nooit zelfs heb willen om een e-mail aan merken, ik zetten=zou=
  177.   // hun IP adres in blacklist zich uitstrekt.
  178.   // Voorbeeld: $BlackList = serie („192.168.100.1 - 192.168.100.5“, „192.168.102.112 - 192.168.102.112“);
  179.   $BlackList = serie ();
  180.  
  181.  
  182.   // als er sommige mensen zijn die als spammers door de blokkerende dienst worden verklaard die ik heb willen om gebruiken
  183.   // zou ik hen in de witte lijst verklaren.
  184.   $WhiteList = serie („64.233.160.0 - 64.233.191.255 ″, // Google post wordt toegestaan
  185.                      „12.196.88.128 - 12.196.88.159 ″); // A valse lijst toe te schrijven aan virusbesmetting die is gezuiverd.
  186.  
  187.   // wit de lijstlidmaatschap van de Controle eerst om optimaliseringsredenen.
  188.   $allowed = vals;
  189.   foreach ($WhiteList als $range) {
  190.     als (ipinrange ($range, $ip)) {
  191.       $allowed=true;
  192.     }
  193.   }
  194.  
  195.   // als dit adres geen vrije pas krijgt, controleert het verder.
  196.   als (! $allowed) {
  197.     // herhaalt de zwarte lijsten en controleert het ip adres tegen hen
  198.     foreach ($BlackList als $range) {
  199.       als (ipinrange ($range, $ip)) {
  200.         $blocked=true;
  201.       }
  202.     }
  203.  
  204.     // PHP het gebruik de „Evaluatie van de Kortsluiting“ zo zodra bij waar wordt geraakt, de routine gaat uit weg.
  205.     // Deze verklaring met de lokale controle, en toen DNSBLs van eerst zou moeten worden geoptimaliseerd
  206.     // het meest inclusief aan de minst.  U wilt als weinig externe controles doen mogelijk.
  207.     // de volledige versie van dit manuscript met verscheidene andere geadviseerde DNSBLs en mijn volledige lijst komt
  208.     // van DNSBLs waarvan ik bewust ben.
  209.     terugkeer ($blocked ||
  210.            (BlockedIP ($ip, `bl.spamcop.net')) ||
  211.            (BlockedIP ($ip, 'sblxbl.spamhaus.org')) ||
  212.            (BlockedIP ($ip, `dnsbl2.uceprotect.net')) ||
  213.            (BlockedIP ($ip, `blackholes.fivetensg.com')) ||
  214.            (BlockedIP ($ip, `bl.spamcannibal.org')) ||
  215.           (vals));
  216.   }
  217.   anders {
  218.     valse terugkeer;
  219.   }
  220. // BLOKKEERT NOOIT MET: BLARSBL, FIVETENIGNORE, FIVETENSRC, JAMMDNSBL, SPAMBAG, SPUIT (dit blok grote IP gamma)
  221. // BLOKKEERT NOOIT MET: Kaart-DUL, sorbs-DUHL (deze maken een lijst bewust van IPs die lijst aan geen criteria voldoen).
  222. }
  223.  
  224.  
  225. // Deze routine herhaalt alle e-mail op de server en de controles als zij spam zijn.
  226. // als zij zijn het schrapt hen.  Omdat het een server IMAP is, zijn zij nog online
  227. // als u wenst om hen te verwijderen, gebruikt een zuiveringsbevel.
  228. functie blockspam ($MAILSERVER, $PHP_AUTH_USER, $PHP_AUTH_PW) {
  229.   $mbox=imap_open ($MAILSERVER, $PHP_AUTH_USER, $PHP_AUTH_PW);
  230.  
  231.   // in deze voorbeeldversie, dit herhaalt ALLE berichten in uw brievenbus.
  232.   // de volledige versie herhaalt slechts de nieuwe berichten die binnen zijn gekomen.
  233.   // door te doen dat, u deze controle kunt zo vaak in werking stellen zoals eens eens per minuut en veel hebt
  234.   // minder verkeer dat de controle in werking stelt eens per uur.  Als u de dienst DNSBL misbruikt, zouden zij kunnen
  235.   // blok uw IP adres.
  236.   voor ($x=0; $x <imap_num_msg ($mbox); $x++) {
  237.      $idx= ($x+1);
  238.      $ip=senderip ($mbox, $idx);
  239.      als (isblacklisted ($ip)) {
  240.        imap_delete ($mbox, $idx);
  241.      }
  242.   }
  243.   imap_close ($mbox);
  244. }
  245.  
  246. /*********************************************************************************/
  247. /*                                   Hoofd Vraag                                  */
  248. /*********************************************************************************/
  249.   // Deze aanvankelijke versie slechts met imapservers werkt.  Dat betekent u gebruikt
  250.   // haven 143.
  251.   // Uncomment deze lijn en gezet in uw e-mailserver, e-maillogin en wachtwoord
  252.   // blockspam („{imap.example.com: 143}“, „you@example.com“, „yourpassword“);
  253.  
  254.   // dat ik niet houd van opslaand de wachtwoorden in gewone teksten.  U kunt Rot13 als a gebruiken
  255.   // werkelijk eenvoudige encryptiemethode dan u dit dossier op het uw scherm kunt hebben
  256.   // zonder een voorbijganger die uw e-mailwachtwoord ziet.  Rot13 maakt het niet veilig
  257.   // geen bidirectionele encyrption in bron, maar het zal het wandelen ogen blokkeren.
  258.   // Gebruik http://rot13.thecodecave.com om te worden encyrpted versies van de tekst.
  259.   // dat boven lijn iets in die aard zou kijken:
  260.   // blockspam (str_rot13 („{vznc.rknzcyr.pbz: 143}“), str_rot13 („lbh@rknzcyr.pbz“), str_rot13 („lbhecnffjbeq“));
  261.  
  262.   // als u veelvoudige rekeningen hebt, voegt een andere blok spam lijn toe.
  263.  
  264. ? >

Geen Commentaren “

Geen commentaren nog.

Voer RSS voor commentaren op deze post. TrackBack URL

Verlaat een commentaar

Aangedreven door WordPress