Nein, ich heirate nicht. Aber ich habe Squid 3 erfolgreich mit einem Active Directory verkuppelt.

Vorbereitungen

Unter Windows muss folgendes erledigt sein:

  • Proxy Server muss im Microsoft DNS Dienst bekannt sein
  • Proxy Server muss als "Trusted Host" im AD angelegt sein

Der Proxy Server sollte entweder eine "richtige" statische IP, oder auch eine Reservierung via DHCP haben. Auch muss die Uhrzeit mit NTP Synchron gehalten werden, den Kerberos ist sehr pingelig was das angeht!

Auf der Linux Seite benötigt man natürlich den root-Account, oder ähnliche Rechte (sudo usw...). Alle nachfolgenden Befehl müssen als root eingegeben werden!

Proxy Server

Auf dem Proxy Server selbst braucht man folgende Pakete:

  • krb5-user
  • squid3
  • winbind

Kerberos Setup

Die Kerberos Konfigurationsdatei (/etc/krb5.conf) sollte so aussehen:

[libdefaults]
 default_realm = DOMAIN
[realms]
 DOMAIN = {
  kdc = 192.168.1.1
  admin_server = 192.168.1.1
 }
[domain_realm]
.domain = DOMAIN
[appdefaults]
pam = {
 ticket_lifetime = 1d
 renew_lifetime = 1d
 forwardable = true
 proxiable = false
 retain_after_close = false
 minimum_uid = 1
}

In meinem Fall war DOMAIN der Domänenname und 192.168.1.1 dessen IP-Adresse. Es ist natürlich wichtig das man dafür eine Funktionierende Namensauflösung hat, Optimal ist es wenn man dafür den DNS Server vom AD nimmt. Da sollte ja ohnehin alles drin sein was man braucht.

Natürlich ist für das Kerberos Setup ein Test nicht schlecht:

kinit user@DOMAIN

Man wird nun nach dem Passwort für den AD-User user gefragt. Wenn alles geklappt hat bekommt man von klist folgende Ausgabe:

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: user@DOMAIN

Valid starting    Expires           Service principal
11/26/08 20:57:19 11/27/08 06:57:20 krbtgt/DOMAIN@DOMAIN
        renew until 11/27/08 20:57:19

Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

So sieht man das man erfolgreich ein TGT (eine Art "Chef-Ticket") bekommen hat, mit diesem könnte man dann Ticket für einzelne Dienste anfordern, was uns aber jetzt nicht weiter interessiert.

Samba / Winbindd Setup

Nachdem jetzt Kerberos läuft, können wir an den nächsten Schritt gehen: Samba (genauer Winbind) will jetzt Domänenmitglied werden, und das geht mit so einer /etc/samba/smb.conf:

[global]
workgroup = DOMAIN
realm = DOMAIN
password server = HOSTNAME.DOMAIN
security = ADS
winbind refresh tickets = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind cache time = 10
winbind use default domain = yes

password server muss der DNS Name vom AD Server sein. Der Rest dürfte selbsterklärend sein. Nun kann man der Domäne beitreten:

net ads join -U user@DOMAIN

Dannach kann man den winbindd starten, was wie gewohnt über

/etc/init.d/winbbind start

geht. Ob dies funktioniert hat kann man mit wbinfo -t prüfen:

checking the trust secret via RPC calls succeeded

Dann kann man auch noch die Gruppen im AD anzeigen lassen, dies geht mit wbinfo -g:

gruppe1
gruppe2
gruppe3
usw...

Damit Squid (genauer ntlm_auth) auch was mit Winbind Anfangen kann muss das Verzeichnis /var/run/samba/winbindd_privileged der Gruppe windbind_priv gehören, und von dieser Lesbar sein.

Squid Setup

Jetzt kommt der letzte Schritt, und zwar die Anpassung der /etc/squid3/squid.conf, hier gehört folgendes noch mit rein:

auth_param ntlm program /usr/bin/ntlm_auth --require-membership-of=DOMAIN\\GRUPPE --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic program /usr/bin/ntlm_auth --require-membership-of=DOMAIN\\GRUPPE --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Domain Proxy Server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
authenticate_cache_garbage_interval 10 seconds
authenticate_ttl 0 seconds
acl AuthorizedUsers proxy_auth REQUIRED
http_access allow all AuthorizedUsers

Von dem Parameter cache_effective_user bzw. cache_effective_group sollte man die Finger lassen (die Zeile sollte also ein Kommentarzeichen am Anfang haben), da sonst ntlm_auth nicht mit den nötigen Rechten läuft.

Es ist wichtig das der User proxy auch in der Gruppe winbindd_priv ist:

sudo adduser proxy winbindd_priv

Mit diesen Einträgen erreicht man das SSO bevorzugt wird, jedoch auch noch der alte Benutzername/Passwort Dialog möglich ist. Dies ist vor allem dann sinnvoll wenn man nicht nur NTLM fähige Clients hat. Ich habe bei der Gelegenheit auch gleich eingestellt das nur Mitglieder der AD Gruppe GRUPPE das Recht haben ins Internet zu gehen, was gerade in großen Firmen gewünscht wird.

Jetzt kann man mit /etc/init.d/squid3 start den Squid Proxy starten, und kann einen Test unter Windows machen (z.b. mit dem Internet Explorer). Das der Proxy Server auch schön auf den Clients eingetragen wird, davon gehe ich jetzt einfach mal aus.