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.
### /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…