Squid-Kit-ldap: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
 
;Wir trennen Benutzer nach Berechtigungen in Gruppen.
 
;Wir trennen Benutzer nach Berechtigungen in Gruppen.
 
;Die Gruppe „teamleitung“ bekommt später vollen Zugriff, „agents“ wird eingeschränkt.
 
;Die Gruppe „teamleitung“ bekommt später vollen Zugriff, „agents“ wird eingeschränkt.
 
+
===Gruppen anlegen===
 +
*ldapaddgroup callcenter
 
*ldapaddgroup teamleitung
 
*ldapaddgroup teamleitung
 
*ldapaddgroup agents
 
*ldapaddgroup agents
 
 
;Benutzer werden den Gruppen zugeordnet.
 
;Benutzer werden den Gruppen zugeordnet.
 
;Die Gruppenzugehörigkeit steuert später den Zugriff im Squid.
 
;Die Gruppenzugehörigkeit steuert später den Zugriff im Squid.
  
*ldapadduser wilma teamleitung
+
===Nutzer anlegen===
*ldapadduser betty teamleitung
+
*ldapadduser wilma callcenter
*ldapadduser fred agents
+
*ldapadduser betty callcenter
*ldapadduser barney agents
+
*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.
 
;Setzt die Passwörter für die Benutzer.
Zeile 48: Zeile 56:
 
*cd /etc/squid
 
*cd /etc/squid
 
*grep "^[^#]" squid.conf.org > squid.conf
 
*grep "^[^#]" squid.conf.org > squid.conf
 +
===Die Änderungen===
 +
*vi /etc/squid/squid.conf
 +
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
 +
<span style="color:blue"># http_access allow localhost</span>
 +
http_access deny to_localhost
 +
http_access deny to_linklocal
 +
include /etc/squid/conf.d/*.conf
 +
<span style="color:red">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</span>
 +
<span style="color:red">auth_param basic children 20 startup=0 idle=1</span>
 +
<span style="color:red">auth_param basic concurrency 0</span>
 +
<span style="color:red">auth_param basic credentialsttl 500 seconds</span>
 +
<span style="color:red">auth_param basic realm it213 proxy server</span>
 +
<span style="color:red">auth_param basic casesensitive off</span>
 +
<span style="color:red">acl ldap-auth proxy_auth REQUIRED</span>
 +
<span style="color:red">http_access allow ldap-auth</span>
 +
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
 
+
===Die Änderungen===
 
+
*vi /etc/squid/squid.conf
 
+
acl localnet src 0.0.0.1-0.255.255.255
;Konfiguration der LDAP-Authentifizierung in Squid.
+
acl localnet src 10.0.0.0/8
;Squid prüft Benutzername/Passwort direkt im LDAP.
+
acl localnet src 100.64.0.0/10
  auth_param basic program /usr/lib/squid/basic_ldap_auth -v 3 -b ou=users,dc=it113,dc=int -D cn=admin,dc=it113,dc=int -w 123Start$ -f uid=%s -h ldap.it113.int
+
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
 +
<span style="color:blue"># http_access allow localhost</span>
 +
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 children 20 startup=0 idle=1
 
  auth_param basic concurrency 0
 
  auth_param basic concurrency 0
 
  auth_param basic credentialsttl 500 seconds
 
  auth_param basic credentialsttl 500 seconds
  auth_param basic realm xinux proxy server
+
  auth_param basic realm it213 proxy server
 
  auth_param basic casesensitive off
 
  auth_param basic casesensitive off
 
;ACL für alle erfolgreich authentifizierten Benutzer.
 
;REQUIRED bedeutet: Login ist zwingend notwendig.
 
 
  acl ldap-auth proxy_auth REQUIRED
 
  acl ldap-auth proxy_auth REQUIRED
 +
<span style="color:red">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</span>
 +
<span style="color:red">acl teamleitung external ldap_group teamleitung</span>
 +
<span style="color:red">acl agents external ldap_group agents</span>
 +
<span style="color:red">acl badsites url_regex "/etc/squid/badsites.txt"</span>
 +
<span style="color:red">http_access allow teamleitung</span>
 +
<span style="color:red">http_access allow agents !badsites</span>
 +
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
  
;Erlaubt Zugriff für authentifizierte Benutzer.
+
===Badsites füllen===
  http_access allow ldap-auth
+
*cat <<EOF > /etc/squid/badsites.txt
 +
bild.de
 +
spiegel.de
 +
  faz.de
 +
tagesschau.de
 +
lol.de
 +
EOF
  
 +
===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.
  
===Erklärung===
+
==Gruppe im LDAP vorhanden?==
;basic_ldap_auth prüft Benutzername/Passwort gegen LDAP.
+
;Prüfen ob die Gruppe existiert.
;-b gibt die Base-DN an, in der gesucht wird.
+
;Name muss exakt mit der Squid-ACL übereinstimmen.
;-D und -w sind die Zugangsdaten für den LDAP-Bind.
+
*ldapsearch -x -b ou=groups,dc=it213,dc=int cn=agents
;-f uid=%s bedeutet: Loginname wird auf das Attribut uid gemappt.
 
;-h ist der LDAP-Server.
 
  
;Wichtig:
+
==Benutzer in Gruppe enthalten?==
;Für TLS sollte ldaps:// oder StartTLS verwendet werden.
+
;Wichtig: memberUid muss den Login-Namen enthalten.
;Zertifikate müssen auf dem System vertraut sein.
+
;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.
 +
*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
  
===Voraussetzungen im LDAP===
+
==LDAP Login testen==
;Es muss eine OU für Benutzer existieren.
+
;Prüft ob Benutzer sich überhaupt authentifizieren kann.
;Benutzer benötigen mindestens uid und userPassword.
+
;Wenn das fehlschlägt, funktioniert Squid ebenfalls nicht.
 +
*ldapwhoami -x -D "uid=fred,ou=users,dc=it213,dc=int" -W
  
;Beispiel Benutzerstruktur:
+
==Squid Logs prüfen==
dn: uid=martha,ou=users,dc=it113,dc=int
+
;Zeigt ob Anfragen erlaubt oder geblockt werden.
objectClass: inetOrgPerson
+
;User steht in der Logzeile am Ende.
objectClass: posixAccount
+
*tail -f /var/log/squid/access.log
uid: martha
 
cn: Martha
 
sn: User
 
userPassword: {SSHA}...
 
 
 
;Das Attribut uid wird für den Login verwendet.
 
;Das Passwort muss im LDAP gesetzt sein.
 
 
 
 
 
===Authentifizierung mit LDAP-Gruppen===
 
;Gruppen werden verwendet, um Zugriffe gezielt zu steuern.
 
;Squid fragt dabei LDAP ab, ob ein Benutzer Mitglied einer Gruppe ist.
 
 
 
;Definition einer externen ACL für LDAP-Gruppen.
 
external_acl_type ldap_group %LOGIN /usr/lib/squid/ext_ldap_group_acl -v 3 -b ou=groups,dc=it113,dc=int -D cn=admin,dc=it113,dc=int -w 123Start$ -f "(&(objectClass=posixGroup)(cn=%g)(memberUid=%u))" -h ldap.it113.int
 
 
 
;ACL für eine konkrete Gruppe (hier: it).
 
;Nur Mitglieder dieser Gruppe matchen diese ACL.
 
acl it external ldap_group it
 
 
 
;Erlaubt Zugriff nur für Mitglieder der Gruppe.
 
http_access allow it
 
 
 
 
 
===Erklärung===
 
;external_acl_type ruft ein externes Programm zur Prüfung auf.
 
;%LOGIN übergibt den Benutzernamen an das Script.
 
;%g steht für Gruppenname, %u für Benutzername.
 
 
 
;Filter:
 
;Es wird geprüft, ob user (%u) in Gruppe (%g) ist.
 
;Dazu wird memberUid im posixGroup verwendet.
 
 
 
 
 
===Voraussetzungen im LDAP (Gruppen)===
 
;Es muss eine OU für Gruppen existieren.
 
;Gruppen müssen vom Typ posixGroup sein.
 
 
 
;Beispiel Gruppe:
 
dn: cn=it,ou=groups,dc=it113,dc=int
 
objectClass: posixGroup
 
cn: it
 
gidNumber: 10000
 
memberUid: martha
 
memberUid: leroy
 
 
 
;memberUid enthält die Benutzernamen (uid).
 
;Diese müssen mit den Login-Namen übereinstimmen.
 
 
 
 
 
===Wichtig===
 
;Reihenfolge der Regeln beachten:
 
;Gruppenprüfung sollte vor allgemeinen allow-Regeln stehen.
 
 
 
;Beispiel:
 
http_access allow it
 
http_access deny all
 
  
;Wenn vorher allow ldap-auth steht, greift die Gruppenprüfung nicht mehr.
+
==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

Aktuelle Version vom 2. April 2026, 14:53 Uhr

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
Benutzer werden den Gruppen zugeordnet.
Die Gruppenzugehörigkeit steuert später den Zugriff im Squid.

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.
Benötigte Pakete für LDAP-Unterstützung.

ldap-utils enthält Tools zum Testen der Verbindung.

Installation

  • apt install libldap2 ldap-utils

Wenn noch nicht geschehen

  • apt install squid-openssl

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

Die Änderungen

  • vi /etc/squid/squid.conf
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

Die Änderungen

  • vi /etc/squid/squid.conf
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
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

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.
  • 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