Integrace SQUID proxy serveru do Active Directory (3)

18. 10. 2012
Doba čtení: 5 minut

Sdílet

Svět není dokonalý, naše firemní softwarové vybavení už vůbec ne, a tak nám něco přes naši proxy pojede v pohodě a něco se bude bránit. Koneckonců i my chceme mít více možností než jen pouze povolit/nepovolit přístup do internetu. A mimo jiné nasadíme další nepopulární opatření, těšte se.

Proxy není všemocná

Na začátku tohoto dílu chci upozornit na (doufám) zřejmý fakt, že ne všechen provoz do internetu lze protlačit přes proxy. Idea proxy jako takové vznikla v době pomalých datových spojení pro urychlení načítání již navštívených webových stránek. Dnes již tento problém pominul.

Poznámka: I když někdy mám při spojení přes EDGE u nejmenovaného operátora pocit, že se vracím do svých dětských let, kdy jsme s kámošem provozovali FrontDoor BBS s modemy 14400 baudů – to bylo tenkrát dělo!

Proxy ale doba nezavrhla,jen  její primární účel je dnes trošku jiný. Z výše uvedeného vyplývá, že standardně podporuje pouze protokoly jako HTTP, FTP, jejich zabezpečené varianty a pak ještě pár dalších s obskurními názvy jako „ponožky“ apod. Někdy nám tedy nezbude nic jiného než sáhnout na firewall a pro daný případ proxy prostě obejít. O iptables toho bylo napsáno na Rootu dost, nebude to tedy předmětem tohoto článku.

Pojmenování – Access Control List

Dnes se budeme pohybovat pouze v souboru /etc/squid3/squid.conf. Abychom mohli úspěšně povolovat a omezovat, musíme také správně definovat co. K tomu nám slouží direktiva acl (Access Control List) ve tvaru

acl název typ hodnota1 hodnota2 ...

Název zvolte vždy unikátní, jinak si zaděláte na problém. Pokud přece jen budete mít více řádek se stejným názvem acl, bere se to jako přidání další hodnoty. Typů je několik desítek, mezi nejčastěji používané patří například src, dst, myip, dstdomain, time, url_regex, proto, external, .. Hodnoty lze ukládat i do souborů, stačí parametr uzavřít do uvozovek, např. "/etc/squid3/seznam.zakazanych.stranek.txt". Uvedeme si zde několik jednoduchých příkladů.

# všechny přístupy na google.com
acl to_google dstdomain .google.com

# více cílových domén
acl to_search_engines dstdomain .google.com .seznam.cz .bing.com

# seznam domén v souboru
acl forbidden_sites dstdomain "/etc/squid3/seznam.zakazanych.stranek.txt"

# vybraná zdrojová IP
acl admin src 192.168.21.50

# vybraná zdrojová síť
acl management src 192.168.21.0/24

# vybraný zdrojový rozsah IP
acl servers src 192.168.21.10-192.168.21.20/24

# použití bezpečnostní skupiny AD_GROUP z Active Directory vypadá třeba následovně,
# nicméně vyžaduje ještě definici acl typu memberof a k tomu se dostaneme později
acl AD_GROUP_Members external memberof AD_GROUP

Jak vidíte, možností máme nepřeberné množství. Někteří odvážlivci se teď pustí do sofistikovaného blokování multimediálních souborů a nevhodných stránek s použitím typu urlpath_regex, což může vypadat například následovně.

acl nevhodne_soubory urlpath_regex "/etc/squid3/blockedfiles.txt"
# kde soubor blockedfiles.txt obsahuje např.
\.[Ee][Xx][Ee]$
\.[Aa][Vv][Ii]$
\.[Mm][Pp]3$

Já si ale osobně myslím, že pro content filtering je vhodnější použít nějaký externí software, protože na manuální průběžnou aktualizaci filtrů nevhodného obsahu prostě nebudete mít čas ani sílu a ne každý má rád masochismus.

Definice přístupu – Access List

Máme tedy definované a pojmenované skupiny a teď s jejich pomocí udělíme nebo odmítneme přístup. V první řadě je důležité vědět tři věci.

  • pravidla v access listu jsou postupně čtena odshora dolů a při nalezení první shody je další zpracování ukončeno
  • výchozí stav je odmítnout přístup, tzn. žádné pravidlo = není přístup
  • pokud při zpracování ani jedno pravidlo neodpovídá, výsledným stavem bude opak posledního nalezeného pravidla

A proto už víme, proč si dáváme http_access deny all vždy na konec.

Access listů je povícero, my si bohatě vystačíme s http_access  a případně cache. Dále následuje klíčové slovo allow nebo deny a seznam acl.

http_access allow/deny acl acl ...
http_access allow/deny acl acl ...
...

Pro správné pochopení access listů potřebujete ještě jednu informaci. Můžete používat operátor „NOT“, který se zapisuje „!“ a parametry u acl  jsou ve vztahu logického součtu „OR“, ale u access listu je to logický součin „AND“. Následuje oblíbený příklad.

# Tento access se nikdy neprovede, protože nikdy nebudete mít zároveň dvě IP adresy
acl Ja src 1.0.0.1
acl Ty src 1.0.0.2
http_access allow Ja Ty

# tohle už bude fungovat, také můžeme dát obě adresy do jednoho acl a stačí nám následně jeden access
acl Ja src 1.0.0.1
acl Ty src 1.0.0.2
http_access allow Ja
http_access allow Ty

Jednoduché příklady použití

a) členům skupiny z Active Directory odepřeme přístup

Vrátíme se konečně k naší doméně a zkusíme si jednoduchý příklad. Budeme mít v Active Directory založenou skupinu s názvem AD_GROUP a jejím členům chceme odmítnout přístup. Jak jsem již psal, nadefinujeme si ve squid.conf acl typ memberof, který bude ověřovat členství ve skupinách v doméně. Nezapomeňte správně upravit cestu k organizační jednotce ou=..., která obsahuje vaše skupiny, které budeme používat.

Náš uživatel user musí mít práva ověřovat členství, což já přidávat nemusel, zřejmě je to u 2008 výchozí. Pokud vám to nepůjde, musíte oprávnění přidat a provedete to ve vlastnostech zabezpečení přímo v rootu domény. Uvádím pouze přidané nebo upravené parametry, stále vycházíme z konfigurace z minulého dílu.

bitcoin_skoleni

### /etc/squid3/squid.conf
### definice memberof
external_acl_type memberof %LOGIN /usr/lib/squid3/squid_ldap_group -R -K -b "dc=DOMAIN,dc=INTERNAL" -D user@domain.internal \
-W /etc/squid3/ldappass.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%g,,ou=Cesta_ke_skupine1,ou=Cesta_ke_skupine2,dc=domain,dc=internal))" \
-h eupdc1.domain.internal

### vytvoření acl odkazujícího na Active Directory skupinu s názvem AD_GROUP
acl AD_GROUP_Members external memberof AD_GROUP
acl auth proxy_auth REQUIRED

http_access deny !auth
### a zde zamítneme přístup jejím členům
http_access deny AD_GROUP_Members
http_access allow auth
http_access deny all

Pokud budete měnit členy skupiny a hned testovat, doporučuji vždy restartovat Squid, jinak si počkáte déle, než byste asi chtěli.

b) výjimka z autentizace pro vybraný rozsah IP

### /etc/squid3/squid.conf

### vytvoření acl např. pro naše servery, , tzn. přístup přes proxy bez ověření
acl servers src 192.168.21.10-192.168.21.20/24
acl auth proxy_auth REQUIRED

### povolíme přístup serverům ještě před vyžádáním ověření
http_access allow servers
http_access deny !auth
http_access allow auth
http_access deny all

c) přístup na internet pouze v pracovní době

### /etc/squid3/squid.conf

### Po-Pa 8-17hod
acl pracovni_doba time MTWHF 08:00-17:00
acl auth proxy_auth REQUIRED

### vyzkoušíme si operátor NOT
http_access deny !pracovni_doba
http_access deny !auth
http_access allow auth
http_access deny all

Závěr

Access listy jsou jak vidíte mocným nástrojem s jednoduchým a přehledným zápisem. Se Squidem si teď už trošku rozumíte a nic zásadního vás snad nepřekvapí. I tak je to už trošku nuda, článek bez obrázků, měl jsem tam dát alespoň vyhořelý zdroj, co jsem měnil minulý týden, no, ještě že máme redundanci…

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.