Squid-Kit-ldap: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| (32 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
=Auf dem LDAP Server= | =Auf dem LDAP Server= | ||
==Wir legen 2 Gruppen an== | ==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 teamleitung | ||
*ldapaddgroup agents | *ldapaddgroup agents | ||
*ldapadduser wilma teamleitung | |||
* | ===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 wilma | ||
*ldapsetpasswd betty | *ldapsetpasswd betty | ||
| Zeile 12: | Zeile 27: | ||
*ldapsetpasswd barney | *ldapsetpasswd barney | ||
=Auf dem SQUID Server= | |||
==Authentifizierung mit LDAP== | ==Authentifizierung mit LDAP== | ||
;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== | |||
Debian | {| 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 | ;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 LDAP Server?=== | |||
*ldapsearch -x | *ldapsearch -x | ||
===Verschlüsselung ok?=== | |||
*openssl s_client -host ldap.it213.int -port 636 | *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 | |||
{| 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 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 | |||
; | ===Schritt 2 – LDAP Gruppen + Blacklist=== | ||
;Teamleitung bekommt vollen Zugriff, agents werden durch die Blacklist eingeschränkt. | |||
auth_param basic program /usr/lib/squid/basic_ldap_auth -v 3 -b | |||
{| 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 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 | auth_param basic realm it213 proxy server | ||
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 %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 | |||
===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