V předchozí části jsme probírali acl třídy. V této části budeme pokračovat s acl operátory.
13.7.2004 08:00 | Petr Houštěk | přečteno 21300×
Z acl operátorů již známe http_access
. Jsou zde ale i jiné operátory.
Jejich syntax je
http_access allow|deny [!]aclname1 [[!]aclname2 ... ]
(Syntax je stejný pro všechny acl operátory, nejenom pro http_access
).
V jednom z příkladů v minulé části jsme blokovali všechny přístupy z jiných IP
mimo myNet. Stejného efektu dosáhneme při použití více acl tříd v jednom
operátoru.
acl myNet src 192.168.0.0/255.255.0.0 acl all src 0.0.0.0/0.0.0.0 http_access deny all !myNet # http_access deny all
Pokud je IP ze sítě definované v myNet, výsledek pak je 1 AND (NOT 1) =
1 AND 0 = 0
, přístup tedy bude povolen. Pokud požadavek přichází z okolí (IP
není definována v myNet), výsledek zpracování bude 1 AND (NOT 0) = 1 AND 1 =
1
, dojde k odmítnutí přístupu.
Ostatní acl operátory jsou icp_access
, no_cache
,
ident_lookup_access
, miss_access
, always_direct
(never_direct
), snmp_access
, delay_access
,
broken_posts
.
Tento operátor zabraňuje ukládání označených stránek do cache. V implicitním konfiguračním souboru jsou příkazy, které v požadavku vyhledávají řetězec cgi-bin a všechny tyto požadavky neukládají do cache (v původním konfiguračním souboru jsou zakomentovány, takže je musíte odkomentovat).
acl QUERY urlpath_regex cgi-bin \\? no_cache deny QUERY
Některé servery přesně nevyhovují HTTP specifikaci. Ke komunikaci s
takovými servery (které můžeme snadno identifikovat pomocí acl třídy
url_regex
) by se měl použít acl operátor
broken_posts
.
acl broken_server url_regex http://broken-server-list.com broken_posts allow broken_server
Delay classes se používají ke kontrole a omezení množství přenesených dat.
Toho je dosáhnuto použitím tzv. delay_pools
. Přenosy jsou roztříděny do
segmentů a spojeny s určitým množstvím dat. Používají se 3 třídy delay
classes.
První třída
Nejprve si ukážeme příklad.
acl throttled_site url_regex -i microsoft.com delay_pools 1 delay_class 1 1pak delay_parameters 1 16000/16000 delay_access 1 allow throttled_site
Označíme požadavky, u kterých chceme omezovat rychlost stahování.
Lze je označit podle jejich zdrojové IP, cílové domény, regulárního výrazu,
... Pak operátor delay_pools
stanoví množství delay pools. V našem
případě používáme pouze jeden. Pak vytvoříme delay pool číslo 1 první třídy
(třetí řádka v našem příkladu). První třída je nejjednodušší - rychlost
stahování všech spojení je spojena a limitována jako celek. Jediné
parametry pak jsou celková rychlost (v bytech za sekundu) a množství dat,
které ještě bude stahováno plnou rychlostí (po dosažení tohoto množství dat se
zapne omezení rychlosti).
Druhá třída
Pokud chcete uplatnit rychlostní omezení pouze pro malé množství uživatelů, první třída je dostačující. Pro větší množství uživatelů by ale bylo příliš těžkopádné vytvářet speciální pool pro každého uživatele. Při použití druhé třídy můžete přímo nastavit rychlost stahování pro jednu IP adresu a celkovou rychlost stahování. Například máme linku s propustností 1024 kbit/s a 20 uživatelů. Jednak chcete, aby uživatelé linku nezahltili, dále chcete rezervovat určitou šířku pásmNapríklad chcete,a pro SMTP a ostatní služby. Budeme tedy omezovat rychlost stahování na 1000 kbit/s a pro každého uživatele na 200 kbit/s.
acl all src 0.0.0.0/0.0.0.0 delay_pools 1 delay_class 1 2 delay_parameters 1 125000/125000 25000/25000 delay_access 1 allow all
Třetí třída
Tato třída se používá k limitaci celých sítí třídy C. Například máte linku s propustností 2048 kbit/s, chcete vyhradit 48 kbit/s na SMTP a ostatní služby. Dále máte 3 IP rozsahy, každý se 100 počítači. Přiřadíme pak 667 kbit/s každému rozsahu a 20 kbit/s každému počítači. Konfigurace pak vypadá takto.
acl all src 0.0.0.0/0.0.0.0 delay_pools 1 delay_class 1 3 delay_parameters 1 250000/250000 84000/84000 2500/2500 delay_access 1 allow all
Pokud nastavíte jako rychlost hodnotu -1, žádný limit není stanoven. Například pokud je člověk sám v internetové kavárně a limit pro uživatele je nastaven na hodnotu -1, je omezen pouze limitem pro síť.
Používáním delay pools a patřičných acl můžete limitovat uživatele během pracovní doby a v noci nechat plnou rychlost linky, tímto omezit brouzdání po internetu během práce místo používání stránek společnosti, ...
Nakonec zde uvádím některé příklady použití acl a běžné problémy.
Acl příkazy nelze kombinovat s logickými operátory AND
a
OR
. Tyto logické operace jsou již zabudované v schématu
vyhodnocování acl. Základní pravidla jsou.
Všechny elementy acl třídy jsou spojeny logickým operátorem OR
Všechny elementy acl operátoru jsou spojeny logickým operátorem AND
Například konfigurace acl jako je tato nemůže fungovat podle předpokladů.
acl ME src 192.168.1.1 acl YOU src 192.168.1.2 http_access allow ME YOU
V tomto příkladu operátor http_access
povolí přístup pouze pokud se acl ME a acl
YOU shodují, což rozhodně není požadované chování. Fungující konfigurace
může vypadat jako tato:
acl ME src 192.168.1.1 acl YOU src 192.168.1.2 http_access allow ME http_access allow YOU
Nebo jednoduššeji
acl US 192.168.1.1 192.168.1.2 http_access allow US
Pokud se vám nedaří najít chybu v konfiguraci acl, můžete zapnout debugging
pomocí příkazu debug_options
. Pro zahájení debuggování přidejte následující
rádek do squid.conf.
debug_options ALL,1 33,2
Tento příkaz zapne debugging pro sekci 33 (acl) na úroveň 2. Ve vašem cache.log se pak pro každý požadavek připisují podrobnější údaje, jakými acl požadavek prošel, jestli byl povolen atd.
V určitých případech potřebujete upravit chybová hlášení. Také můžete vytvářet úplně nová chybová hlášení.
Chybová hlášení jsou v standardní instalaci uložena v adresáři
/usr/local/squid/etc/errors
, ale v distribučních verzích mohou být jinde. V
Debianu jsou v adresáři /usr/lib/squid/errors/language. Umístění tohoto adresáře
se nastavuje ve squid.conf pomocí volby error_directory
.
Například chcete dát vědět, proč je přístup na stránky s pornografickým
obsahem zakázán. Do adresáře, kde jsou uložena chybová hlášení vytvořte soubor
ERR_PORNO
, který obsahuje něco jako:
<p> Přístup k URL %U byl odepřen, kvůli jeho pornografickému obsahu. Pokud si myslíte, že k tomuto zařazení došlo omylem, kontaktujte správce. </p>
Do squid.conf pak přidejte tuto řádku.
acl porn url_regex "/usr/local/squid/etc/porno.txt" deny_info ERR_PORNO porn http_access deny porn
Nyní, když uživatel zažádá o URL, které vyhovuje regulárním výrazům uvedeným v
/usr/local/squid/etc/porno.txt
, objeví se mu příslušné chybové hlášení.
Tag %U
je v hlášení nahrazen požadovaným URL. Další tagy a jejich využití lze
najít
zde.