Squid-Kit-ldap: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
| (15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 2: | Zeile 2: | ||
==Wir legen 2 Gruppen an== | ==Wir legen 2 Gruppen an== | ||
;Wir trennen Benutzer nach Berechtigungen in Gruppen. | ;Wir trennen Benutzer nach Berechtigungen in Gruppen. | ||
;Die Gruppe | ;Die Gruppe „teamleitung" bekommt später vollen Zugriff, „agents" wird eingeschränkt. | ||
===Gruppen anlegen=== | |||
*ldapaddgroup callcenter | |||
*ldapaddgroup teamleitung | *ldapaddgroup teamleitung | ||
*ldapaddgroup agents | *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. | ;Setzt die Passwörter für die Benutzer. | ||
;Diese werden für die Anmeldung am Proxy verwendet. | ;Diese werden für die Anmeldung am Proxy verwendet. | ||
*ldapsetpasswd wilma | *ldapsetpasswd wilma | ||
*ldapsetpasswd betty | *ldapsetpasswd betty | ||
| Zeile 27: | Zeile 31: | ||
;Authentifizierung erfolgt gegen einen LDAP-Server. | ;Authentifizierung erfolgt gegen einen LDAP-Server. | ||
;TLS sollte verwendet werden, damit Benutzername und Passwort nicht im Klartext übertragen werden. | ;TLS sollte verwendet werden, damit Benutzername und Passwort nicht im Klartext übertragen werden. | ||
==Installation== | ==Installation== | ||
{| class="wikitable" | |||
! Distribution !! Befehl | |||
|- | |||
| Debian / Ubuntu || <code>apt install libldap2 ldap-utils</code> | |||
|- | |||
| Rocky Linux || <code>dnf install openldap-clients</code> | |||
|} | |||
{| class="wikitable" | |||
! Distribution !! Squid mit SSL | |||
|- | |||
| Debian / Ubuntu || <code>apt install squid-openssl</code> | |||
|- | |||
| Rocky Linux || bereits im Standard-Paket enthalten | |||
|} | |||
==Wir testen die Verbindung zum LDAP Server== | ==Wir testen die Verbindung zum LDAP Server== | ||
;Wir erstellen die Konfiguration | ;Wir erstellen die Konfiguration | ||
*vi | *vi /etc/ldap/ldap.conf | ||
BASE dc=it213,dc=int | BASE dc=it213,dc=int | ||
URI ldaps://ldap.it213.int | URI ldaps://ldap.it213.int | ||
ldap_version | ldap_version | ||
===Kommen wir auf den | |||
===Kommen wir auf den LDAP Server?=== | |||
*ldapsearch -x | *ldapsearch -x | ||
===Verschlüsselung ok?=== | ===Verschlüsselung ok?=== | ||
*openssl s_client -host ldap.it213.int -port 636 | *openssl s_client -host ldap.it213.int -port 636 | ||
==Die Konfiguration== | ==Die Konfiguration== | ||
===Wir fangen wieder bei null an=== | ===Wir fangen wieder bei null an=== | ||
*cd /etc/squid | *cd /etc/squid | ||
*grep "^[^#]" squid.conf.org > squid.conf | *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 | *vi /etc/squid/squid.conf | ||
{| class="wikitable" | |||
! Distribution !! Helper-Pfad | |||
|- | |||
| Debian / Ubuntu || <code>/usr/lib/squid/basic_ldap_auth</code> | |||
|- | |||
| Rocky Linux || <code>/usr/lib64/squid/basic_ldap_auth</code> | |||
|} | |||
acl localnet src 0.0.0.1-0.255.255.255 | acl localnet src 0.0.0.1-0.255.255.255 | ||
acl localnet src 10.0.0.0/8 | acl localnet src 10.0.0.0/8 | ||
| Zeile 94: | Zeile 123: | ||
===Neu starten=== | ===Neu starten=== | ||
*systemctl restart squid | *systemctl restart squid | ||
=== | |||
===Schritt 2 – LDAP Gruppen + Blacklist=== | |||
;Teamleitung bekommt vollen Zugriff, agents werden durch die Blacklist eingeschränkt. | |||
{| class="wikitable" | |||
! Distribution !! Helper-Pfad | |||
|- | |||
| Debian / Ubuntu || <code>/usr/lib/squid/ext_ldap_group_acl</code> | |||
|- | |||
| Rocky Linux || <code>/usr/lib64/squid/ext_ldap_group_acl</code> | |||
|} | |||
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 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 | ||
| Zeile 130: | Zeile 142: | ||
auth_param basic casesensitive off | auth_param basic casesensitive off | ||
acl ldap-auth proxy_auth REQUIRED | acl ldap-auth proxy_auth REQUIRED | ||
<span style="color:red">external_acl_type ldap_group %LOGIN /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">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 teamleitung external ldap_group teamleitung</span> | ||
<span style="color:red">acl agents external ldap_group agents</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 teamleitung</span> | ||
<span style="color:red">http_access allow agents !badsites</span> | |||
<span style="color:red">http_access allow agents | |||
http_access deny all | http_access deny all | ||
http_port 3128 | http_port 3128 | ||
| Zeile 144: | Zeile 154: | ||
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 | refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 | ||
refresh_pattern . 0 20% 4320 | refresh_pattern . 0 20% 4320 | ||
===Badsites füllen=== | |||
<pre> | |||
cat <<EOF > /etc/squid/badsites.txt | |||
bild.de | |||
spiegel.de | |||
faz.de | |||
tagesschau.de | |||
lol.de | |||
EOF | |||
</pre> | |||
'''Hinweis Rocky Linux:''' SELinux-Kontext für die Blacklist setzen: | |||
<pre> | |||
chcon -t squid_conf_t /etc/squid/badsites.txt | |||
</pre> | |||
===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. | |||
{| class="wikitable" | |||
! Distribution !! Befehl | |||
|- | |||
| Debian / Ubuntu || <code>echo "fred agents" | /usr/lib/squid/ext_ldap_group_acl ...</code> | |||
|- | |||
| Rocky Linux || <code>echo "fred agents" | /usr/lib64/squid/ext_ldap_group_acl ...</code> | |||
|} | |||
*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 | |||
Aktuelle Version vom 22. April 2026, 11:01 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
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