Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:firewall_lmn7:squidproxy:start]] 

OPNsense Squid Web-Proxy

Proxy Autodiscovery

wpad.dat erstellen

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:

  • Die Übereinstimmungen(Matches) im Einzelnen

Dann die Proxy Definitionen:

  • Die Proxy Definitionen im Einzelnen

Zum Schluss werden die Regeln zusammengestellt unter:

  • Regeln

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";
}

OPNsense Einstellungen

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.

Alternativ kann ein anderer Webserver die wpad.dat über HTTP bereitstellen.

Eine weitere Alternative ist eine Domain mit offiziellem(z.B. Let's Encrypt) SSL Zertifikat an der Firewall und Nutzung dieser Domain in der wpad.dat.

System - Einstellungen - Verwaltung - Weboberfläche:

Autodiscovery mit DNS

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.

Autodiscovery mit DHCP

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

Windows Client Einstellungen

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

Remote ACL / Ferne Zugangskontrollisten

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

ACL für einzelne Benutzer und Gruppen

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:

  • students

Dürfen Youtube Videos abrufen, welche sonst durch die shallalist blockiert werden würden

  • teachers

Dürfen alles ohne Beschränkungen der shallalist

Die Gruppen müssen im Linuxmuster existieren, weil in den Proxyeinstellungen „linuxmuster“ als Authentifizierung eingestellt ist.

ACL Whitelist/Blacklist generell

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.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.pre-auth.acl.conf die Listen definiert sind. Im Zweifel also in die beiden ACLs „invalid“ als Domain eintragen.

Problem in der squid.conf

Das Problem ist, daß die Remote ACL, also die shallalist vor den User ACL ausgewertet wird und deshalb nicht greift. Hierzu gibt es seit längerem einen OPNsense Bug Report https://github.com/opnsense/plugins/issues/1111

Man kann jetzt die squid.conf anpassen, welche aber bei Änderungen der Proxy Konfiguration in der WebGUI überschrieben werden würde. Ebenso bei Firewall Updates. Um ein Überschreiben einer angepassten squid.conf zu verhindern gibt es die Möglichkeit ein eigenes squid.conf OPNsense Template zu erstellen. https://docs.opnsense.org/development/backend/templates.html

Hier die Vorgehensweise:

Auf der Firewall wird entsprechend der OPNsense Template Dokumentation ein entsprechendens Verzeichnis +TARGETS.D und darin eine .TARGET Definition erstellt.

cd /usr/local/opnsense/service/templates/OPNsense/Proxy
mkdir +TARGETS.D

cat << EOF > +TARGETS.D/squid.conf.TARGET
squid.custom.conf:/usr/local/etc/squid/squid.conf
EOF

Die squid.conf wird aus verschiedenen Teilen unter /usr/local/opnsense/service/templates/OPNsense/Proxy generiert. Für die ACL ist die Datei squid.acl.conf entscheidend. Nun wird also eine squid.acl.custom.conf erstellt und in der squid.custom.conf darauf verwiesen:

  • squid.custom.conf
cp /usr/local/opnsense/service/templates/OPNsense/Proxy/squid.conf /usr/local/opnsense/service/templates/OPNsense/Proxy/squid.custom.conf

Hier die Unterschiede:

diff squid.conf squid.custom.conf 
288c288
< {% include "OPNsense/Proxy/squid.acl.conf" ignore missing with context %}
---
> {% include "OPNsense/Proxy/squid.acl.custom.conf" ignore missing with context %}
  • squid.acl.custom.conf
cp /usr/local/opnsense/service/templates/OPNsense/Proxy/squid.acl.conf /usr/local/opnsense/service/templates/OPNsense/Proxy/squid.acl.custom.conf

Man verschiebt den ACL Teil /usr/local/etc/squid/auth/*.conf, in diesem Verzeichnis befindet sich ProxyUserACL.conf der Erweiterung, in den Teil vor den der Remote ACL/Blacklist. Hier die Unterschiede:

diff -c squid.acl.conf squid.acl.custom.conf
*** squid.acl.conf	Thu Jun  4 14:07:24 2020
--- squid.acl.custom.conf	Thu Jun  4 14:07:03 2020
***************
*** 43,48 ****
--- 43,51 ----
  http_access deny blackList
  {% endif %}
  
+ # Auth plugins
+ include /usr/local/etc/squid/auth/*.conf
+ 
  {% if helpers.exists('OPNsense.proxy.forward.acl.remoteACLs.blacklists') %}
  {%   for blacklist in helpers.toList('OPNsense.proxy.forward.acl.remoteACLs.blacklists.blacklist') if blacklist.enabled=='1' %}
  # ACL list (Deny) remoteblacklist_{{blacklist.filename}}
***************
*** 185,193 ****
  {%   endif %}
  {% endif %}
  
- # Auth plugins
- include /usr/local/etc/squid/auth/*.conf
- 
  #
  # Access Permission configuration:
  #
--- 188,193 ----

Zum Schluß generiert man die Erstellung der angepassten Squid Konfiguration durch eine beliebige „Speichern“ Aktion in der OPNSense WebGUI im Modul Web-Proxy. Sollte ein Upgrade für die OPNsense eingespielt werden, muß die Kompatibilität der squid.conf mit der eigenen Version überprüft und eventuell angepasst werden.

 [[anwenderwiki:firewall_lmn7:squidproxy:start]] anwenderwiki/firewall_lmn7/squidproxy/start.txt · Zuletzt geändert: 2020/11/27 18:02 von garblixa