Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:squidproxy:start]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
anwenderwiki:squidproxy:start [2020/11/27 18:04]
garblixa gelöscht
— (aktuell)
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. ​ 
- 
-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:​ 
-{{:​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 ===== 
-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>​ 
- 
-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 
-<​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.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. 
- 
-<​code>​ 
-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 
-</​code>​ 
- 
-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 
- 
-<​code>​ 
-cp /​usr/​local/​opnsense/​service/​templates/​OPNsense/​Proxy/​squid.conf /​usr/​local/​opnsense/​service/​templates/​OPNsense/​Proxy/​squid.custom.conf 
-</​code>​ 
-  
-Hier die Unterschiede:​ 
-<​code>​ 
-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 %} 
-</​code>​ 
- 
-  * squid.acl.custom.conf 
- 
-<​code>​ 
-cp /​usr/​local/​opnsense/​service/​templates/​OPNsense/​Proxy/​squid.acl.conf /​usr/​local/​opnsense/​service/​templates/​OPNsense/​Proxy/​squid.acl.custom.conf 
-</​code>​ 
- 
-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:​ 
-<​code>​ 
-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 ---- 
- 
-</​code>​ 
- 
-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:squidproxy:start]]