= Squid en Kerberos authenticatie = Deze howto zorgt ervoor dat Windows XP, Windows 7 en hoger , die zijn aangemeld op een Windows Active directory server, zich ook transparant autenticeren bij uw SYN-3 squid server. Er zijn geen aanpassingen/hacks nodig in de Windows omgeving. '''in progress''' == Algemene info == Bron howto: http://serverfault.com/questions/66556/getting-squid-to-authenticate-with-kerberos-and-windows-2008-2003-7-xp = Windows config = == Windows 2003 server configuratie == Heb AD wizard gevolgt. Volgende instellingen op server * Domein: ADTEST.PSY.DATUX.NL * IP: 192.168.13.13 * Server hostnaam: w2k3-edwin.adtest.psy.datux.nl * Server als DNS laten configureren door de AD wizard. * Gewone standaard gebruiker: edwin, pass test == Windows 7 client == * Als DNS 192.168.13.13 instellen. * Aanmelden op het domein(Inloggen als Administrator, niet als user) en testen Als je zover bent heb je dus een werkende windows Active directory met 1 aangemelde computer. = DNS = * Maak een A record en Reverse record in de Windows server, voor uw proxy server. In ons geval: proxy.adtest.psy.datux.nl <-> 192.168.13.150 * Zorg dat alle machines de Windows server als DNS gebruiken * Controleer met het dig commando of alle forward en reverse looksups goed gaan. = Syn-3 config = Installeer minimaal de volgende pakketten, inclusief dependencies. Laatste versies in svn tree. * Syn-3 pakket samba * Syn-3 pakket cups * Syn-3 pakket mit_kerberos * Syn-3 pakket squid = Kerberos config = Eerst moeten we zorgen dat kerberos goed werkt. De config staat nog in /etc, maar deze komt later misschien in /home/system: {{{ [Syn-3] root@proxy.psy.datux.nl /var/log/samba# cat /etc/krb5.conf [libdefaults] default_realm = PSY.DATUX.NL [realms] PSY.DATUX.NL = { kdc = 192.168.13.13 } }}} Let op de hoofdletters en op het feit dat je de LANGE '''domain''' naam gebruikt voor het AD-domain. (dus NIET de volledige hostname) Gebruik voor kdc het ip van de AD-server. Testen of het werkt doe je zo: {{{ [Syn-3] root@proxy.psy.datux.nl /var/log/samba# kinit administrator@PSY.DATUX.NL Password for administrator@PSY.DATUX.NL: [Syn-3] root@proxy.psy.datux.nl /var/log/samba# klist -e Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@PSY.DATUX.NL Valid starting Expires Service principal 04/21/08 17:03:32 04/22/08 03:03:33 krbtgt/PSY.DATUX.NL@PSY.DATUX.NL renew until 04/22/08 17:03:32, Etype (skey, tkt): ArcFour with HMAC/md5, ArcFour with HMAC/md5 Kerberos 4 ticket cache: /tmp/tkt0 klist: You have no tickets cached }}} Let op de hoofdletters en zo. Je hebt nu een werkende kerberos omgeving die authenticeert naar de AD server. = Samba config = Ik heb de oude samba config gemoved, en een symlink gemaakt naar de smb_ads.conf. Zo kan ik hier straks een los pakketje of losse SCC optie van maken: {{{ [Syn-3] root@proxy.psy.datux.nl /home/system/samba# ls -la total 12 drwxr-xr-x 4 root root 86 Apr 21 16:03 ./ drwxr-xr-x 19 root root 4096 Jul 3 2007 ../ drwx------ 2 root root 40 Apr 21 16:03 private/ drwxr-xr-x 2 root root 107 Apr 21 15:58 shares/ lrwxrwxrwx 1 root root 12 Apr 21 16:02 smb.conf -> smb_ads.conf -rw-r--r-- 1 root root 719 Apr 21 16:30 smb_ads.conf -rw-r--r-- 1 root root 2051 Apr 10 14:51 smb_pdc.conf }}} Inhoud van mn config: {{{ [Syn-3] root@proxy.psy.datux.nl /home/system/samba# cat smb_ads.conf [global] workgroup = PSY netbios name = proxy realm = PSY.DATUX.NL server string = Linux Samba Server security = ads encrypt passwords = Yes password server = 192.168.13.13 log file = /var/log/samba/%m.log max log size = 0 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 preferred master = False local master = No domain master = False dns proxy = No wins server = 192.168.13.13 winbind separator = / winbind enum users = yes winbind enum groups = yes winbind use default domain = yes idmap uid = 10000-20000 idmap gid = 10000-20000 }}} Letop dat de netbios naam overeenkomt met de Syn-3 hostnaam! De samba services mogen op dit moment nog down zijn. (werken toch nog niet op dit moment) Pas /etc/resolv.conf aan zodat de dns server van de 2003 bak gebruikt word: {{{ [Syn-3] root@proxy.psy.datux.nl /home/system/samba# cat /etc/resolv.conf nameserver 192.168.13.13 }}} Join het domein {{{ [Syn-3] root@proxy.psy.datux.nl /home/system/samba# net ads join -U administrator administrator's password: Using short domain name -- PSY Joined 'PROXY' to realm 'PSY.DATUX.NL' }}} (Re)start samba en test of alles werkt: {{{ [Syn-3] root@proxy.psy.datux.nl /home/system/samba# svc -du /service/smbd/ /service/nmbd/ /service/winbindd/ [Syn-3] root@proxy.psy.datux.nl /home/system/samba# wbinfo -t checking the trust secret via RPC calls succeeded [Syn-3] root@proxy.psy.datux.nl /home/system/samba# wbinfo -u administrator gast support_388945a0 krbtgt edwin [Syn-3] root@proxy.psy.datux.nl /home/system/samba# wbinfo -g BUILTIN/administrators BUILTIN/users domeincomputers domeincontrollers schema-administrators ondernemingsadministrators domeinadministrators domeingebruikers domeingasten maker eigenaars groepsbeleid dnsupdateproxy }}} '''Als wbinfo -t niet werkt, komt waarschijnlijk de hostname/domain van de server niet overeen met de rest!''' Als je zover bent heb je je samba server succesvol gejoined aan de AD server. double-w00t. = nss config = Nu moet linux ook usernames en groepen kunnen 'resolven' via de AD server. Nu gaan we het systeem dus echt gebruik laten maken van AD: Wijzig nsswitch.conf: {{{ [Syn-3] root@proxy.psy.datux.nl ~# cat /etc/nsswitch.conf ... passwd: files winbind ldap group: files winbind ldap ... }}} Als alles goed gegaan is kun je nu de volgende dingen doen: {{{ [Syn-3] root@proxy.psy.datux.nl ~# id edwin uid=10000(edwin) gid=10004(domeingebruikers) groups=10004(domeingebruikers) [Syn-3] root@proxy.psy.datux.nl ~# id administrator uid=10001(administrator) gid=10004(domeingebruikers) groups=10004(domeingebruikers),10007(schema-administrators),10008(ondernemingsadministrators),10009(domeinadministrators),10011(maker eigenaars groepsbeleid),10002(BUILTIN/administrators) [Syn-3] root@proxy.psy.datux.nl ~# getent passwd ... administrator:*:10001:10004:Administrator:/home/ADTEST/administrator:/bin/false gast:*:10002:10010:Gast:/home/ADTEST/gast:/bin/false support_388945a0:*:10003:10004:SUPPORT_388945a0:/home/ADTEST/support_388945a0:/bin/false krbtgt:*:10004:10004:krbtgt:/home/ADTEST/krbtgt:/bin/false edwin:*:10000:10004:edwin eefting:/home/ADTEST/edwin:/bin/false ... [Syn-3] root@proxy.psy.datux.nl ~# getent group ... domeincomputers:x:10005: domeincontrollers:x:10006: schema-administrators:x:10007:administrator ondernemingsadministrators:x:10008:administrator domeinadministrators:x:10009:administrator domeingebruikers:x:10004: domeingasten:x:10010: maker eigenaars groepsbeleid:x:10011:administrator dnsupdateproxy:x:10012: BUILTIN/administrators:x:10002:administrator BUILTIN/users:x:10003: ... }}} Als je zover bent maakt linux al actief gebruik van AD. Als de windows server nu crashed, zal het resolven van usernames en groups dus niet goed lukken. = Squid configuratie = == Windows instellingen == Nu is het simpel nog een kwestie van squid configureren. Zorg eerst dat squid met zn standaard Syn-3 config reeds goed werkt, en stel in de windows xp client de Proxy in. Test dit alles. We zien dat Windows de proxy nu anoniem gebruikt, zoals normaal is: {{{ [Syn-3] root@proxy.psy.datux.nl ~# tail -f /var/log/squid/access.log 1208791882.340 33 192.168.13.14 TCP_MISS/200 899 GET http://ilse.nl/images/tabjes/bt-internet.gif - DIRECT/62.69.179.217 image/gif 1208791882.352 28 192.168.13.14 TCP_MISS/200 917 GET http://ilse.nl/images/tabjes/bt-achterklap.gif - DIRECT/62.69.179.217 image/gif 1208791882.362 34 192.168.13.14 TCP_MISS/200 886 GET http://ilse.nl/images/tabjes/bt-zakelijk.gif - DIRECT/62.69.179.217 image/gif ... }}} == NTLM authenticatie instellen == Zorg eerst dat je de ntlm_auth van de samba package hebt! Die van squid is de verkeerde. (deze zou er niet meer in moeten zitten vanaf nu) Deze kan je zo testen: {{{ [Syn-3] root@proxy.psy.datux.nl /# ntlm_auth --username=edwin password: NT_STATUS_WRONG_PASSWORD: Wrong Password (0xc000006a) [Syn-3] root@proxy.psy.datux.nl /# ntlm_auth --username=edwin password: NT_STATUS_OK: Success (0x0) }}} Set daarna de permissies van de winbindd socket, zodat squid er bij kan: {{{ [Syn-3] root@proxy.psy.datux.nl ~# chgrp nogroup /var/cache/samba/winbindd_privileged/ }}} '''squid.conf hoeft niet meer aangepast te worden: tegenwoordig kan men in de SCC bij squid->Instellingen voor NTLM authenticatie kiezen. Daarna kan er via advanced filtering een group-filter regel worden gemaakt en zal alles werken.''' Nu is het tijd om /home/system/proxy/squid.conf te wijzigen. Voeg als extra authenticatie ntlm toe. Deze moet VOOR basic komen! {{{ auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 50 }}} Hierdoor kunnen AD clients zich authentificeren op 'magische' wijs, via het NTLM systeem. Appart inloggen op de proxy via de vervelende popup is dan niet meer nodig. Verander auth_basic van ldap naar ntlm_auth: {{{ auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic auth_param basic children 50 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 5 hour }}} Hierdoor kunnen niet-AD clients zich nog gewoon met de vervelende popup authentificeren. Voeg een nieuwe acl toe aan de reeds bestaande acl lijst: {{{ acl NTLMUsers proxy_auth REQUIRED }}} Activeer de authenticatie daadwerkelijk door een nieuwe regel toe te voegen aan de http_access lijst: {{{ http_access allow NTLMUsers }}} Deactiveren van authenticatie kan nu door hier weer een hekje voor te zetten. Restart squid en test of het werkt: {{{ [Syn-3] root@proxy.psy.datux.nl /home/system/proxy/filterlists# svcstart /service/squid/ Starting /service/squid/ ...DONE [Syn-3] root@proxy.psy.datux.nl /home/system/proxy/filterlists# tail -f /var/log/squid/access.log ... 1208804648.362 1 192.168.13.14 TCP_DENIED/407 1752 GET http://nl.msn.com/ - NONE/- text/html 1208804648.367 1 192.168.13.14 TCP_DENIED/407 1908 GET http://nl.msn.com/ - NONE/- text/html 1208804648.486 0 192.168.13.14 TCP_DENIED/407 1854 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ushp_v11.css - NONE/- text/html 1208804648.487 0 192.168.13.14 TCP_DENIED/407 1842 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ovr2.css - NONE/- text/html 1208804648.497 1 192.168.13.14 TCP_DENIED/407 2010 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ushp_v11.css - NONE/- text/html 1208804648.497 0 192.168.13.14 TCP_DENIED/407 1848 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ie_v11.css - NONE/- text/html 1208804648.500 3 192.168.13.14 TCP_DENIED/407 1998 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ovr2.css - NONE/- text/html 1208804648.503 2 192.168.13.14 TCP_DENIED/407 2004 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ie_v11.css - NONE/- text/html 1208804648.700 202 192.168.13.14 TCP_MISS/304 308 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ushp_v11.css edwin DIRECT/8.12.211.124 - 1208804648.713 209 192.168.13.14 TCP_MISS/304 337 GET http://estc.msn.com/br/hp/v11/nl-nl/css/ie_v11.css edwin DIRECT/8.12.211.124 - }}} Score!! == GROUP filtering == Op dit moment zit er alleen nog maar voor LDAP group filtering in de Advanced proxy filtering module. Omdit nu toch al te kunnen moet u het volgende checken. * is het bestand /usr/bin/wbinfo_group.pl aanwezig? Zo niet, zorg ervoor dat u deze uit een source .tar.gz van squid haalt. In versie 4.3(stable), zit het reeds bij in. * plaats het volgende '''external_acl_type wbinfo_group %LOGIN /usr/bin/wbinfo_group.pl''' in de squid config, bij de andere external_acl_type. U moet nu in staat zijn om met deze ACL te filteren, zie het LDAP voorbeeld in de config file voor voorbeeld. '''Groupen worden gecached door winbind. De winbind cache time staat standaard op 300 seconden, dus het kan even duren voordat nieuwe groupen zichtbaar worden'''