Squid-Kit-ldap: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (8 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=== | ===Gruppen anlegen=== | ||
*ldapaddgroup callcenter | *ldapaddgroup callcenter | ||
*ldapaddgroup teamleitung | *ldapaddgroup teamleitung | ||
*ldapaddgroup agents | *ldapaddgroup agents | ||
| − | |||
| − | |||
===Nutzer anlegen=== | ===Nutzer anlegen=== | ||
| Zeile 16: | Zeile 14: | ||
*ldapadduser barney callcenter | *ldapadduser barney callcenter | ||
| − | ===Nutzer den beiden Gruppen hinzufügen === | + | ===Nutzer den beiden Gruppen hinzufügen=== |
*ldapaddusertogroup wilma teamleitung | *ldapaddusertogroup wilma teamleitung | ||
*ldapaddusertogroup betty teamleitung | *ldapaddusertogroup betty teamleitung | ||
| − | *ldapaddusertogroup | + | *ldapaddusertogroup fred agents |
| − | *ldapaddusertogroup | + | *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 35: | 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 102: | 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 138: | 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 152: | 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=== | ===Badsites füllen=== | ||
| − | + | <pre> | |
| − | + | cat <<EOF > /etc/squid/badsites.txt | |
| − | + | bild.de | |
| − | + | spiegel.de | |
| − | + | faz.de | |
| − | + | tagesschau.de | |
| + | lol.de | ||
EOF | 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=== | ===Neu starten=== | ||
*systemctl restart squid | *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