Squid am Active Directory

Aus Port23Wiki
Wechseln zu: Navigation, Suche

Squid Proxy Server am Active Directory

Debian (ab Etch) bietet neben dem älteren Squid 2.x auch den aktuelleren Squid 3.x zum Installieren an. Dieser liefert 2 externe Hilfsprogramme mit, welche ldap (=Active Directory) Informationen abfragen können. Damit kann man zweierlei erledigen:

  • Ist ein Benutzer berechtigt, das Internet zu nutzen?
  • Stimmt das Passwort?

Künftig genügt es, wenn ein Benutzer Mitglied der Gruppe „Internet-erlaubt“ ist. Nach spätestens 60 Sekunden sollte Squid den Benutzer ins Internet lassen. Es ist keine lokale Passwortdatei mehr nötig. Passwortänderungen im AD sind sofort im Squid gültig.

Squid Konfiguration

Um das AD abzufragen benötigt man einen dazu berechtigten User. Hier ist es der User „squid“ mit dem Passwort „secret“. Zunächst definiert man die AD-Abfrage welche prüft, ob das Passwort korrekt ist:

auth_param basic program /usr/lib/squid3/squid_ldap_auth \
     -b "ou=Benutzer,ou=Firma,dc=firma,dc=de" \
     -f "sAMAccountName=%s" \
     -h domain-controller \
     -v 3 \
     -D "CN=squid,OU=ServiceAccounts,OU=Benutzer,OU=Firma,DC=firma,DC=de" \
     -w secret

Bedeutung der Parameter:

-b "ou=Benutzer,ou=Firma,dc=firma,dc=de"

Startpunkt der Suche nach Benutzernamen in der AD-Hierarchie.

-f "sAMAccountName=%s"

Filter für den Benutzernamen. Ja, Microsoft hat dieses LDAP-Feld so benamst – weiß der Geier, warum.

-h domain-controller

Hostname des AD-Servers

-v 3

Version des LDAP Protokolls. Ab W2k3 muss hier „3“ verwendet werden.

-D "CN=squid,OU=ServiceAccounts,OU=Benutzer,OU=Firma,DC=firma,DC=de"

Benutzername (und wo im AD er steckt) der die Abfrage durchführt.

-w secret

Passwort des Benutzers, der die Abfrage durchführt.

Die weiteren Parameter sollten selbsterklärend sein:

auth_param basic children 10
auth_param basic realm Zugang zum Internet
auth_param basic credentialsttl 1 minute
auth_param basic casesensitive off

Die Abfrage, ob der Benutzer einer bestimmten Gruppe angehört sieht so aus:

external_acl_type Internetgruppe ttl=60 %LOGIN \
     /usr/lib/squid3/squid_ldap_group \
  -b "ou=Benutzer,ou=Firma,dc=firma,dc=de" \
  -f "(&(objectclass=person)(sAMAccountName=%u)
      (memberOf=cn=%g,OU=Sonstige,OU=Gruppen,OU=Firma,DC=firma,DC=de))" \
  -h domain-controller \
  -v 3 \
  -D "CN=squid,OU=ServiceAccounts,OU=Benutzer,OU=Firma,DC=firma,DC=de" \
  -w secret

Bedeutung der Parameter:

Internetgruppe

Auf diesen Namen wird später noch verwiesen.

ttl=60

Gültigkeitsdauer der Abfrage – Änderungen im AD werden spätestens nach 60 Sekunden registriert und sollten im Squid verfügbar sein. Allerdings muss man auf alle Fälle warten, bis die Änderung auch auf dem srv-dc1 ist.

%LOGIN

Platzhalter – wird durch den eingegebenen Benutzernamen ersetzt.

-b "ou=Benutzer,ou=Firma,dc=firma,dc=de"

Startpunkt der Suche nach Benutzernamen in der AD-Hierarchie.

-f "(&(objectclass=person)(sAMAccountName=%u)
      (memberOf=cn=%g,OU=Sonstige,OU=Gruppen,OU=Firma,DC=firma,DC=de))"

Abfragefilter um festzustellen, ob der Benutzer (%u) in der Gruppe (%g) ist. Die Syntax ist mir noch schleierhaft. Wer möchte, kann in der RFC 4515 nachlesen, was das Konstrukt genau macht.

Die restlichen Parameter entsprechen der Erklärung oben.

Mittels ACLs (Access Control List) werden nun Definitionen konfiguriert, die später den Zugriff erlauben (oder halt nicht):

acl spezielle_seiten dstdomain "/etc/squid/spezielle_seiten"

Die Datei „spezielle_seiten“ enthält Hostnamen, die für alle erlaubt sind, ohne sich am Squid anzumelden.

acl InetAccess external Internetgruppe Internet-erlaubt

Hier wird die AD-Gruppe referenziert.

acl password proxy_auth REQUIRED src 10.0.0.0/8

Hier wird von allen Hosts im Netz 10.0.0.0/8 eine Authentifizierung verlangt.

http_access allow InetAccess password

Alle Benutzer, die sowohl in der richtigen Gruppe als auch per Passwort authentifiziert sind, erhalten Zugriff auf das Internet.

http_access deny all

Letzte Regel, die für alle anderen das Internet verbietet.

Meine Werkzeuge