PAC Datei erstellen

Eine Proxy Auto-Config-Datei (PAC Datei) ist eine nicht mehr wegzudenkende Datei, vor allem bei Unternehmen. Sie ist dafür zuständig, dass Webbrowser und andere Software automatisch den passenden Proxy Server für eine gewünschte URL finden können. Diese proxy.pac kann sehr einfach, aber auch sehr komplex sein. Es gibt viele Möglichkeiten eine PAC Datei zu bauen. Wir geben hier einige Anregungen und PAC Datei Beispiele.

geralt / Pixabay

 

PAC Datei erstellen / PAC Datei Beispiele

In einem früheren Beitrag wird erklärt, wie man eine proxy.pac per IIS Webserver bereitstellen kann. Aber davor brauchen wir natürlich erst einmal eine PAC Datei. Hier zeigen wir einige Beispiele für PAC Dateien.

Information: PAC Dateien basieren auf JavaScript.

Direktes Verbinden bei lokalem Host

Hier kann der Host eine direkte Verbindung herstellen, wenn es sich um einen lokalen Host handelt. Wenn er nicht lokal ist, muss er über den Proxy gehen. Mit der Funktion isPlainHostName wird geprüft, ob der Hostname Punkte “.” enthält. Wenn der Host Punkte enthält, ist er NICHT lokal.

function FindProxyForURL(url, host)
 {
 if (isPlainHostName(host))
 return "DIRECT";
 else
 return "PROXY proxy:80";
 }

Direktes Verbinden bei einem Host innerhalb der Firewall

In diesem Fall kann der Host eine direkte Verbindung herstellen, wenn der Host sich innerhalb der Firewall befindet. Falls nicht, muss über den Proxy gegangen werden. Die Funktion localHostOrDomainIs wird nur für eine URL in der lokalen Domäne ausgeführt.

function FindProxyForURL(url, host)
 {
 if ((isPlainHostName(host) ||
 dnsDomainIs(host, ".yourcompany.com")) &&
 !localHostOrDomainIs(host, "www.yourcompany.com") &&
 !localHostOrDoaminIs(host, "intranet.yourcompany.com"))
 return "DIRECT";
 else
 return "PROXY proxy:80";
}

Direktes Verbinden bei auflösbarem Hostnamen

Wenn der Hostname aufgelöst werden kann, wird eine direkte Verbindung hergestellt. Wenn nicht -> PROXY. Die Funktion isResolvable fragt bei einem DNS Server an.

function FindProxyForURL(url, host)
 {
 if (isResolvable(host))
 return "DIRECT";
 else
 return "PROXY proxy:80";
 }

Direktes Verbinden, wenn sich der Host in einem angegebenen Subnetz befindet

Hier kann der Host sich direkt verbinden, falls er sich ein einem angegebenen Subnetz befindet. Die Funktion isInNet gibt “true” zurück, wenn die IP des Hosts mir dem angegebenen Muster übereinstimmt. Die Vorlage gibt an, welche IP Blöcke verglichen werden soll. In diesem Beispiel ist “255” eine Übereinstimmung, die “0” wird ignoriert.

function FindProxyForURL(url, host)
 {
 if (isInNet(host, "999.99.9.9", "255.0.255.0"))
 return "DIRECT";
 else
 return "PROXY proxy:80";
 }

Verbindungstyp anhand des Protokolls

Hier wird geprüft welches Protokoll angefordert ist. Egal ob http, https, ftp, etc. Falls keine Übereinstimmung statt findet, wird direkt verbunden. Die Funktion substring extrahiert die angegebene Anzahl von Zeichen aus der Zeichenfolge. (Beispiel: http = 5, https = 6)

function FindProxyForURL(url, host)
 {
 if (url.substring(0, 5) == "http:") {
 return "PROXY proxy:80";
 }
 else if (url.substring(0, 4) == "ftp:") {
 return "PROXY fproxy:80";
 }
 else if (url.substring(0, 6) == "https:") {
 return "PROXY secureproxy:8080";
 }
 else {
 return "DIRECT";
      }
 }

Verbindungstyp anhand der Domäne

In diesem Fall wird nachgesehen, welche Domainendung die angesurfte Seite hat. die Funktion shExpMatch prüft dies.

function FindProxyForURL(url, host)
 {
 if (isPlainHostName(host))
 return "DIRECT";
 else if (shExpMatch(host, "*.com"))
 return "PROXY comproxy:80";
 else if (shExpMatch(host, "*.edu"))
 return "PROXY eduproxy:80";
 else
 return "PROXY proxy";
 }

Verbinden, wenn bestimmter Wochentag

Es kann sogar geprüft werden, an welchem Wochentag wie verbunden wird. weekdayRange definiert die Tage. Der Parameter “GMT” besagt, dass die Zeitwerte der Greenwich Mean Time und nicht der lokalen Zeitzone entsprechen.

function FindProxyForURL(url, host)
 {
 if(weekdayRange("WED", "SAT", "GMT")) 
 return "PROXY proxy:80";
 else 
 return "DIRECT";
 }

 

Zum Schluss noch eine relativ komplexe PAC Datei, in der viele Dinge kombiniert werden und viele Werte überprüft werden. Hier wird sogar mit Variablen gearbeitet 🙂

function FindProxyForURL(url, host)
{
// variable strings to return
var proxy_yes = "PROXY 10.4.5.20:8080";
var proxy_no = "DIRECT";
var resolved_ip = dnsResolve(host);
 
// If a specific URL needs to bypass the proxy then send traffic direct.
if (shExpMatch(url, "*.domain.local*")) { return proxy_no; }
if (shExpMatch(url, "*.dmshm.local*")) { return proxy_no; }
if (shExpMatch(url, "*rms.domain.com.au*")) { return proxy_no; }
if (shExpMatch(url, "*.domain.net.au*")) { return proxy_no; }
if (isInNet(resolved_ip, "10.0.0.0",  "255.0.0.0")) { return proxy_no; }
 
// If the source IP is in VIC then send traffic via the proxy
if (isInNet(myIpAddress(), "10.3.0.0", "255.255.0.0"))return proxy_yes;
 
// If the source IP is in NSW then send traffic via the proxy
if (isInNet(myIpAddress(), "10.2.0.0", "255.255.0.0"))return proxy_yes;
 
// If the proxy fails or the request doesn't meet any of the above criteria then send the traffic direct
elsereturn "DIRECT";
}
Johannes Huber
 

In seiner Freizeit macht Johannes nichts lieber, als für ITnator Beiträge zu schreiben. Input bekommt er hierfür von Problemen in der IT Administration von Servern, Clients und vielen weiteren IT Komponenten.

Click Here to Leave a Comment Below 0 comments