wiki:howto/SquidKerberosAuthentication

Version 14 (modified by Edwin Eefting, 14 years ago) (diff)

--

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 registry aanpassingen/hacks nodig in de Windows omgeving.

Bron howtos:

in progress

Algemeen

  • Zorg dat alle servers op tijd lopen, het liefst via ntp.

Windows config

Windows 2003/2008 server configuratie

Volg de AD wizard. 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

  • Het essentieel dat DNS goed geconfigureerd is, anders werkt kerberos niet.
  • 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

  • Zorg dat u minimaal SYN-3 versie 4.4.2 heeft.
  • Zorg dat de hostname goed is ingesteld. In ons geval: proxy.adtest.psy.datux.nl

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.adtest.psy.datux.nl ~# cat /etc/krb5.conf
[libdefaults]
      default_realm =  ADTEST.PSY.DATUX.NL
      dns_lookup_kdc = no
      dns_lookup_realm = no
      default_keytab_name = /etc/krb5.keytab

; for Windows 2003
      default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
      default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
      permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5

; for Windows 2008 with AES
;      default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;      default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;      permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;
; for MIT/Heimdal kdc no need to restrict encryption type

[realms]
       ADTEST.PSY.DATUX.NL = {
              kdc = w2k3-edwin.adtest.psy.datux.nl 
              admin_server = w2k3-edwin.adtest.psy.datux.nl 
      }

[domain_realm]
      .adtest.psy.datux.nl =  ADTEST.PSY.DATUX.NL
      adtest.psy.datux.nl =  ADTEST.PSY.DATUX.NL

[logging]
  kdc = FILE:/var/log/kdc.log
  admin_server = FILE:/var/log/kadmin.log
  default = FILE:/var/log/krb5lib.log

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.adtest.psy.datux.nl ~# kinit administrator
Password for administrator@ADTEST.PSY.DATUX.NL: 
[Syn-3] root@proxy.adtest.psy.datux.nl ~# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@ADTEST.PSY.DATUX.NL

Valid starting     Expires            Service principal
12/22/10 20:16:44  12/23/10 06:16:12  krbtgt/ADTEST.PSY.DATUX.NL@ADTEST.PSY.DATUX.NL
        renew until 12/23/10 20:16:44, Etype (skey, tkt): ArcFour with HMAC/md5, ArcFour with HMAC/md5 

Let op de hoofdletters en zo.

Je hebt nu een werkende kerberos omgeving die authenticeert naar de Kerberos server.

Active directory kopelling maken

Dit doe je met de msktutil:

[Syn-3] root@proxy.adtest.psy.datux.nl /etc# msktutil -c -b "CN=COMPUTERS" -s HTTP/$HOSTNAME -h $HOSTNAME -k /etc/HTTP.keytab --computer-name centos-http --upn HTTP/$HOSTNAME --server w2k3-edwin.adtest.psy.datux.nl 
SASL/GSSAPI authentication started
SASL username: administrator@ADTEST.PSY.DATUX.NL
SASL SSF: 56
SASL data security layer installed.
Updating all entries for proxy.adtest.psy.datux.nl in the keytab /etc/HTTP.keytab

Voor een Windows 2008 server voegt u --enctypes 28 toe aan het commando.

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