Il mio fooldns personale

Tags:

Niente di male contro i creatori di fooldns, hanno avuto un'idea carina per bloccare i troppi adv in maniera quasi trasperente, solo che preferisco tenere personalmente sotto controllo cosa viene bloccato.
Per questo ho pensato di realizzarmi in casa, per la mia rete, una soluzione simile.

Questo sistema usa bind9 come server DNS. Non escludo la possibilità di portarlo su djbdns.

L'ho chiamato il folletto blocca-banner, perchè folletto è la prima parola che mi è venuta in mente partendo da "fool" :-)

Ecco la realizzazione:

in named.conf inserire:

include "/etc/bind/zones.folletto";

e zones.folletto verrà popolato in automatico con, ad esempio (prendendo spunto da un template)

zone "ads.dominio.it" {
  type master;
  file "/etc/bind/folletto.db";
};

mentre folletto.db conterrà:

$TTL    604800
@       IN      SOA     localhost. root.gnustile.lan. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.127.127.127

(sostituire 127.127.127.127 con l'indirizzo IP della vostra macchina che farà da server DNS, e con apache installato)

Lo script di gestione quindi:

  • parsa l'elenco degli host da bannare,
  • genera nuovo ogni volta zones.folletto a partire dal template

file contentente gli host da bannare: (esempio)

ads.dominio.it
ads.dominio.com
ads.dominio.net

scriptino per generare zones.folletto:

#!/usr/bin/ruby
template=File.read('zones.folletto.tpl')
out_file=""
File.read('da_bannare.txt').each_line do |host|
  host.chomp!
  if host!=""
    current_template=template.gsub('{HOST}', host)
    out_file=out_file+"\n"+current_template+"\n"
  end
end

File.open('zones.folletto', 'w') do |f|
  f.write out_file
end

e zones.folletto.tpl:

zone "{HOST}" {
  type master;
  file "/etc/bind/folletto.db";
};

Mentre, per quanto riguarda il virtualhost apache, è stata inserita la seguente regola di rewrite:

RewriteRule   ^(.*)\.(js)$  catcher.php?q=$1.js [L,QSA]

che manda tutti i js, dei siti di ad, a catcher.php, il cui codice è:

<?
Header("content-type: application/x-javascript");

$url=$_SERVER['HTTP_HOST']."/".$_GET['q'];
?>

messaggio="Il folletto blocca-banner ha bloccato la pubblicita` che doveva essere presente qui.\n"
messaggio=messaggio+"Il folletto blocca-banner di questa rete e` stato interamente creato da stefano :)"

if (!xFollettoOk){
  document.write("<iframe style='width: 130px; height: 80px;' valign=center allowtransparency='true'");
  document.write(" src='http://127.127.127.127/iframe.php?url=<?=$url?>' ");
  document.write("scrolling='no' frameborder='no' style='border-width:0'></iframe>");
}
else
{
  document.write("<img src=\"http://127.127.127.127/adblock.png\" onclick=\"alert(messaggio)\"/>");
}
var xFollettoOk = true;

ovvero, mostra un iframe per il primo banner, e un'immagine per tutti gli altri.

iframe.php è:

<div style="text-align: center; padding: 2px 2px 2px 2px; border: 1px solid Black;">
<font color="red" size="1">
<i>il folletto sta proteggendo questa pagina dalla pubblicità</i>
</font>
</div>


... e tutto mi risulta funzionare :-)

e chi lo aggiorna il file

e chi lo aggiorna il file contenente gli hosts da bandire?

Complimenti + richiesta di chiarimento

Per cominciare ti faccio i complimenti.
Davvero un bel lavoro.
ma ho bisogno di un chiarimento se puoi,
questo ho provato a metterlo in .htaccess in default
ho abilitato rewrite.load e RewriteEngine
ma non ci ho cavato un ragno me lo puoi chiarire
RewriteRule   ^(.*)\.(js)$  catcher.php?q=$1.js [L,QSA]
Ancora complimenti e grazie in anticipo.

CavallopazzO

Bravo

Meglio tardi che mai, ma ho trovato questa pagina solo ora... Bravo Stefano, anche io ho fatto qualcosa di simile per gli stessi tuoi motivi, ma lo script generatore era in Perl... Il buon Matteo si lamenta o cosa? Non e' poi che dall'originale ci fosse molto da copiare, 4 righe di JS sono capaci di scriverle tutti! Doveva fermarsi al "Bravo" e ci avrebbe fatto piu' bella figura..

Bello :D

Bello, soprattutto, il fatto che il JS è paro paro copiato dal nostro :) Grande lavoro, avresti potute chiedere e ti avremmo passato noi le cose...

beh...

beh, si, ho preso spunto dal vostro JS, ma le cose visibili sono fatte per prenderci spunto o no? :)
Si, avrei potuto chiedere, ma è stato più divertente così :)
E poi, diciamocelo sinceramente, quelle 4 righe di javascript le può scrivere anche una scimmia ammaestrata, c'è poco da copiare. Avresti preferito se avessi invertito le condizioni nell'if???