Squid-Kit-ldap

Aus Xinux Wiki
Version vom 22. April 2026, 11:01 Uhr von Thomas.will (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Auf dem LDAP Server

Wir legen 2 Gruppen an

Wir trennen Benutzer nach Berechtigungen in Gruppen.
Die Gruppe „teamleitung" bekommt später vollen Zugriff, „agents" wird eingeschränkt.

Gruppen anlegen

  • ldapaddgroup callcenter
  • ldapaddgroup teamleitung
  • ldapaddgroup agents

Nutzer anlegen

  • ldapadduser wilma callcenter
  • ldapadduser betty callcenter
  • ldapadduser fred callcenter
  • ldapadduser barney callcenter

Nutzer den beiden Gruppen hinzufügen

  • ldapaddusertogroup wilma teamleitung
  • ldapaddusertogroup betty teamleitung
  • ldapaddusertogroup fred agents
  • ldapaddusertogroup barney agents
Setzt die Passwörter für die Benutzer.
Diese werden für die Anmeldung am Proxy verwendet.
  • ldapsetpasswd wilma
  • ldapsetpasswd betty
  • ldapsetpasswd fred
  • ldapsetpasswd barney

Auf dem SQUID Server

Authentifizierung mit LDAP

Authentifizierung erfolgt gegen einen LDAP-Server.
TLS sollte verwendet werden, damit Benutzername und Passwort nicht im Klartext übertragen werden.

Installation

Distribution Befehl
Debian / Ubuntu apt install libldap2 ldap-utils
Rocky Linux dnf install openldap-clients
Distribution Squid mit SSL
Debian / Ubuntu apt install squid-openssl
Rocky Linux bereits im Standard-Paket enthalten

Wir testen die Verbindung zum LDAP Server

Wir erstellen die Konfiguration
  • vi /etc/ldap/ldap.conf
BASE    dc=it213,dc=int
URI     ldaps://ldap.it213.int
ldap_version

Kommen wir auf den LDAP Server?

  • ldapsearch -x

Verschlüsselung ok?

  • openssl s_client -host ldap.it213.int -port 636

Die Konfiguration

Wir fangen wieder bei null an

  • cd /etc/squid
  • grep "^[^#]" squid.conf.org > squid.conf

Schritt 1 – LDAP Authentifizierung

Benutzer müssen sich mit LDAP-Zugangsdaten am Proxy anmelden.
  • vi /etc/squid/squid.conf
Distribution Helper-Pfad
Debian / Ubuntu /usr/lib/squid/basic_ldap_auth
Rocky Linux /usr/lib64/squid/basic_ldap_auth
acl localnet src 0.0.0.1-0.255.255.255
acl localnet src 10.0.0.0/8
acl localnet src 100.64.0.0/10
acl localnet src 169.254.0.0/16
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src fc00::/7
acl localnet src fe80::/10
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
# http_access allow localhost
http_access deny to_localhost
http_access deny to_linklocal
include /etc/squid/conf.d/*.conf
auth_param basic program /usr/lib/squid/basic_ldap_auth -v 3 -b dc=it213,dc=int -D cn=admin,dc=it213,dc=int -w 123Start$ -f uid=%s -H ldaps://ldap.it213.int
auth_param basic children 20 startup=0 idle=1
auth_param basic concurrency 0
auth_param basic credentialsttl 500 seconds
auth_param basic realm it213 proxy server
auth_param basic casesensitive off
acl ldap-auth proxy_auth REQUIRED
http_access allow ldap-auth
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:        1440    20%     10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .            0       20%     4320

Neu starten

  • systemctl restart squid

Schritt 2 – LDAP Gruppen + Blacklist

Teamleitung bekommt vollen Zugriff, agents werden durch die Blacklist eingeschränkt.
Distribution Helper-Pfad
Debian / Ubuntu /usr/lib/squid/ext_ldap_group_acl
Rocky Linux /usr/lib64/squid/ext_ldap_group_acl
auth_param basic program /usr/lib/squid/basic_ldap_auth -v 3 -b dc=it213,dc=int -D cn=admin,dc=it213,dc=int -w 123Start$ -f uid=%s -H ldaps://ldap.it213.int
auth_param basic children 20 startup=0 idle=1
auth_param basic concurrency 0
auth_param basic credentialsttl 500 seconds
auth_param basic realm it213 proxy server
auth_param basic casesensitive off
acl ldap-auth proxy_auth REQUIRED
external_acl_type ldap_group %LOGIN %DATA /usr/lib/squid/ext_ldap_group_acl -v 3 -b ou=groups,dc=it213,dc=int -D cn=admin,dc=it213,dc=int -w 123Start$ -f "(&(objectClass=posixGroup)(cn=%g)(memberUid=%u))" -H ldaps://ldap.it213.int
acl teamleitung external ldap_group teamleitung
acl agents external ldap_group agents
acl badsites url_regex "/etc/squid/badsites.txt"
http_access allow teamleitung
http_access allow agents !badsites
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:        1440    20%     10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern .            0       20%     4320

Badsites füllen

cat <<EOF > /etc/squid/badsites.txt
bild.de
spiegel.de
faz.de
tagesschau.de
lol.de
EOF

Hinweis Rocky Linux: SELinux-Kontext für die Blacklist setzen:

chcon -t squid_conf_t /etc/squid/badsites.txt

Neu starten

  • systemctl restart squid

Debugging

Fehlersuche LDAP-Gruppen

Wenn Gruppen nicht greifen, liegt es fast immer an LDAP oder am Filter.
Diese Checks helfen, das Problem schnell einzugrenzen.

Gruppe im LDAP vorhanden?

Prüfen ob die Gruppe existiert.
Name muss exakt mit der Squid-ACL übereinstimmen.
  • ldapsearch -x -b ou=groups,dc=it213,dc=int cn=agents

Benutzer in Gruppe enthalten?

Wichtig
memberUid muss den Login-Namen enthalten.
uid und memberUid müssen identisch sein.
  • ldapsearch -x -b ou=groups,dc=it213,dc=int cn=agents | grep memberUid

Helper direkt testen

Testet die Gruppenabfrage unabhängig von Squid.
Nur wenn hier OK kommt, funktioniert es auch im Proxy.
Distribution Befehl
Debian / Ubuntu /usr/lib/squid/ext_ldap_group_acl ...
Rocky Linux /usr/lib64/squid/ext_ldap_group_acl ...
  • echo "fred agents" | /usr/lib/squid/ext_ldap_group_acl -v 3 -b ou=groups,dc=it213,dc=int -D cn=admin,dc=it213,dc=int -w 123Start$ -f "(&(objectClass=posixGroup)(cn=%g)(memberUid=%u))" -H ldaps://ldap.it213.int

LDAP Login testen

Prüft ob Benutzer sich überhaupt authentifizieren kann.
Wenn das fehlschlägt, funktioniert Squid ebenfalls nicht.
  • ldapwhoami -x -D "uid=fred,ou=users,dc=it213,dc=int" -W

Squid Logs prüfen

Zeigt ob Anfragen erlaubt oder geblockt werden.
User steht in der Logzeile am Ende.
  • tail -f /var/log/squid/access.log

Typische Fehler

  • Falscher Gruppenname (agents vs agent)
  • memberUid fehlt oder falsch geschrieben
  • uid stimmt nicht mit Login überein
  • Filter passt nicht zum Schema (posixGroup vs memberOf)
  • Reihenfolge der http_access Regeln falsch