Hochzeit: Squid 3 und Active Directory
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.
Hi, ein kleiner Typo ist im Bereich [global] der smb.conf zu finden. In der letzten Zeile statt "winbind usw default domain" soll "winbind use default domain".
Gruss Mark
Kommentar von Mark — 03.02.2009 08:58:38 | # - re
Danke, hab ich gleich mal gefixt. Abgesehen davon hat alles gepasst?
mfg Betz Stefan
Kommentar von encbladexp — 04.02.2009 20:40:01 | # - re
Hi Stefan,
bin das ganze gerade mal durchgegangen. Hat mit debian lenny super und auf Anhieb funktioniert.
Vielen Dank für das Howto !!
Eine Anmerkung habe ich noch:
Für Newbies wäre es sinnvoll zu wissen das die Kerberos Konfigurationsdatei /etc/krb5.conf heisst.
chexma
Kommentar von Andre — 01.03.2009 20:40:49 | # - re
Thx für die Info, hab ich gleich mal nachgetragen!
mfg Betz Stefan
Kommentar von encbladexp — 01.03.2009 23:20:40 | # - re
Hallo,erstmal find ich dein Howto hier richtig gut gemacht. Leider ha ich ein Problem wenn ich nach deiner Anleitung hier gehe komme ich bis zu dem Punkt der Kerberos Authentificatin welce ich testen will, kriege aber immer nu folgende Fehlermeldung. kinit(v5) : KDC reply did not match expectations while getting initial credential s
Vielleicht kannst du mir ja da helfen. Achso als DC benutze ich einen W2k8 und Debian 5 . Wenn du noch welche INfos von mir brauchst einfach Bescheid sagen. Für dein Hilfe wär ich dir sehr dankbar.
Mit freundlichen Grüßen
Sven Odebrecht
Kommentar von Sven Odebrecht — 20.06.2009 19:48:02 | # - re
Tja, leider kann ich es nicht Testen da ich nur ein Win2K als PDC hatte für meine Tests.
Es kann gut sein das MS hier etwas umgebastelt hat. Ich selbst habe diese Fehlermeldung noch nicht erhalten!
mfg Betz Stefan
Kommentar von encbladexp — 20.06.2009 20:11:02 | # - re
Hi, hatte das gleiche Problem. Nach einem Neustart des Servers (ein Neustart der Dienste sollte da wohl auch reichen) hat alles funktioniert.
mfg hara1d
Kommentar von hara1d — 06.01.2010 13:10:22 | # - re
Hallo Stefan,
sehr gute Anleitung! Worüber ich allerdings gestolpert bin, ist der fehlende Hinweis, dass der User "proxy" der Gruppe "winbindd_priv" hinzugefügt werden muss, damit squid die User-Authentifizierung über samba ans Active Directory weiterreichen kann. Im Vergleich zu einer einfachen http_allow Regel auf Basis einer IP-Range ACL ist das Surfen allerdings deutlich langsamer - gibt es da noch Performance-Tuning-Tipps?
Grüße,
Daniel
Kommentar von Daniel Schmidt — 09.07.2009 09:37:50 | # - re
Ah stimmt, das habe ich vergessen... hat ja keiner gemerkt :-P
In meinen Tests konnte ich hier mit der Performance keine Probleme feststellen, bist du sicher das Namensauflösung & Co nicht trödeln?
mfg Betz Stefan
Kommentar von encbladexp — 09.07.2009 18:42:50 | # - re
Namensauflösung läuft eigentlich ganz gut; ich hatte testweise den squid3 so konfiguriert, dass er einen lokalen Namens-Cache (dnsmasq) verwendet, das hat aber nichts weiter gebracht, als eine weitere potentielle Fehlerquelle... ;-)
Was meinst du mit "& Co"?
Ich habe hier mittlerweile 2 Varianten mit User Authentifizierung und Internetzugang auf Basis einer Gruppenmitgliedschaft am Start - einmal mit ntlm_auth und SingleSignOn und alternativ mit squid_ldap_auth und User-Authentifizierungsdialog.
ntlm_auth: extrem langsam, aber der Anwender muss seine Benutzerdaten nicht noch mal in eine Dialogbox eintippen. Das hat prinzipiell funktioniert, aber nur solange die 3 Testuser über den Squid gesurft haben. Bei mehr als 30 Usern ist die Kommunikation mit dem AD komplett zusammgebrochen... :-(
squid_ldap_auth: Man muss einmal pro Browserstart Username und Passwort eingeben, das wird per ldap-helper gegen das AD geprüft (User/Passwort ok und Mitglied der Gruppe "Internetuser"), danach geht es so schnell zur Sache wie bei einer IP-basierten ACL.
Leider funktionieren die beiden Parameter zur Zwischenspeicherung der NTLM-Daten nicht mehr in Squid 3.0... Ich vermute, dass das Problem irgendwo im Umfeld samba/winbindd/kerberos liegt, oder gar in der Verbindung zum W2K DC.
Wer dazu irgendwelche sachdienlichen Hinweise liefern kann...
Kommentar von Daniel Schmidt — 15.07.2009 15:21:46 | # - re
Vielleicht kann man irgendwo Debuggen wofür er so lange braucht... Du kannst ntlm_auth auch ohne Squid nutzen um zu testen ob alles auch geht. Wenn es schön hier hängt müsste man mal gucken was ntlm_auth da treibt...
mfg Betz Stefan
Kommentar von encbladexp — 15.07.2009 16:28:54 | # - re
Hi!
Super Sache... ich suche aber etwas ohne authentifizierung. Es sollen aber die Usernamen von Windows weitergereicht werden... ist das möglich?
Danke nochmal für die super Anleitung...
Kommentar von Markus — 28.07.2009 17:23:20 | # - re
Hmm, wie genau meinst du das? Was will man ohne Authentifizierung mit dem Username?
mfg Betz Stefan
Kommentar von encbladexp — 29.07.2009 17:06:34 | # - re
Hi,
die Anleitung ist echt hilfreich, vielen Dank!
Mir ist nur ein winziger Fehler aufgefallen, die Gruppe in der user "proxy" aufgenommen werden muss lautet:
"winbindd_priv"
Ansonsten Alles supper! Vielen Dank!
Kommentar von Jonathan — 25.11.2009 12:11:26 | # - re
Fixed, das dies noch keinem aufgefallen ist ;-)
mfg Betz Stefan
Kommentar von encbladexp — 26.11.2009 19:49:31 | # - re