proxy.pac einrichten: Datei schreiben, auf den Webserver legen, Clients verteilen, testen
Eine PAC-Datei (Proxy Auto-Config, meist proxy.pac oder wpad.dat genannt) ist eine kleine Textdatei mit einer JavaScript-Funktion. Sie entscheidet für jede Anfrage des Browsers, ob er direkt verbindet oder über welchen Proxy. Diese Anleitung führt in vier Schritten durch die Einrichtung. Sie schreiben die Datei, legen sie auf einen Webserver, teilen den Clients die Adresse mit und testen das Ergebnis.
Die Seiten, auf die diese Anleitung für Details verweist, sind auf Englisch; sie tragen den Hinweis „(Englisch)“. Für die Einrichtung selbst brauchen Sie sie nicht.
Schritt 1: Die Datei schreiben
Für jede Anfrage ruft der Browser die Funktion FindProxyForURL(url, host) auf. url ist die
vollständige Adresse, host nur der Rechnername daraus, etwa www.example.com. Die Funktion
antwortet mit einem Text:
"DIRECT"heißt: ohne Proxy verbinden."PROXY proxy1.firma.example:8080"heißt: diesen Proxy verwenden."PROXY proxy1.firma.example:8080; PROXY proxy2.firma.example:8080"ist eine Liste. Fällt der erste Proxy aus, nimmt der Browser den nächsten.
Eine vollständige Datei für ein typisches Firmennetz sieht so aus:
// Interne Kurznamen, die Benutzer ohne Domain eintippen
var kurznamen = ["intranet", "wiki", "drucker"];
function FindProxyForURL(url, host) {
// Rechnernamen klein schreiben: Vergleiche im Skript unterscheiden Gross- und Kleinschreibung
host = host.toLowerCase();
// Die echten internen Kurznamen, nicht jeder Name ohne Punkt
if (kurznamen.indexOf(host) >= 0) {
return "DIRECT";
}
// Die interne DNS-Zone und alle Rechner darin
if (host == "firma.example" || dnsDomainIs(host, ".firma.example")) {
return "DIRECT";
}
// Private Adressen, aber nur wenn die URL schon eine IP-Adresse enthaelt
// (sonst loest isInNet den Namen erst per DNS auf)
if (/^\d+\.\d+\.\d+\.\d+$/.test(host) &&
(isInNet(host, "10.0.0.0", "255.0.0.0") ||
isInNet(host, "172.16.0.0", "255.240.0.0") ||
isInNet(host, "192.168.0.0", "255.255.0.0"))) {
return "DIRECT";
}
// Standardroute: alles andere ueber die Firmen-Proxys, der zweite ist die Ausweichroute
return "PROXY proxy1.firma.example:8080; PROXY proxy2.firma.example:8080";
}
Ersetzen Sie firma.example und die Proxy-Namen durch Ihre eigenen. Drei Punkte entscheiden darüber,
ob die Datei zuverlässig arbeitet:
- Die Standardroute steht als letzte Zeile. Die erste
return-Anweisung, die ausgeführt wird, entscheidet. Alle Ausnahmen gehören deshalb darüber. Endet die Funktion ohnereturn, verbinden die Browser direkt, und der Verkehr läuft unbemerkt am Proxy vorbei. - Namen kosten nichts, DNS-Abfragen schon. Die Liste der Kurznamen und
dnsDomainIs()prüfen nur den Text.isInNet()mit einem Rechnernamen löst den Namen dagegen per DNS auf, und wenn der DNS-Server nicht antwortet, wartet jede Anfrage. Deshalb prüft die Beispieldatei Netze nur, wenn die URL schon eine IP-Adresse enthält (DNS in PAC-Dateien, Englisch). - Nur reines ASCII. Schreiben Sie die Datei in einem Texteditor, nie in einer Textverarbeitung, denn die macht aus geraden Anführungszeichen typografische, und das ist ein Syntaxfehler. Lassen Sie auch in Kommentaren die Umlaute weg, dann liest jede Engine die Datei gleich. Speichern Sie nie als UTF-16 (im Windows-Editor früher „Unicode“): Windows und Firefox können eine solche Datei nicht lesen.
Die Kurznamen stehen bewusst als Liste in der Datei. Die bequemere Funktion isPlainHostName() würde
jeden Namen ohne Punkt direkt schicken, auch einen vertippten Namen aus dem Internet, und der Benutzer
bekäme dann eine Fehlermeldung statt der Sperrseite des Proxys. Fertige, kommentierte Vorlagen finden
Sie auf der Seite mit PAC-Beispielen (Englisch); der PAC-Generator
(Englisch) baut eine Datei aus Ihren Listen von Proxys, Domains und Netzen.
Schritt 2: Die Datei auf einen Webserver legen
Die Clients laden die Datei über eine URL. Sie brauchen also einen Webserver, den alle Clients
erreichen, und zwar ohne Proxy. Wählen Sie eine feste Adresse, die sich nicht mehr ändert, zum
Beispiel https://pac.firma.example/proxy.pac, denn genau diese Adresse steht später in jedem
Client.
| Anforderung | Warum |
|---|---|
Auslieferung über https:// | Über reines HTTP kann jeder auf dem Netzweg die Datei verändern und den gesamten Webverkehr auf seinen eigenen Proxy umleiten. |
Status 200 | Bei jedem anderen Status arbeitet der Client ohne PAC-Datei. |
| keine Anmeldung | Chrome, Edge und Windows melden sich zum Laden einer PAC-Datei nicht an. |
Content-Type: application/x-ns-proxy-autoconfig | Die Clients laden die Datei auch so, aber ein falscher Typ ist meist ein Zeichen, dass der Server eine Fehlerseite schickt. |
Cache-Control: max-age von höchstens einem Tag | Davon hängt ab, wie lange Proxys, CDNs und Clients mit HTTP-Cache eine alte Datei behalten. Chrome und Firefox laden die Datei ohnehin am Cache vorbei. |
| kleiner als 1 MiB | Eine größere Datei ignorieren Chrome, Edge und Windows vollständig. |
Eine Dateifreigabe oder ein file://-Pfad ist kein Ersatz: Chrome und Edge laden PAC-Dateien nicht
mehr aus Dateipfaden, und wer auf die Freigabe schreiben darf, bestimmt das Routing.
Unter Apache genügen diese Zeilen in der Konfiguration der Website (für Header muss das Modul
mod_headers aktiv sein):
AddType application/x-ns-proxy-autoconfig .pac
<Files "proxy.pac">
Header set Cache-Control "max-age=3600"
</Files>
Prüfen Sie anschließend, was der Server tatsächlich schickt:
curl -sI https://pac.firma.example/proxy.pac
Die erste Zeile muss 200 enthalten, darunter sollten content-type und cache-control stehen.
Schritt 3: Den Clients die Adresse mitteilen
Am sichersten tragen Sie die Adresse fest und zentral ein, für jede Art von Client an der Stelle, die er liest:
| Client | Wo die Adresse eingetragen wird |
|---|---|
| Windows 10 und 11 | Einstellungen > Netzwerk und Internet > Proxy, bei Setupskript verwenden auf Einrichten klicken, den Schalter Setupskript verwenden einschalten, die Skriptadresse eintragen, Speichern. Für viele Rechner per Gruppenrichtlinie oder Intune. |
| Windows-Dienste (WinHTTP) | getrennt davon mit netsh winhttp set advproxy |
| Chrome und Edge | übernehmen die Einstellung von Windows oder macOS; die Browser-Richtlinie ProxySettings mit ProxyMode = pac_script und ProxyPacUrl hat Vorrang. In Edge heißt sie in der Gruppenrichtlinie „Konfigurieren von Proxyeinstellungen“. |
| Firefox | Die Voreinstellung Proxy-Einstellungen des Systems verwenden übernimmt die Adresse aus dem System. Eine eigene Adresse steht im Dialog Verbindungs-Einstellungen unter Automatische Proxy-Konfigurations-Adresse; per Unternehmensrichtlinie Proxy mit "Mode": "autoConfig" und AutoConfigURL. |
| macOS | Systemeinstellungen > Netzwerk, den Netzwerkdienst wählen, Details > Proxys, Automatische Proxykonfiguration; für verwaltete Macs ein MDM-Profil |
| Geräte, die Sie nicht konfigurieren können | automatische Erkennung per WPAD über DHCP-Option 252 oder den DNS-Namen wpad, als letzte Wahl |
Warum eine verteilte Richtlinie manchmal nicht ankommt, etwa weil sie pro Benutzer statt pro Rechner gilt oder weil Edge eine eigene Richtlinie hat, erklärt die Seite PAC file not applied by Group Policy or Intune (Englisch).
Schalten Sie die automatische Erkennung aus, wenn Sie ein Setupskript eintragen. Der Schalter heißt
in Windows Einstellungen automatisch erkennen, in Firefox Die Proxy-Einstellungen für dieses
Netzwerk automatisch erkennen. Bleibt er an, ersetzt jede wpad-Antwort in einem fremden Netz Ihr
Skript (Web proxy auto-detection, Englisch).
WPAD nur, wo es nicht anders geht. Die automatische Erkennung findet die Datei ohne jede Einstellung am Client. Sie fragt aber DHCP und DNS ohne Authentifizierung und lädt die Datei über reines HTTP. Wer zuerst antwortet, liefert die Datei und damit das Routing. Die Risiken und wie man sie begrenzt, stehen auf der WPAD-Seite (Englisch); den Server für eine wpad.dat richtet der wpad.dat-Generator (Englisch) ein.
Schritt 4: Testen, vor und nach der Verteilung
Testen Sie die Datei, bevor ein Client sie bekommt. Der PAC-Tester auf dieser Website ist englischsprachig, die Bedienung ist aber schnell erklärt:
| Im Tester | Bedeutung |
|---|---|
| Domain or URL to trace | die Adresse, für die Sie die Entscheidung der Datei sehen wollen |
| Engine profile | welcher Client simuliert wird: Chromium (Chrome, Edge), Firefox, pacparser oder Windows (WinHTTP, WinINet) |
| Check | startet den Test |
| Path | der Ablauf: jede Bedingung mit wahr oder falsch, jeder Funktionsaufruf mit Ergebnis und die Zeile, die entschieden hat |
| Annotated | Ihre Datei mit einer Erklärung über jeder Regel |
| Note A+ bis F und die Hinweise darunter | die Bewertung der Datei gegen den Regelkatalog (Englisch), jeder Hinweis mit Zeile und Lösung |
| Delivery | Hier fügen Sie die Ausgabe von curl -sI aus Schritt 2 ein, dann wird auch die Auslieferung bewertet. |
Testen Sie mindestens eine Adresse pro Regel Ihrer Datei, dazu eine reine IP-Adresse, einen kurzen
Namen ohne Punkt und eine Adresse, die einer internen Domain nur ähnelt (etwa firma.example.boese.example).
Wählen Sie dabei die Profile der Clients, die Ihre Benutzer tatsächlich verwenden, denn die Engines
verhalten sich nicht in allen Punkten gleich. Die Datei wird in Ihrem Browser ausgewertet; zur
Bewertung wird nur ihre logische Struktur übertragen, ohne Namen, Adressen oder Text.
Verteilen Sie die Adresse danach zuerst an eine kleine Pilotgruppe. Prüfen Sie dort, ob die Clients
die Datei wirklich verwenden: in Chrome und Edge unter chrome://net-internals/#proxy bzw.
edge://net-internals/#proxy, für WinHTTP mit netsh winhttp show advproxy. Clients, die schon eine
ältere Datei geladen haben, behalten sie eine Weile; wie Sie jede Engine zum Neuladen bringen, zeigt
PAC cache reset (Englisch). Lädt ein Client die Datei gar nicht, hilft
PAC file troubleshooting (Englisch) weiter.
Wenn alles stimmt, bekommen alle Clients die Adresse. Bei jeder späteren Änderung der Datei testen Sie wieder im Tester, bevor Sie die neue Fassung auf den Server legen.
Häufige Fragen
Wie richte ich eine proxy.pac ein?
Schreiben Sie eine Textdatei proxy.pac mit der Funktion FindProxyForURL(url, host), die für jede Anfrage "DIRECT" oder "PROXY host:port" zurückgibt. Legen Sie sie auf einen Webserver, der sie über HTTPS mit Status 200 und dem Content-Type application/x-ns-proxy-autoconfig ausliefert. Verteilen Sie die Adresse per Gruppenrichtlinie, Intune, Browser-Richtlinie oder MDM-Profil, und testen Sie die Datei vor und nach der Verteilung.
Was ist der Unterschied zwischen proxy.pac und wpad.dat?
Der Inhalt ist derselbe. wpad.dat ist nur der Name, unter dem die automatische Proxy-Erkennung (WPAD) die Datei sucht. Eine proxy.pac tragen Sie dagegen mit ihrer Adresse fest in die Einstellungen der Clients ein, was sicherer ist.
Wo trage ich die PAC-Datei in Windows ein?
In Windows 10 und 11 unter Einstellungen, Netzwerk und Internet, Proxy, bei "Setupskript verwenden" auf "Einrichten" klicken, den Schalter einschalten, die Skriptadresse eintragen und speichern. Für viele Rechner setzen Sie dieselbe Einstellung per Gruppenrichtlinie oder Intune.