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.

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:

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 (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:

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.

Reihenfolge der ACL in squid.conf

Nach einem Update der OPNsense(squid) muß überprüft werden, ob die Datei verändert wurde

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.

 [[anwenderwiki:firewall_lmn7:squidproxy:start]] anwenderwiki/firewall_lmn7/squidproxy/start.txt · Zuletzt geändert: 2022/04/12 08:30 von garblixa