Announcement

Collapse
No announcement yet.

Hantering av Web-OPM (Swedish)

Collapse
X
  •  
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hantering av Web-OPM (Swedish)

    Tillhör: forum.tornevall.net
    Titel: Hantering av Web-OPM
    Version: 1.0.0
    Dokumentid: OPM-01
    Författare:TT/TMM
    Revisionsdatum
    : 2007-04-22
    Författningsdatum: 2007-04-11
    Sidor: 4

    Grundläggande hantering av WEB-OPM

    Denna dokumentation är gjord som en grundläggande upplysning kring proxyhantering och är ej gjord för skarp tillämpning på webbsidor då koden är extremt inkomplett. Beslutar du dig ändå för att använda koden på något sätt, för eget bruk, görs detta på eget ansvar och författaren av denna text tar således ej ansvar för några problem som på grund av detta kan uppstå! Ej heller finnes krav på författaren att ge support och stöd under några omständigheter, om så önskas.


    Bakgrund

    I takt med utvecklingen och människors erfarenhet på Internet blir metoderna allt mer sofistikerade i jakten på att nå fram dit man vill. För att stärka sin egen anonymitet ytterligare, så används ibland så kallade proxys. Det kan även röra sig om exempelvis spam, datorintrång eller andra metoder som kräver anonymitet eller hög personintegritetsskydd.


    Det engelska ordet "proxy" översätts i det här sammanhanget till "ombud". En proxyserver kan alltså användas som ett ombud på nätet. En proxy används ofta i samband med säkerhet, som en modul i en brandvägg. Webbproxyn är en proxy för http-protokollet, det som används för webbsidor både internt och externt. I samband med proxy används ofta en cache, ett minne där man lagrar sidor för att snabba upp åtkomsten för användarna.



    I princip används en proxy normalt på följande vis: om man som internetkund har en brandvägg kan man förenkla sitt surfande genom att använda en proxy, eftersom den kommer skydda den egna datorn mot intrång. En proxy sparar också, som nämns ovan, ned allt surfmaterial på hårddisk vilket innebär att nästa gång man surfar till en webbsida som datum-mässigt är oförändrad, så är det proxyn som ger webbläsaren informationen. Vissa internetleverantörer har gjort på detta vis, eftersom man i viss mån kan få ner antalet träffar mot internet och därmed spara bandbredd.

    Alla internetkunder/företag ställer dock inte alltid in sina proxys korrekt. Detta orsakar stora säkerhetsbrister på deras datorer och medför att andra obehöriga internetanvändare kan missbruka deras tjänster. Dagligen finns det robotar som söker igenom webbsidor och datorer för att hitta oskyddade proxys, för att sedan lista dessa för allmänheten på olika platser och forum. En felkonfigurerad proxy kallas i vissa kretsar för ”open proxy” men det finns även lagliga dito som hjälper användare till högre anonymitet.

    [Reviderad kopia av källa]


    Teknisk spärrhantering

    Proxy-missbruk förekommer idag överallt. Dock skiljer sig tekniken så pass mycket åt på olika media att spärrhantering ibland kan bli betydande flaskhalsar för en server, om de inte hanteras rätt, i synnerhet på webben där träffar från besökare görs mycket oftare än på andra former av till exempel chattsidor. En jämförelse mellan IRC- och WWW-baserad chatt kan göras, där skillnaderna är mer tydliga; när användaren är uppkopplad på en IRC-server, så kopplas anslutningen inte ned igen förrän användaren själv begär det. På WWW görs ständigt små tillfälliga uppkopplingar, vilket gör kontrollerna lite mer avancerade då en användare kan besöka flera ställen i ganska hög takt på samma sida. Ett klassiskt exempel på WWW-cha är den som förekommer på Aftonbladet.

    Givetvis sker inte kontrollerna automatiskt eftersom man i förväg inte vet vilken ipadress som är en proxy. Vilka adresser som är klassade som proxys finns tillgängliga i olika databaser på internet. Den smidigaste lagringsmetoden kallas för DNSBL, mycket för att denna gör det möjligt för vem som helst att göra en kontroll av en ipadress.


    En DNS-baserad svartlista (DNSBL, Real-time Blackhole List eller RBL), är en lista med IP adresser som publiceras i ett format som enkelt kan nås med hjälp av olika applikationer som används på internet. Som namnet säger, så är det en teknologi som baseras på DNS (Domain Name System) och används flitigt för att publicera listor på adresser som bedömts som spammande. Många mailagenter (mailserver-programvara) kan ställas in för att blockera eller markera meddelanden som har skickats från en site som finns på en sådan här typ av lista.




    Att bygga spärrhanterare

    Vem som helst kan skicka förfrågningar till en DNSBL tack vare DNS-teknologin. Vid en kontroll vänds oktetterna (Exempel: 127.0.0.1 blir 1.0.0.127) och ett resultat räknas fram - om det finns ett resultat så finns det en proxy bakom ipadressen, annars inte. Detta är det mest grundläggande i hela kontrollen. Dock är en kontroll, där endast ja eller nej görs, inget att rekommendera då en DNS kan tala om mycket mer vid ett eventuellt svar.

    För att genomföra en kontroll behövs även en tillgänglig DNSBL och i detta fall använder vi opm.tornevall.org. Till exempel, för att kontrollera om 192.168.1.20 är listad på opm.tornevall.org, gör vi ett DNS-uppslag på 20.1.168.192.opm.tornevall.org, dvs med omvända oktetter. Varje post i DNSBL har en ”A record”. Om posten används för att kontrollera epostspam brukar även en ”TEXT record” existera. På opm.tornevall.org har denna A record en IP-adress som börjar på 127.0.0.x där x är ett bitvärde som motsvarar vilken typ av proxy som rapporterats. Värdena på dessa bitar varierar självklart beroende på vilken DNS som fått frågan.

    En grundläggande ipkontroll i PHP skulle kunna programmeras på detta vis:

    PHP Code:
    $opmlookup = explode('.', gethostbyname(implode('.', array_reverse(explode('.', $_SERVER[REMOTE_ADDR]))) . '.opm.tornevall.org')); 
    


    I Perl hade samma kod sett ut så här:

    Code:
    @opmlookup = unpack('C4', gethostbyname(join('.', (reverse(split /\./, $ENV{'REMOTE_ADDR'}))) . '.opm.tornevall.org'));


    På denna rad görs hela kontrollen på en gång och värdet returneras via $opmlookup i ett redan uppdelat format. För att därefter grundkontrollera om detta är en registrerad proxy räcker alltså (vilket ser ut på samma sätt i Perl):

    PHP Code:
    if ($opmlookup[0] == '127') {exit;} 
    


    I det här fallet begär vi att koden skall avbrytas omedelbart om det returnerade värdet är 127. Men vi är inte nöjda här. opm.tornevall.org håller nämligen ordning på vilken typ av proxy det är som rapporterats och om den fortfarande fungerar.

    Det kan även vara så att databasen skiljer på om det är en proxy som är vanligt använd vid spam eller om den kan användas till webben. Eftersom olika proxys tillåter olika mycket och arbetar på olika sätt kan man sortera in dem i kategorier såsom HTTP, Socks osv. Strukturen kan göras hur lång som helst och det är här kontrollen av bitvärden kommer in.

    Vid kontroll av ovanstående ipadress returnerades 127.0.0.35 från vår DNS. Eftersom första delen innehåller ”127” så vet vi att detta är en proxy som skall djuptestas. Sista värdet, i det här fallet ”35”, talar om för oss vad det är för typ av proxy vi är på väg att sätta stopp för. För att ta reda på exakt vad så använder vi oss av bitmasking.


    Bitmasking

    För en snabb introduktion till bitmasking kan man förklara principen på följande sätt - I en enorm skål har jag en massa olika saker. Varje sak motsvarar ett värde:

    Äpple = 1
    Päron = 2
    Citron = 4
    Apelsin = 8
    Choklad = 16
    Russin = 32
    Fotboll = 64
    Pizza = 128


    Tillsammans utgör sakerna 8 bitar. Om jag plockar ett äpple (1), ett päron (2) och ett russin (32) ur skålen så får jag fram värdet 35. Tar jag en fotboll (64) och ett russin (32) får jag värdet 96. Om Pelle håller i värdet 176 så vet jag att han egentligen håller i en pizza (128), ett russin (32) och en bit choklad (16). Oavsett vilket värde Pelle ger mig, så kan jag med bitmaskingen tala om exakt vilka saker han bär på.

    I vårt fall med opm.tornevall.org betyder bitarna följande:

    1 = Proxyn är kontrollerad
    2 = Proxyn fungerar
    4 = Proxyn matchar mot en äldre databas driven av blitzed.org
    8 = Proxyn har testats men tog för lång tid på sig att svara
    16 = Proxyn har testats men fick ingen kontakt
    32 = Proxyn har testats men returnerade en annan ipadress
    64 = Proxyn är ingen riktig proxy utan har rapporterats som missbrukande
    128 = Proxyn använder en annan teknik, exempelvis som anonym webbtjänst


    Värdet 35 som returneras betyder därmed att vi har hittat en fungerande, kontrollerad proxy med hög anonymitet. För att enklare kunna göra beräkningarna av bitarna har vi gjort färdiga funktioner som returnerar ett antal värden för varje mask vi begär. Vi arbetar bara med 8 bitar eftersom en DNS högsta värde endast kan returnera värden upp till 255.

    Här kan vi välja om vi vill spärra denna proxy eller om vi vill låta släppa den genom ytterligare kontroll av de olika värdena. Dock bör man, som tidigare sagts, tänka på att varje RBL har sina egna bitvärden - de som vi använder i exemplen fungerar troligtvis inte på samma sätt om du väljer en annan RBL.

    Bitmaskingen i källkodsformat kan se ut så här:

    PHP:

    PHP Code:
      function bitmask ($bit = '')
      {
      $loadbits = 8; // Antal bitar att räkna med
      for ($i = 0 ; $i < $loadbits ; ++$i) {$arr[] = pow(2,$i); } // Automatisera 
      bitvärden
      for ($i = 0 ; $i < count($arr) ; ++$i) {$mask[$i] = ($bit & $arr[$i]) 
      ? '1' : '0';} // Sätt 1 till de bitvärden som är påslagna
      return $mask;
      } 
    


    Perl:

    Code:
      sub bitmask;
      sub bitmask
      {
      my ($bit) = @_;
      my $loadbits = 8;
      for ($i = 0 ; $i < $loadbits ; ++$i) {$arr{$i} = int(2 ** $i);}
      foreach $a (sort keys %arr) {$mask->{$a} = $bit & $arr{$a} ? '1' : '0';}
      return($mask);
      }



    Med hjälp av denna kod kan vi ta oss mycket längre och sålla ut de svar som erhålls och verkligen få fram de adresser som bör betraktas som hot. Somliga adresser uppdateras kontinuerligt och blir fort inaktiva och detta är även information som uppdateras på aktiva RBL-siter. Inaktiva ipadresser som fortfarande ligger kvar i register kan med hjälp av denna metod därför, vid behov, helt undantas från blockering. Något exempel på detta finns dock inte här då processen är ganska varierande från site till site.



    Vidareutveckling

    Du som bestämt dig för att prova exemplen i detta dokument på din webbsida bör ta i beaktning att användningen i längden inte är hållbar, i synnerhet inte om sidan blir större och växer. Att göra ständiga namnuppslag på detta sätt kräver på sikt en del kapacitet både i din ände och i den DNS du nyttjar, eftersom du i princip kommer att spamma tjänsten med förfrågningar när den väl är aktiv.

    Programmeringen tar givetvis inte heller slut här - bästa sättet att t.ex. undvika DNS-spam är att bygga en cache, som tillfälligt mellanlagrar uppslagen av ipadresser. På så vis behöver inte skriptet ställa varje fråga om och om igen på Internet, utan hämtar i stället tidigare svar från exempelvis en databas lokalt. Det kan räcka med en cache som bevarar namnuppslagen i 30-60 minuter.

    Källkod att anpassa på olika webbplatser är på väg. Dock finns det ingenting färdigt i skrivande stund (april 2007). Att anpassa ett sådant här skript kan vara olika besvärligt beroende på vilket system man ämnar tillämpa det på. Alla webbsidor ser ut på olika sätt och det bör då programmeras på ett sätt så att man nästan helt slipper att förändra befintlig källkod. Detta för att underlätta framtida uppdateringar för webbsidans innehåll samt den källkod man använder för att blockera proxys på.

    -
Sorry, you are not authorized to view this page
Working...
X