DNS menteur, une autre méthode anti-curieux
Cas n°2 FreeBSD + Apache
Notre second cas s’applique actuellement à un sous réseau autonome d’une moyenne entreprise sous ma responsabilité. L’environnement est hétérogène avec de l’environnement propre (pas assez), terreux (surtout) et sale (peu), des téléphones et diverses machines outils sous environnement sale. Les serveurs DNS et HTTP présentés ici sont sur une machine virtualisée FreeBSD. Ces services sont isolés du serveur principal.
Bind9
Il existe pléthore de cours sur le Ternet pour en monter un en 5 minutes douche comprise. Je vais considérer que vous avez déjà un daemon DNS interne fonctionnel.
À la fin de votre /var/named/etc/namedb/named.conf ajoutez ceci
Éditez ensuite /var/named/etc/namedb/antistats.conf
zone "estats.com" { type master; notify no; file "null.zone.file"; };
zone "freestats.com" { type master; notify no; file "null.zone.file"; };
zone "goldstats.com" { type master; notify no; file "null.zone.file"; };
zone "google-analytics.com" { type master; notify no; file "null.zone.file"; };
zone "gostats.com" { type master; notify no; file "null.zone.file"; };
zone "hitometer.com" { type master; notify no; file "null.zone.file"; };
zone "indexstats.com" { type master; notify no; file "null.zone.file"; };
zone "masterstats.com" { type master; notify no; file "null.zone.file"; };
zone "megastats.com" { type master; notify no; file "null.zone.file"; };
zone "revstats.com" { type master; notify no; file "null.zone.file"; };
zone "rightstats.com" { type master; notify no; file "null.zone.file"; };
zone "sitemeter.com" { type master; notify no; file "null.zone.file"; };
zone "stats.blogger.com" { type master; notify no; file "null.zone.file"; };
zone "stats.wordpress.com" { type master; notify no; file "null.zone.file"; };
zone "stats4all.com" { type master; notify no; file "null.zone.file"; };
zone "superstats.com" { type master; notify no; file "null.zone.file"; };
zone "topstats.com" { type master; notify no; file "null.zone.file"; };
zone "topstats.net" { type master; notify no; file "null.zone.file"; };
zone "www-google-analytics.l.google.com" { type master; notify no; file "null.zone.file"; };
zone "xiti.com" { type master; notify no; file "null.zone.file"; };
zone "analytics.engagd.com" { type master; notify no; file "null.zone.file"; };
zone "histats.com" { type master; notify no; file "null.zone.file"; };
Éditez ensuite /var/named/etc/namedb/null.zone.file
@ IN SOA <votre SOA>. hostmaster.<votre SOA>. (
2010041800 3600 3600 3600000 3600 )
@ IN NS blackhole.
@ IN A 192.168.4.127
* IN A 192.168.4.127
Adaptez à votre environnement, notamment votre SOA, le TTL et les autres délais. Ne prêtez pas attention à loopback. et utilisez plutôt vos valeurs “normales”. En ce qui concerne blackhole il faut que ce nom pointe réellement vers l’ip choisie (ici 192.168.4.127) et vice versa : que l’ip choisie soit résolue en blackhole. Rien de bien extraordinaire dans une configuration de DNS local.
Il faut ensuite relancer Bind9 et normalement nous avons ceci :
Trying "xiti.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22544
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;xiti.com. IN A
;; ANSWER SECTION:
xiti.com. 60 IN A 192.168.4.127
;; AUTHORITY SECTION:
xiti.com. 60 IN NS blackhole.
Received 65 bytes from 192.168.4.10#53 in 1 ms
Bingo ! Le domaine xiti.com est résolu en 192.168.4.127 comme prévu. Mais également :
Trying "er.erer.Erer.xiti.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17999
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;er.erer.Erer.xiti.com. IN A
;; ANSWER SECTION:
er.erer.Erer.xiti.com. 60 IN A 192.168.4.127
;; AUTHORITY SECTION:
xiti.com. 60 IN NS blackhole.
Received 78 bytes from 192.168.4.210#53 in 1 ms
Nous avons donc un filtre de type *.xiti.com !
Adresse IP locale
J’ai choisi 192.168.4.127 pour une raison arbitraire. Freebsd permet de l’assigner (par exemple) via /etc/rc.local
ifconfig ed0 inet 192.168.4.127 alias
Ce qui me permet d’avoir une deuxième IP pour ed0 avec pour valeur 192.168.1.127, dès le boot de la machine.
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:be:ef:00:fa:ce
inet 192.168.4.10 netmask 0xffffff00 broadcast 192.168.4.255
inet 192.168.4.127 netmask 0xffffffff broadcast 192.168.4.127
media: Ethernet autoselect (10baseT/UTP)
Cette étape est purement optionnelle, vous avez le droit de pourrir les logs de votre serveur web avec des requêtes qui ne lui sont pas destinées.
Apache
Créez /usr/local/etc/apache22/Includes/blackhole.conf et
Listen 192.168.4.127:443
<VirtualHost 192.168.4.127>
Options +MultiViews
AddOutputFilterByType DEFLATE text/html
LogLevel alert
CustomLog /var/log/httpd-blackhole combined
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot /usr/local/www/apache22/data/www/blackhole
ErrorDocument 404 /index.php
ServerSignature Off
</VirtualHost>
Le premier listen est intelligible, le 2ème nécessite un peu de bidouille. Le MultiViews permet de correctement intercepter les arborescences dans blackhole. Le 404 permet de nous orienter vers index.php (préférez un index.xhtml).
Bel article ! Petite question, où as tu trouver ces jolies clipart, qui semble être vectoriel ? Ils sont magnifiques, ça produit d’excellent schéma !
Merci 😉
Ces illustrations ont été réalisées avec Cacoo, un flow-chart en ligne basé sur flash.
Ce que l’on perd en souplesse par rapport à un Dia est compensé par la richesse des ‘cliparts’ (qui n’en sont pas en fait) et par la disponibilité d’un outil ‘in the cloud’. A tester sur un petit projet pour se faire un avis.
La galerie originale est ici https://cacoo.com/diagrams/Z1pvc3fomB1cMnoi
Il manque juste un petit quelque chose: l’ajout des nouveaux domaines espions ou publicitaires, à la volée, par les utilisateurs.
Comme ce que permet Ad-Block: hop ça me plait pas, hop je vire. Sauf que je ne vois pas comment on pourrait faire ça de façon pratique sur tous les navigateurs..
Effectivement c’est encore une autre limite d’un système tel que décrit dans l’article.
Mon petit doigt me dit que le prochain article traitera de l’import conditionnel de règles adblock 😉
bonjour.
je tiens a préciser que le fichiers hosts existe également sur un windows !!!
il est même ici : %windir%\system32\drivers\etc\hosts
(remarquez l’extrême similitude entre le /etc/hosts d’un Linux et le \etc\hosts d’un Windows ^_^…même les commentaires sont quasi identiques…)
(pas testé sur win7, désolé…)
jbdzdd
pmopp7