PiHole WPAD  -  Querylog Einträge z. B. wpad.fritz.box / wpad.localhost  -  Lösungsansatz

Du wunderst Dich, dass Dein PiHole Querylog mit unzähligen Einträgen bezgl. Domains wie z. B. wpad.fritz.box oder wpad.localhost geflutet wird?

Hier erfährst Du was das bedeutet:

+Wiki: Web Proxy Autodiscovery Protocol (WPAD)
+Wiki: WPAD Sicherheit

Hier zeige ich einen Lösungsansatz auf, um das mögliche Sicherheitsproblem einzudämmen.

WICHTIG:

* Die Anleitung bezieht sich auf ein neu aufgesetzte Raspian Bullseye-Lite mit anschließender Installation von PiHole inkl. Lighttpd (minimaler Webserver, der auch für die Weboberfläche von PiHole benötigt wird).
* Zudem, dass man keinen Proxy in seinem Netzwerk betreibt.

Der Lösungansatz besteht darin, dass alle solche Anfragen nicht ins Internet gelangen, sondern auf den PiHole umgeleitet werden und der Webserver (Lighttpd) die angeforderte wpad.dat oder proxy.pac ausliefert. Die wpad.dat oder proxy.pac enthält Informationen für den anfragenden Client, dass eben kein Proxy bei uns im Netzwerk vorhanden ist.

WPAD-Requests der Clients auf den PiHole umleiten

Wir verhindern das solche Anfragen von Clients ins Internet gelangen, indem wir die Domain-Namen in die IP-Adresse unseres PiHole auflösen.

WICHTIG:

* Welche Domain-Namen betroffen sind, ist abhängig von Eurem Netzwerk!
* Wenn man eine Fritz-Box betreibt, ist üblicherweise diese die Basis und die Clients setzen ein wpad davor. Das ergibt dann eben wpad.fritz.box
* Betreibt Ihr einen anderen Router oder eine Firewall wie z. B. pfsense, kann die Domain auch anders lauten. Auch hier wird vom Client das wpad vorangestellt. Das ergibt dann z. B. wpad.localdomain

Ermittelt zurerst über das Querylog Eures PiHole, welche WPAD-Requests in Eurem Netzwerk abgesetzt werden. Macht Euch zudem Gedanken, welche es bei Euch im Netzwerk zusätzlich geben kann!

In meinem Fall ist es eine Fritz-Box und ich habe z. B. folgende Einträge gefunden (das ist nur ein kleiner Auszug, damit Ihr einen Eindruck bekommt!):

Ich habe für mein Netzwerk entsprechend die folgende Zusammenstellung gemacht:

  • wpad.fritz.box
  • wpad.box
  • wpad.com
  • wpad.de
  • wpad
  • wpad.localdomain

1)

Wir editieren nun mit folgendem Befehl die Datei "hosts" und tragen dort die eigene Zusammenstellung ein:

sudo nano -w /etc/hosts

Es geht nur um die eine Zeile und mein PiHole hat die IP 192.168.159.98. Diese müsst Ihr natürlich durch Eure ersetzen:

192.168.159.98 wpad.fritz.box wpad.box wpad.com wpad.de wpad wpad.localdomain

2)

Wir editieren oder erzeugen nun mit folgendem Befehl die Datei "lan.list" (Diskussion über lan.list) und tragen dort das gleiche ein:

sudo nano -w /etc/pihole/lan.list

Damit ist schon mal sichergestellt, dass Requests mit diesen Domain-Namen nicht ins Internet gelangen und somit keine unvorhersehbaren Antworten aus dem Internet geliefert werden.

WPAD-Request korrekt beantworten / Proxy Infos "wpad.dat, proxy.pac" ausliefern

Da die Anfragen nun auf den PiHole umgeleitet werden, kann der dort laufende Lighttpd Webserver die Anfragen korrekt beantworten. Also eine entsprechend angefragte wpad.dat bzw. proxy.pac ausliefern.

Die einfachste Möglichkeit ist, eine wpad.dat und proxy.pac im Verzeichnis "/var/www/html/" zu erstellen. Ich möchte es etwas strukturierter, und erstelle diese in einem separaten Ordner.

Wir erzeugen die beiden Dateien wpad.dat und proxy.pac

1)

Mit folgendem Befehl erzeuge ich die Datei "wpad.dat" und trage dort den folgenden Code ein:

sudo nano -w /var/www/wpad/wpad.dat
function FindProxyForURL(url, host) {
    return "DIRECT";
}

2)

Mit folgendem Befehl erzeuge ich die Datei "proxy.pac" und trage dort das gleiche ein:

sudo nano -w /var/www/wpad/proxy.pac

Der Webserver (Lighttpd) soll dynamisch das Stammverzeichnis ändern

Das Stammverzeichnis des Webservers ist "/var/www/html/". Sobald eine Domain die Zeichenkette "wpad" enthält, soll aber das Stammverzeichnis "/var/www/wpad/" genutzt werden.

Mit folgendem Befehl erzeuge ich die Datei "external.conf" und trage dort den folgenden Code ein:

sudo nano -w /etc/lighttpd/conf-enabled/external.conf
$HTTP["host"] =~ "wpad" {
server.document-root = "/var/www/wpad/"
mimetype.assign = (
".dat" => "application/x-ns-proxy-autoconfig",
".pac" => "application/x-ns-proxy-autoconfig"
)}

Wir starten nun den PiHole einmal durch, damit alle Änderungen ziehen:

sudo reboot

Wir testen ob es funktioniert

1)

Wir geben im Browser folgende URL ein, und dieser sollte uns dann den Download der Datei wpad.dat anbieten:

http://wpad.fritz.box/wpad.dat

http://wpad.box/wpad.dat

http://wpad.com/wpad.dat

http://wpad.de/wpad.dat

http://wpad/wpad.dat

http://wpad.localdomain/wpad.dat

Oder bei anderen Konfigurationen z. B.

http://wpad.local/wpad.dat

2)

Mit folgendem Befehl schauen wir noch in das access.log vom Webserver. Wir sehen, dass alle WPAD-Anfragen mit einem 200 (Http-Status OK) quitiert werden:

nano /var/log/lighttpd/access.log

304 (statt 200 ok) bedeutet, dass die Resource gecacht ist und kein Redirect nötig ist. Das ist ebenfalls ok.