Damit man auf den Clients in Firefox und Edge nichts bzgl. Proxy einstellen muß kann man eine automatische Proxy Konfigurationsdatei auf der Firewall bereitstellen, welche von den Browsern geholt und ausgewertet wird. Dazu generiert man diese wpad.dat in der Firewall unter Dienste - WebProxy - Verwaltung - ProxyAuto-Konfiguration: http://firewall/ui/proxy#subtab_pac_rules
Zuerst legt man die Übereinstimmung Definitionen(Matches) an:
Zum Schluss werden die Regeln zusammengestellt unter:
Mit „Speichern“ werden die Regeln generiert und sind nun erreichbar unter http://firewall.fzi.lan/wpad.dat
Die fertig generierte wpad.dat:
/* PAC file created via OPNsense To use this file you have to enter its URL into your browsers network settings. */ function FindProxyForURL(url, host) { if (((!isPlainHostName(host)) && (!dnsDomainIs(host, "*.fzi.lan")))) { return "PROXY firewall.fzi.lan:3128"; } // If no rule exists - use a direct connection return "DIRECT"; }
Damit die wpad.dat ausgeliefert werden kann und die Erkennung auch mit Firefox funktioniert, muß „HTTPS“ für die OPNsense WebGUI deaktiviert werden. Auch wenn diese zusätzlich über Port 80 erreichbar ist, probiert der Firefox zuerst die wpad.dat über 443 zu bekommen. Da es an der Firewall in der Standardeinstellung nur ein selbst generiertes SSL-Zertifikat gibt, scheitert das und die wpad.dat wird nicht geholt. Also bleibt nur die Möglichkeit SSL für die WebGUI der Firewall zu deaktivieren.
Oder es bleibt 443 aktiv und wird nur für die Clients im Netz per Firewall Regel gesperrt und eine weitere Regel, welche SSL Zugriff vom Management PC aus erlaubt.
Alternativ kann ein anderer Webserver die wpad.dat über HTTP bereitstellen.
Damit ein Browser erkennen kann, welcher Host die wpad.dat im Netzwerk zur Verfügung stellt, muß es einen DNS A Record „wpad“ geben. Firefox nutzt diese Erkennungsmethode. Da der Linuxmuster Nameserver auf dem Samba Server des Servers liegt, generieren wir den DNS Record dort:
root@server:~# samba-tool dns add -U global-admin 10.0.0.1 fzi.lan wpad A 10.0.0.254
Achtung, das folgende bitte nicht machen. Wird für wpad noch ein PTR Record gesetzt, dann funktioniert SSO mit Firefox/Chromium unter Linux nicht mehr! 10.0.0.254 darf nur auf firewall.fzi.lan aufgelöst werden und nicht manchmal auch auf wpad.fzi.lan
Und noch ein PTR Record:
root@server:~# samba-tool dns add -U global-admin 10.0.0.1 0.0.10.in-addr.arpa 254 PTR wpad.fzi.lan
Danach zum Test auf einem Client im Netzwerk:
root@jupiter:~# host wpad wpad.fzi.lan has address 10.0.0.254 root@jupiter:~# host 10.0.0.254 254.0.0.10.in-addr.arpa domain name pointer firewall.fzi.lan.
Windows Edge sucht sich die wpad.dat via DHCP Eintrag. Deshalb wird auf dem Server, welcher DHCP Server für das Netzwerk ist, die entsprechende globale Option gesetzt:
/etc/dhcp/dhcpd.conf
... option local-proxy-config code 252 = text; option local-proxy-config "http://firewall.fzi.lan/wpad.dat"; ...
service isc-dhcp-server restart
Systemsteuerung - Internetoptionen - Verbindungen - LAN-Einstellungen:
[x] Einstellungen automatisch erkennen
Für Firefox darf nicht gewählt werden „Einstellungen des Systems verwenden“ sondern:
[x] Die Proxy-Einstellungen für dieses Netzwerk automatisch erkennen
Damit Webseiten mit automatisch generierten ACL gefiltert werden können, wird z.B. die Liste von shallalist.de eingebunden:
Mit „ACLs herunterladen und anwenden“ wird die Liste geholt. Die Kategorien kann man anschließend einzeln abwählen, wenn man den Zugang zu diesen erlauben will:
Wenn die Kategorien abgewählt wurden, muß man wieder „ACLs herunterladen und anwenden“.
Man kann die Liste auch mit Cron regelmäßig abholen. Dazu auf „Plane mit Cron“ einen Cronjob erstellen
Damit man für die Gruppe „teachers“ alles erlauben kann und die Remote ACL nicht greift ist folgendes zu tun.
- Installation des Plugins „os-web-proxy-useracl“ unter System - Firmware - Erweiterungen. Danach ist das Plugin erreichbar unter Dienste - Web-Proxy - Gruppen und Benutzer
In diesem Beispiel sind zwei Whitelists definiert:
Dürfen Youtube Videos abrufen, welche sonst durch die shallalist blockiert werden würden
Dürfen alles ohne Beschränkungen der shallalist
Die Gruppen müssen im Linuxmuster existieren, weil in den Proxyeinstellungen „linuxmuster“ als Authentifizierung eingestellt ist.
Damit die Windowsupdates/Windows Aktivierung auch ohne Proxy Authentifizierung funktionieren, kann man folgendes machen. Man definiert auf der Firewall unter: Dienste - Web-Proxy - Verwaltung - Weiterleitungsproxy - Zugangskontrolliste - Ausnahmeliste die Domains:
windowsupdate.com .windowsupdate.com mp.microsoft.com .mp.microsoft.com metaservices.microsoft.com .metaservices.microsoft.com
Damit die ACL vor der Authentifizierung ausgeführt wird legt man an der OPNsense die Datei an:
/usr/local/etc/squid/pre-auth/30-linuxmuster-acl.pre-auth.acl.conf
# ACL list (Deny) blacklist http_access deny blackList # ACL list (Allow) whitelist http_access allow whiteList
Hier kann man obige Domains in den Abschnitt „Schwarze Liste“ schreiben, um Windows Updates auch für die in dieser Dokumentation generell freigeschalteten Lehrer zu sperren.
In jedem Fall muss hier irgendeine Domain in White/Blacklist stehen, auch wenn man diese nicht verwendet. Sonst kann man Squid nicht starten, weil in pre-auth30-linuxmuster-acl.pre-auth.acl.conf die Listen definiert sind. Im Zweifel also in die beiden ACLs „invalid“ als Domain eintragen.
Damit die User und Gruppen ACL greift, muß diese vor der shallalist ausgeführt werden. Dazu ändert man /usr/local/opnsense/service/templates/OPNsense/Proxy/squid.acl.conf:
include /usr/local/etc/squid/auth/*.conf(hier liegt die ProxyUserACL.conf) muss hier eingefügt werden:
# ACL list (Deny) blacklist {% if helpers.exists('OPNsense.proxy.forward.icap.enable') and OPNsense.proxy.fo rward.icap.enable == '1' %} {% if helpers.exists('OPNsense.proxy.forward.icap.ResponseURL') %} adaptation_access response_mod deny blackList {% endif %} {% if helpers.exists('OPNsense.proxy.forward.icap.RequestURL') %} adaptation_access request_mod deny blackList {% endif %} {% endif %} http_access deny blackList {% endif %} # linuxmuster Aenderung # Auth plugins include /usr/local/etc/squid/auth/*.conf
und hier deaktiviert werden:
{% if helpers.exists('OPNsense.proxy.forward.icap.exclude') %} # ACL - Whitelist - User defined (whiteList) {% for element in OPNsense.proxy.forward.icap.exclude.split(",") %} {% if '^' in element or '\\' in element or '$' in element or '[' in element %} acl exclude_icap url_regex {{element|encode_idna}} {% else %} acl exclude_icap url_regex {{element|encode_idna|replace(".","\.")}} {% endif %} {% endfor %} {% if helpers.exists('OPNsense.proxy.forward.icap.ResponseURL') %} adaptation_access response_mod deny exclude_icap {% endif %} {% if helpers.exists('OPNsense.proxy.forward.icap.RequestURL') %} adaptation_access request_mod deny exclude_icap {% endif %} {% endif %} # linuxmuster Aenderung # Auth plugins #include /usr/local/etc/squid/auth/*.conf
Zum Schluß generiert man die Erstellung der angepassten Squid Konfiguration durch eine beliebige „Speichern“ Aktion in der OPNSense WebGUI im Modul Web-Proxy.