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
BASE dc=it213,dc=int
URI ldaps://ldap.it213.int
ldap_version
Kommen wir auf den LDAP Server?
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.
| 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
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
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