Integrace SQUID proxy serveru do Active Directory (1)

13. 9. 2012
Doba čtení: 5 minut

Sdílet

Chcete mít přehled o aktivitě uživatelů Windows používajících vaši SQUID proxy? V době terminálových serverů a neposedných uživatelů nám už nestačí mít v logu IP nebo záznam z DNS. Pokusíme se společně tento problém vyřešit, což nebude úplně jednoduché. A při té příležitosti se podíváme i do historie.

V korporacích dnes vládne Microsoft s jeho Active Directory a nám nezbývá, než se tomuto faktu přizpůsobit. V našem konkrétním případě se pokusíme o dohodu mezi Squid3 běžícím na Ubuntu a řadičem domény ve verzi 2008R2. Hlavním předpokladem je vždy komfort uživatelů, takže je nebudeme nutit zadávat jména a hesla více, než je nutné.

Dále se budeme snažit o co nejnižší finanční náklady našeho řešení. Když nebudeme počítat svůj čas, který jsme mohli v klídku prosedět u pivka na zahrádce, nebude nás to stát vlastně nic (to pivko si stejně nakonec dáme). Možná vás nakonec šéf i pochválí a promítne vaši snahu na výplatní pásku, ale spíše skončíte jen s pocitem dobře odvedené práce.

Kde začít? IWA!

Říkali jsme si, že nebudeme otravovat uživatele (až na výjimky). Potřebujeme, aby prohlížeč (IE) poskytl přihlašovací údaje pokud možno sám. Tato funkce (IWA – Integrated Windows Authentication) byla uvedena společně s Windows 2000. Prohlížeč se pokusí bezpečně předat informace o uživateli s použitím protokolu Kerberos, pokud selže, použije se NTLMSSP (NT LAN Manager Security Support Provider). Amatéři toto nastavení vnutí stanicím v doméně přes Group Policy na serveru, zkušenější informatici využijí této příležitosti pro návštěvu vybraných oddělení (marketing, HR, účtárna, …). Ostatní prohlížeče, jako třeba Firefox, IWA standardně také podporují.

Nástroje > Možnosti Internetu > Upřesnit > Povolit Integrované ověření systémem Windows

Naše síť a co o ní musíme vědět

Správný informatik zná zpaměti IP adresy veřejných DNS serverů, pamatuje si nejméně jedno sériové číslo na instalaci Windows a doma má alespoň dva subnety. A proto si lehce dosadíte své údaje na místo těchto vzorových.

  • Síť
  • Název domény – DOMAIN.INTERNAL
  • Název domény (pre-Win2000) – DINTERNAL (tohle se hodí, když ze soucitu vytáhnete stroj s Windows 95)
  • Adresa – 192.168.21.0/24
  • Proxy
  • IP – 192.168.21.44
  • Hostname – proxy.domain.internal
  • Kerberos hostname – PROXY-K
  • Doménové servery
  • eupdc1.domain.internal
  • 192.168.21.11
  • eupdc2.domain.internal
  • 192.168.21.12

Nastavení DNS

Pokud máte korektně (čti: doporučeně) nastavenou doménu, budou DNS servery běžet na doménových řadičích. Jednou, před lety, jsem měl DNS na Windows serverech vypnutý a používal jsem vedle běžící BIND, ale nastávaly problémy s aktualizací záznamů, nehledě na šílený balast kolem, co si tam Windowsy zapisovaly. Založte si tedy zde A a reverzní PTR záznam našeho proxy serveru. Mám pocit, že by se stejně sám nakonec vytvořil při přihlášení stroje do domény, ale jistota je jistota. A teď si nastavíme DNS na našem proxy. Překvapivě už se na Ubuntu přímo neupravuje /etc/resolv.conf jak bych čekal, ale je potřeba zajít hlouběji až do /etc/network/interfaces. Soubor bude tedy vypadat nějak takhle.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.21.44
        netmask 255.255.255.0
        gateway 192.168.21.9
        dns-nameservers 192.168.21.11 192.168.21.12
        dns-search domain.internal

Pingneme si cvičně doménový řadič a něco venku a vyzkoušíme rovnou i reverse lookup.

# ping eupdc1.domain.internal -c 4
# ping www.google.com -c 4
# dig -x 192.168.21.11

Synchronizace času – NTP

NTP určitě všichni dobře znáte (a pokud ne, máme o něm článek – pozn. redakce), náš server použije doménové řadiče jako zdroje času. Upravíme si /etc/ntp.conf a doplníme naše servery.

server eupdc1.domain.internal
server eupdc2.domain.internal

Restartneme démona a uvidíme, jak to vypadá s časem.

# service ntp restart
 * Stopping NTP server ntpd                                   [ OK ]
 * Starting NTP server ntpd                                   [ OK ]
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 eupdc1.domain.i 192.168.21.11    3 u   29   64    3  149.465  -64.000  54.114
 eupdc2.domain.i 192.168.21.12    4 u   29   64    3   41.705  -29.083   0.993

Tříhlavý pes – Kerberos

Tento protokol má zajímavou minulost, původně byl určen na zabezpečení síťových služeb ve vzdělávacím projektu Athena (MIT, DEC, IBM), kde byly mimo jiné položeny základy X Window System. Nějakou dobu dokonce USA zakázaly export této technologie, protože v té době používal dnes již dávno překonaný DES algoritmus. Nyní se používá notně modifikovaná verze 5. Ještě se s ním můžete také například setkat při autentizaci do WLAN sítí.

Nainstalujeme si ho.

# apt-get install krb5-user libkrb53

A následně upravíme /etc/krb5.conf.

[libdefaults]
        default_realm = DOMAIN.INTERNAL

# The following krb5.conf variables are only for MIT Kerberos.
        dns_lookup_kdc = no
        dns_lookup_realm = no
        ticket_lifetime = 24h
        default_keytab_name = /etc/squid3/PROXY.keytab

    ;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

    ;Windows 2008
        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


[realms]

DOMAIN.INTERNAL = {
        kdc = eupdc1.domain.internal
        kdc = eupdc2.domain.internal
        admin_server = eupdc1.domain.internal eupdc2.domain.internal
        default_domain = domain.internal
}

[domain_realm]

.domain.internal = DOMAIN.INTERNAL
domain.internal = DOMAIN.INTERNAL

Aktuální konfigurace je vhodná pro řadiče domény 2008R2. Pro starší řadiče adekvátně upravte, pokud máte pouze jeden, zbavte se i dalších nepotřebných údajů.

A teď se nám bude hodit konečně Squid a LDAP (ten se použije pro Basic authentication).

# apt-get install squid3 ldap-utils

Naše proxy se bude pokoušet ověřit uživatele následujícími metodami a v tomto pořadí, takže snad uspějeme.

Negotiate/Kerberos, Negotiate/NTLM, NTLM a Basic authentication

Pro první dvě Negotiate (domlouvací) metody budeme ještě potřebovat wrapper od pana Moellerse a potom se bude hodit msktutil (Microsoft Keytab Utility), která nám pomůže vytvořit účet počítače pro účely ověřování přes Kerberos.

Msktutil seženete na Fuhm.net a doplníme knihovny pro správnou funkci utility ze standardního repozitáře.

# apt-get install libsasl2-modules-gssapi-mit libsasl2-modules

Pokud tohle všechno máme, nastal čas si popovídat. Připravte si administrátorský účet, případně účet s oprávněním vkládat počítače do AD. Spusťte následující příkaz a zadejte následně heslo.

# kinit administrator
Password for administrator@DOMAIN.INTERNAL:

Následně spusťte příkaz klist a pokud je vše správně, měli byste dostat obdobný výstup.

bitcoin_skoleni

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@DOMAIN.INTERNAL

Valid starting    Expires           Service principal
29/08/2012 16:13  30/08/2012 02:13  krbtgt/DOMAIN.INTERNAL@DOMAIN.INTERNAL
        renew until 30/08/2012 16:13

No není to krása? Než půjdete domů, dejte ještě:

# kdestroy

No a příště nás čeká ta těžší část, dokončíme konfiguraci Kerberose, rozchodíme si NTLM a konečně upravíme nastavení Squidu. Také si ukážeme jak vytvořit pěkné statistiky přístupů z access logů a konečně pochopíme, proč jsou někteří uživatelé tak přepracovaní.

Použité zdroje informací

Autor článku

Daniel Mašek pracuje jako informatik v nadnárodní korporaci. Jeho specializací jsou SAP ERP a B2B řešení na bázi EDI.