wiki:howto/SquidNtlmAuthentication

Version 6 (modified by Edwin Eefting, 15 years ago) (diff)

--

Squid en NTLM authenticatie

Algemene info

De volgende url's hebben mij veel geleerd: http://www.opensourcehowto.org/how-to/squid/squid-with-ntlm-authentication.html

http://www.cyberciti.biz/faq/squid-ntlm-authentication-configuration-howto/

http://mkeadle.org/index.php?p=13

De volgende howto heb ik gevolgt: http://mkeadle.org/index.php?p=13

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 XP prof. 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. W00t!

Syn-3 config

Installeer minimaal de volgende pakketten, inclusief dependencies. Laatste versies in svn tree.

  • Syn-3 pakket samba
  • 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@ADTEST.PSY.DATUX.NL
Password for administrator@ADTEST.PSY.DATUX.NL:

[Syn-3] root@proxy.psy.datux.nl /var/log/samba# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@ADTEST.PSY.DATUX.NL

Valid starting     Expires            Service principal
04/21/08 17:03:32  04/22/08 03:03:33  krbtgt/ADTEST.PSY.DATUX.NL@ADTEST.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 = ADTEST
        netbios name = proxy
        realm = ADTEST.PSY.DATUX.NL
        server string = Linux Samba Server
        security = ads
        encrypt passwords = Yes
        password server = w2k3-edwin
        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 -- ADTEST
Joined 'PROXY' to realm 'ADTEST.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/

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.