Zielsetzung
- Werbung mit möglichst wenig Aufwand zentral Blockieren
- Browser Unabhängig
- Wenige bis keine Änderungen an den Netzwerk-Clients bzw. Browsern
Voraussetzung
- Zentraler DNS Server
- Alle Clients benutzen diesen DNS Server
- (optional) lokaler Webserver
Umsetzung
Generell läuft es darauf hinaus das man komplette DNS-Zonen deaktiviert.
Hierbei ist besondere Vorsicht angebracht da man sehr schnell zuviel blockiert, also lieber zuwenig als zuviel blockieren. Nichts ist schlimmer wenn nach der Umsetzung die ganze Firma anruft.
Als erstes gilt es zu ermitteln welche Domains zu blockieren sind.
Dazu ruft man am einfachsten Webseiten auf, die ungewünschte Werbung darstellen und versucht die Ursprungsdomain der Werbung zu ermitteln.
Setzt man Windows 2000 ein sollte man als nächstes DNS-Wildcard Auflösung aktivieren.
Danach erstellt man im DNS Server eine neue Zone. Es ist hierbei unerheblich ob diese Aktive Directory integriert ist oder nicht.
In dieser Zone legt man einen neuen Hosteintrag an der keinen Namen hat. Als IP Adresse verwendet man entweder die eines lokalen Webservers oder 127.0.0.1. Die Folgende Warnmeldung kann man getrost bestätigen.
Danach legt man unter dieser Zone eine “Neue Domäne” mit der Bezeichnung “*” an, darunter dann
wieder einen Hosteintrag mit der IP des lokalen Webservers oder 127.0.0.1.
Das Ergebniss könnte dann in etwa wie folgt aussehen:


Hat man sekundäre DNS Server darf man nicht vergessen zum einen die Zonenübertragung zu aktivieren und zum anderen die neuen Zonen auch auf den sekundären DNS Servern einzurichten.
Damit ist die Hauptarbeit erledigt.
Jegliche DNS Aufrufe gegen zBspl. “ads.msn.com” beantwortet der DNS Server mit der gleichen Antwort:

Zum sofortigen Testen ist es oft nötig den lokalen DNS Cache zu leeren: ipconfig /flushdns.
Möchte man die Werbeanfragen auf einen lokalen Webserver weiterleiten um darauf individuell zu Antworten kann man Apache so Konfigurieren das er auf alle Anfragen gleich antwortet:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName *
DocumentRoot /home/www/catchall.our.dom/htdocs
AliasMatch /(.*)$ /home/www/catchall.our.dom/htdocs/index.php/$1
</VirtualHost>
Dadurch wird von jedem Browser statt der Werbung die index.php aufgerufen.
In meinem Fall enthält diese Code der den Browser auf eine statische lokale Datei umlenkt.
Dies hat zwei Vorteile: Zum einen kann der Browser die Weiterleitung sowie die Ziel Datei zwischenspeichern, zum anderen wird durch Apache der richtige Content-Type zurückgeschickt.
Die Dateien habe ich manuell als leere bzw. 10×10 weiße Pixel Bilder angelegt.
Zusätzlich wird noch ein Apache error.log Eintrag generiert.
Wichtig ist das im Webserver ein Extra-VHost anlegt wird sonst der catchall-vhost die Anfragen gegen diese statischen Dateien beantworten würde - was vermutlich zu einer Endlos Schleife führt.
<?php
error_reporting (E_NONE);
$log = '';
$log .= 'HTTP_HOST=' . $_SERVER['HTTP_HOST'] . ‘ ‘;
$log .= ‘REQUEST_URI=’ . $_SERVER['REQUEST_URI'] . ‘ ‘;
$match = array();
$blank = ‘index.html’;
if (TRUE == preg_match(’/.+\.(js|jpe?g|css|png|bmp|x?html?|php|cfm|gif)/i’, $_SERVER['REQUEST_URI'], $match)) {
$blank = ‘blank.’ . $match[1];
}
header (’HTTP/1.1 301 Moved Permanently‘, TRUE, 301);
header (’Location: http://static.our.dom/catchall/’ . $blank, TRUE);
$log = ‘BLANK=’. $blank. ‘ ‘ . $log;
error_log ($log,0);
?>
Es kann passieren das Webseiten nicht mehr ordnungsgemäß funktionieren wenn Teile davon deaktiviert werden. Der Internet Explorer 6 meckert dies manchmal an was man in den Einstellungen deaktivieren kann:

Zum Abschluß sei noch zu erwähnen das Werbung natürlich auch lokal gefiltert werden kann.
Nahezu jeder Browser bietet dazu Addons oder von Haus aus seine Möglichkeiten.
Bei FireFox zBspl. das AdBlock AddOn, bei Opera kann man Inhalte direkt blockieren, umfangreiche Filterlisten gibt es natürlich auch.
Für den Internet Explorer bleibt meines Wissens nach nur die Möglichkeit die DNS Auflösung lokal in der “C:\WINNT\system32\drivers\etc\hosts” Datei zu deaktivieren.