Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:firewall_lmn7:squidproxy:start]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
anwenderwiki:firewall_lmn7:squidproxy:start [2021/10/25 14:14] – [Problem in der squid.conf] garblixaanwenderwiki:firewall_lmn7:squidproxy:start [2022/04/12 08:30] (aktuell) garblixa
Zeile 1: Zeile 1:
 +{{tag> lmn7 squid firewall}}
 +====== 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:
 +{{:anwenderwiki:squidproxy:screenshot_20200606_091300.png|}}
 +
 +  * Die Übereinstimmungen(Matches) im Einzelnen
 +{{:anwenderwiki:squidproxy:screenshot_20200606_091447.png|}}
 +{{:anwenderwiki:squidproxy:screenshot_20200606_091625.png|}}
 +
 +Dann die Proxy Definitionen:
 +{{:anwenderwiki:squidproxy:screenshot_20200606_091843.png|}}
 +
 +  * Die Proxy Definitionen im Einzelnen
 +{{:anwenderwiki:squidproxy:screenshot_20200606_092005.png|}}
 +{{:anwenderwiki:squidproxy:screenshot_20200606_092107.png|}}
 +
 +Zum Schluss werden die Regeln zusammengestellt unter:
 +{{:anwenderwiki:squidproxy:screenshot_20200606_092222.png|}}
 +
 +  * Regeln
 +{{:anwenderwiki:squidproxy:screenshot_20200606_092438.png|}}
 +
 +Mit "Speichern" werden die Regeln generiert und sind nun erreichbar unter http://firewall.fzi.lan/wpad.dat
 +
 +Die fertig generierte wpad.dat:
 +<code>
 +/*
 +  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";
 +}
 +</code>
 +
 +==== 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. 
 +
 +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.
 +
 +System - Einstellungen - Verwaltung - Weboberfläche:
 +{{:anwenderwiki:squidproxy:screenshot_20200606_095331.png|}}
 +
 +==== 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:
 +
 +<code>
 +root@server:~# samba-tool dns add -U global-admin 10.0.0.1 fzi.lan wpad A 10.0.0.254
 +</code>
 +
 +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
 +
 +<del>
 +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
 +</del>
 +
 +Danach zum Test auf einem Client im Netzwerk:
 +
 +<code>
 +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.
 +</code>
 +
 +==== 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
 +<code>
 +...
 +option local-proxy-config code 252 = text;
 +option local-proxy-config "http://firewall.fzi.lan/wpad.dat";
 +...
 +</code>
 +
 +<code>
 +service isc-dhcp-server restart
 +</code>
 +
 +==== Windows Client Einstellungen ====
 +
 +Systemsteuerung - Internetoptionen - Verbindungen - LAN-Einstellungen:
 +<code>
 +[x] Einstellungen automatisch erkennen
 +</code>
 +
 +Für Firefox darf nicht gewählt werden "Einstellungen des Systems verwenden" sondern: 
 +<code>
 +[x] Die Proxy-Einstellungen für dieses Netzwerk automatisch erkennen
 +</code>
 +
 +===== Remote ACL / Ferne Zugangskontrollisten =====
 +
 +Damit Webseiten mit automatisch generierten ACL gefiltert werden können, wird z.B. die Liste von shallalist.de eingebunden:
 +
 +{{:anwenderwiki:squidproxy:screenshot_20200606_100217.png|}}
 +
 +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:
 +
 +{{:anwenderwiki:squidproxy:screenshot_20200606_100438.png|}}
 +
 +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
 +{{:anwenderwiki:squidproxy:screenshot_20200606_101236.png|}}
 +
 +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 (optional)=====
 +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:
 +
 +<code>
 +windowsupdate.com
 +.windowsupdate.com
 +mp.microsoft.com
 +.mp.microsoft.com
 +metaservices.microsoft.com
 +.metaservices.microsoft.com
 +</code>
 +
 +{{:anwenderwiki:squidproxy:screenshot_20211223_170219.png|}}
 +
 +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
 +<code>
 +# ACL list (Deny) blacklist
 +http_access deny blackList
 +
 +# ACL list (Allow) whitelist
 +http_access allow whiteList
 +</code>
 +
 +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.
 +
 +===== Reihenfolge der ACL in squid.conf =====
 +<note important>Nach einem Update der OPNsense(squid) muß überprüft werden, ob die Datei verändert wurde </note>
 +
 +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: 
 +
 +<code>
 +# 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
 +</code>
 +
 +und hier deaktiviert werden: 
 +
 +<code>
 +{% 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
 +</code>
 +
 +Zum Schluß generiert man die Erstellung der angepassten Squid Konfiguration durch eine beliebige "Speichern" Aktion in der OPNSense WebGUI im Modul Web-Proxy.
 +
 +
 +
 +
  
 [[anwenderwiki:firewall_lmn7:squidproxy:start]]