18 Zugriffskontrolle in Squid Proxy

18.1 Grundlagen der Access Control Lists (ACLs)

Access Control Lists (ACLs) sind ein wesentliches Element der Konfiguration von Squid. Sie bieten eine flexible und leistungsfähige Methode zur Kontrolle des Zugriffs auf den Proxy-Server und die darüber geleiteten Ressourcen. Im Folgenden werden die Grundlagen, Syntax und grundlegende Verwendung von ACLs in Squid erläutert.

18.1.1 Was sind Access Control Lists?

ACLs in Squid sind Regeln, die definieren, welche Anfragen erlaubt oder abgelehnt werden. Sie werden verwendet, um den Zugriff basierend auf verschiedenen Kriterien wie IP-Adressen, URLs, Zeitplänen und mehr zu steuern. Mit ACLs kann der Administrator spezifische Richtlinien festlegen, die den Zugriff auf den Proxy regeln.

18.1.2 Grundlegende Syntax in der Konfigurationsdatei

Die Konfiguration von ACLs erfolgt in der squid.conf-Datei. Die Grundstruktur einer ACL besteht aus zwei Schritten: Definition und Anwendung.

18.1.2.1 1. Definition einer ACL

Die Definition einer ACL legt die Bedingungen fest, die eine Anfrage erfüllen muss. Die allgemeine Syntax lautet:

acl <Name> <Typ> <Wert>
18.1.2.1.1 Beispiel
acl localnet src 192.168.1.0/24
acl office_hours time MTWHF 09:00-17:00
acl blocked_sites url_regex -i .facebook.com .twitter.com

18.1.2.2 2. Anwendung einer ACL

Nachdem eine ACL definiert wurde, muss sie angewendet werden, um den Zugriff zu erlauben oder zu verweigern. Dies geschieht mit den Direktiven http_access, http_reply_access oder anderen spezifischen Zugriffssteuerungsdirektiven. Die allgemeine Syntax lautet:

http_access allow|deny <Name>
18.1.2.2.1 Beispiel
http_access allow localnet
http_access deny blocked_sites
http_access allow office_hours

18.1.3 Zugriffskontrollregeln

Die Reihenfolge der Zugriffskontrollregeln ist wichtig, da Squid die Regeln von oben nach unten prüft und die erste passende Regel anwendet.

18.1.3.1 Blockieren bestimmter Websites

# Definieren von ACLs
acl blocked_sites dstdomain .example.com .blockedsite.com

# Zugriffskontrollrichtlinien
http_access deny blocked_sites

18.1.3.2 Einschränken des Zugriffs basierend auf Benutzeragenten

# Definieren von ACLs
acl bad_user_agents browser "/etc/squid/bad_user_agents.txt"

# Zugriffskontrollrichtlinien
http_access deny bad_user_agents

18.2 Erweiterte ACL-Typen

Squid bietet eine Vielzahl von ACL-Typen, die es ermöglichen, den Zugriff basierend auf unterschiedlichen Kriterien zu steuern. Hier sind einige der fortgeschritteneren ACL-Typen und deren Anwendungsmöglichkeiten:

18.2.1 Zeitbasierte ACLs

Zeitbasierte ACLs steuern den Zugriff basierend auf bestimmten Zeitplänen. Sie sind besonders nützlich, um den Zugriff auf den Proxy zu bestimmten Tageszeiten oder Wochentagen zu beschränken.

18.2.1.1 Beispiel

acl office_hours time MTWHF 09:00-17:00
http_access allow office_hours
http_access deny all

Diese Regel erlaubt den Zugriff auf den Proxy nur während der Bürozeiten von Montag bis Freitag zwischen 9:00 und 17:00 Uhr und blockiert alle anderen Zeiten.

18.2.2 URL-basierte ACLs

URL-basierte ACLs steuern den Zugriff basierend auf URLs oder URL-Mustern. Dies ist nützlich, um den Zugriff auf bestimmte Webseiten zu erlauben oder zu blockieren.

18.2.2.1 Beispiel

acl blocked_sites url_regex -i .facebook.com .twitter.com
http_access deny blocked_sites

Diese Konfiguration blockiert den Zugriff auf Facebook und Twitter.

18.2.3 IP-basierte ACLs

IP-basierte ACLs ermöglichen die Steuerung des Zugriffs basierend auf IP-Adressen oder IP-Bereichen. Sie sind nützlich, um den Zugriff von bestimmten Netzwerken oder Geräten zu erlauben oder zu verweigern.

18.2.3.1 Beispiel

acl localnet src 192.168.1.0/24
http_access allow localnet

Diese Regel erlaubt allen Geräten im Netzwerk 192.168.1.0/24 den Zugriff auf den Proxy.

18.2.4 Method-basierte ACLs

Method-basierte ACLs steuern den Zugriff basierend auf der HTTP-Methode (z.B. GET, POST, PUT, DELETE). Dies ist nützlich, um bestimmte Arten von Anfragen zu erlauben oder zu blockieren.

18.2.4.1 Beispiel

acl POST method POST
http_access deny POST

Diese Konfiguration blockiert alle POST-Anfragen.

18.2.5 Benutzerbasierte ACLs

Benutzerbasierte ACLs steuern den Zugriff basierend auf Benutzernamen oder Authentifizierungsinformationen. Dies ist nützlich, um den Zugriff auf den Proxy für bestimmte Benutzer oder Benutzergruppen zu steuern.

18.2.5.1 Beispiel

acl authenticated_users proxy_auth REQUIRED
http_access allow authenticated_users

Diese Regel erlaubt nur authentifizierten Benutzern den Zugriff auf den Proxy.

18.3 Kombinierte ACLs

ACLs können kombiniert werden, um komplexere Zugriffssteuerungen zu ermöglichen. Hier sind einige Beispiele, wie verschiedene ACL-Typen kombiniert werden können:

18.3.1 Kombination von Zeit- und IP-basierten ACLs

acl localnet src 192.168.1.0/24
acl office_hours time MTWHF 09:00-17:00

http_access allow localnet office_hours
http_access deny all

Diese Konfiguration erlaubt den Zugriff für das lokale Netzwerk während der Bürozeiten und blockiert alle anderen Anfragen.

18.3.2 Kombination von URL- und Method-basierten ACLs

acl blocked_sites url_regex -i .facebook.com .twitter.com
acl POST method POST

http_access deny blocked_sites
http_access deny POST
http_access allow all

Diese Regel blockiert den Zugriff auf Facebook und Twitter sowie alle POST-Anfragen, erlaubt jedoch alle anderen Anfragen.

18.4 Nutzung von externen ACLs

Squid unterstützt die Verwendung von externen ACL-Programmen, die komplexere Prüfungen durchführen können, als dies mit internen ACLs möglich ist. Diese externen Programme können in jeder Programmiersprache geschrieben werden und erhalten die zu überprüfenden Informationen über stdin (Standard Input).

18.4.1 Beispiel für eine externe ACL

  1. Erstellen eines externen ACL-Skripts
#!/usr/bin/env python3

import sys

for line in sys.stdin:
    url = line.strip()
    if "restricted" in url:
        print("ERR")
    else:
        print("OK")

Speichern Sie dieses Skript als check_url.py und machen Sie es ausführbar:

chmod +x check_url.py
  1. Konfiguration in der squid.conf
external_acl_type url_checker ttl=60 children=5 %URI /path/to/check_url.py
acl restricted_url external url_checker

http_access deny restricted_url
http_access allow all

Diese Konfiguration verwendet das externe Skript, um URLs zu überprüfen, und blockiert den Zugriff auf URLs, die das Wort “restricted” enthalten.

18.5 Authentifizierung

18.5.1 Methoden der Authentifizierung

Squid unterstützt verschiedene Authentifizierungsmethoden, um sicherzustellen, dass nur autorisierte Benutzer auf den Proxy zugreifen können. Zu den gängigen Methoden gehören:

18.5.2 Integration und Konfiguration

Hier ist ein Beispiel für die Konfiguration der LDAP-Authentifizierung in Squid:

18.5.2.1 Beispielkonfiguration

# Definieren des Authentifizierungsprogramms
auth_param basic program /usr/lib/squid/basic_ldap_auth -b "dc=example,dc=com" -f "uid=%s" -h ldap.example.com

# ACL für authentifizierte Benutzer
acl authenticated_users proxy_auth REQUIRED

# Zugriffskontrollrichtlinien
http_access allow authenticated_users
http_access deny all

18.6 Zugriffsbeschränkungen

18.6.1 Blacklists und Whitelists

Blacklists und Whitelists sind einfache und effektive Methoden zur Kontrolle des Zugriffs auf bestimmte Websites.

18.6.1.1 Beispielkonfiguration für Blacklist

# Definieren der Blacklist-ACL
acl blacklist dstdomain "/etc/squid/blacklist.txt"

# Zugriffskontrollrichtlinien
http_access deny blacklist

18.6.1.2 Beispielkonfiguration für Whitelist

# Definieren der Whitelist-ACL
acl whitelist dstdomain "/etc/squid/whitelist.txt"

# Zugriffskontrollrichtlinien
http_access allow whitelist
http_access deny all

18.7 Szenarien und Anwendungsfälle

18.7.1 Szenario 1: Zugriffskontrolle basierend auf Benutzergruppen

18.7.1.1 Problemstellung

In einem Unternehmensnetzwerk sollen bestimmte Benutzergruppen, wie z.B. die Marketing-Abteilung, nur eingeschränkten Zugriff auf das Internet haben, während andere Gruppen, wie z.B. die IT-Abteilung, uneingeschränkten Zugriff haben.

18.7.1.2 Lösung

Verwenden von benutzerbasierten ACLs in Kombination mit externen Authentifizierungsprogrammen, um den Zugriff basierend auf Benutzergruppen zu steuern.

18.7.1.2.1 Schritt 1: Konfiguration der Authentifizierung

Installieren Sie das squid-Paket und die notwendigen Authentifizierungs-Module:

sudo apt-get install squid apache2-utils
18.7.1.2.2 Schritt 2: Erstellen der Benutzerdatei

Erstellen Sie eine Passwortdatei für die Benutzer:

sudo htpasswd -c /etc/squid/passwords user1
sudo htpasswd /etc/squid/passwords user2
18.7.1.2.3 Schritt 3: Erstellen der Benutzergruppen

Erstellen Sie eine Datei /etc/squid/usergroups mit folgendem Inhalt:

marketing user1
it user2
18.7.1.2.4 Schritt 4: Konfiguration der ACLs in der squid.conf
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive on

acl auth_users proxy_auth REQUIRED
external_acl_type usergroup ttl=300 children=5 %LOGIN /usr/lib/squid/ext_file_userip_acl /etc/squid/usergroups

acl marketing external usergroup marketing
acl it external usergroup it

http_access allow auth_users
http_access deny marketing
http_access allow it
http_access deny all

18.7.2 Szenario 2: Zugriffskontrolle basierend auf Tageszeit

18.7.2.1 Problemstellung

Der Zugriff auf das Internet soll nur während der Arbeitszeiten von Montag bis Freitag von 9:00 bis 17:00 Uhr erlaubt sein.

18.7.2.2 Lösung

Verwenden Sie zeitbasierte ACLs, um den Zugriff zu bestimmten Zeiten zu erlauben oder zu verweigern.

18.7.2.2.1 Konfiguration in der squid.conf
acl office_hours time MTWHF 09:00-17:00
http_access allow office_hours
http_access deny all

18.7.3 Szenario 3: Zugriffskontrolle basierend auf URL-Inhalten

18.7.3.1 Problemstellung

Der Zugriff auf bestimmte Webseiten, die für Freizeitaktivitäten genutzt werden (z.B. soziale Netzwerke), soll blockiert werden.

18.7.3.2 Lösung

Verwenden Sie URL-basierte ACLs, um den Zugriff auf bestimmte Webseiten zu blockieren.

18.7.3.2.1 Konfiguration in der squid.conf
acl blocked_sites url_regex -i .facebook.com .twitter.com .instagram.com
http_access deny blocked_sites
http_access allow all

18.7.4 Szenario 4: Kombination von Zeit- und URL-basierten ACLs

18.7.4.1 Problemstellung

Der Zugriff auf soziale Netzwerke soll während der Bürozeiten blockiert, aber nach den Bürozeiten erlaubt sein.

18.7.4.2 Lösung

Verwenden Sie eine Kombination aus zeit- und URL-basierten ACLs.

18.7.4.2.1 Konfiguration in der squid.conf
acl office_hours time MTWHF 09:00-17:00
acl blocked_sites url_regex -i .facebook.com .twitter.com .instagram.com

http_access deny blocked_sites office_hours
http_access allow all

18.7.5 Szenario 5: Zugriffskontrolle basierend auf IP-Adressen

18.7.5.1 Problemstellung

Bestimmte Geräte, wie z.B. Server, sollen uneingeschränkten Zugriff auf das Internet haben, während andere Geräte, wie z.B. Benutzer-PCs, eingeschränkten Zugriff haben.

18.7.5.2 Lösung

Verwenden Sie IP-basierte ACLs, um den Zugriff basierend auf IP-Adressen zu steuern.

18.7.5.2.1 Konfiguration in der squid.conf
acl servers src 192.168.1.100 192.168.1.101
acl pcs src 192.168.1.102-192.168.1.200

http_access allow servers
http_access deny pcs
http_access allow all