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.
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.
Die Konfiguration von ACLs erfolgt in der
squid.conf-Datei. Die Grundstruktur einer ACL besteht aus
zwei Schritten: Definition und Anwendung.
Die Definition einer ACL legt die Bedingungen fest, die eine Anfrage erfüllen muss. Die allgemeine Syntax lautet:
acl <Name> <Typ> <Wert>
src
für Quell-IP-Adresse, dst für Ziel-IP-Adresse,
url_regex für URL-Muster).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
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>
http_access allow localnet
http_access deny blocked_sites
http_access allow office_hours
Die Reihenfolge der Zugriffskontrollregeln ist wichtig, da Squid die Regeln von oben nach unten prüft und die erste passende Regel anwendet.
# Definieren von ACLs
acl blocked_sites dstdomain .example.com .blockedsite.com
# Zugriffskontrollrichtlinien
http_access deny blocked_sites
blocked_sites, die die Domains example.com und
blockedsite.com umfasst.blocked_sites definierten Domains.# Definieren von ACLs
acl bad_user_agents browser "/etc/squid/bad_user_agents.txt"
# Zugriffskontrollrichtlinien
http_access deny bad_user_agents
bad_user_agents, die Benutzeragenten aus der Datei
bad_user_agents.txt umfasst.bad_user_agents definierten
Benutzeragenten.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:
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.
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.
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.
acl blocked_sites url_regex -i .facebook.com .twitter.com
http_access deny blocked_sites
Diese Konfiguration blockiert den Zugriff auf Facebook und Twitter.
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.
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.
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.
acl POST method POST
http_access deny POST
Diese Konfiguration blockiert alle POST-Anfragen.
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.
acl authenticated_users proxy_auth REQUIRED
http_access allow authenticated_users
Diese Regel erlaubt nur authentifizierten Benutzern den Zugriff auf den Proxy.
ACLs können kombiniert werden, um komplexere Zugriffssteuerungen zu ermöglichen. Hier sind einige Beispiele, wie verschiedene ACL-Typen kombiniert werden können:
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.
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.
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).
#!/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.pysquid.confexternal_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.
Squid unterstützt verschiedene Authentifizierungsmethoden, um sicherzustellen, dass nur autorisierte Benutzer auf den Proxy zugreifen können. Zu den gängigen Methoden gehören:
Hier ist ein Beispiel für die Konfiguration der LDAP-Authentifizierung in Squid:
# 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
authenticated_users, die
authentifizierte Benutzer umfasst.Blacklists und Whitelists sind einfache und effektive Methoden zur Kontrolle des Zugriffs auf bestimmte Websites.
# Definieren der Blacklist-ACL
acl blacklist dstdomain "/etc/squid/blacklist.txt"
# Zugriffskontrollrichtlinien
http_access deny blacklist
blacklist, die Domains aus der
Datei blacklist.txt umfasst.# Definieren der Whitelist-ACL
acl whitelist dstdomain "/etc/squid/whitelist.txt"
# Zugriffskontrollrichtlinien
http_access allow whitelist
http_access deny all
whitelist, die Domains aus der
Datei whitelist.txt umfasst.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.
Verwenden von benutzerbasierten ACLs in Kombination mit externen Authentifizierungsprogrammen, um den Zugriff basierend auf Benutzergruppen zu steuern.
Installieren Sie das squid-Paket und die notwendigen
Authentifizierungs-Module:
sudo apt-get install squid apache2-utilsErstellen Sie eine Passwortdatei für die Benutzer:
sudo htpasswd -c /etc/squid/passwords user1
sudo htpasswd /etc/squid/passwords user2Erstellen Sie eine Datei /etc/squid/usergroups mit
folgendem Inhalt:
marketing user1
it user2
squid.confauth_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
Der Zugriff auf das Internet soll nur während der Arbeitszeiten von Montag bis Freitag von 9:00 bis 17:00 Uhr erlaubt sein.
Verwenden Sie zeitbasierte ACLs, um den Zugriff zu bestimmten Zeiten zu erlauben oder zu verweigern.
squid.confacl office_hours time MTWHF 09:00-17:00
http_access allow office_hours
http_access deny all
Der Zugriff auf bestimmte Webseiten, die für Freizeitaktivitäten genutzt werden (z.B. soziale Netzwerke), soll blockiert werden.
Verwenden Sie URL-basierte ACLs, um den Zugriff auf bestimmte Webseiten zu blockieren.
squid.confacl blocked_sites url_regex -i .facebook.com .twitter.com .instagram.com
http_access deny blocked_sites
http_access allow all
Der Zugriff auf soziale Netzwerke soll während der Bürozeiten blockiert, aber nach den Bürozeiten erlaubt sein.
Verwenden Sie eine Kombination aus zeit- und URL-basierten ACLs.
squid.confacl 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
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.
Verwenden Sie IP-basierte ACLs, um den Zugriff basierend auf IP-Adressen zu steuern.
squid.confacl 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