Archiwa tagu: squid

Squid

W niewielkiej nawet sieci przydatną aplikacją jest serwer proxy. Jednym z najlepszych jest Squid. Jest to zaawansowany serwer proxy, pozwalający nie tylko na znaczne przyśpieszenie oglądanych stron www, ale także na filtrowanie treści, co jest nie bez znaczenia w sieciach szkolnych lub firmowych.
Po instalacji (pacman -S squid) należy wykonać kilka czynności konfiguracyjnych:
– w /etc/squid/squid.conf wpisujemy:
Najpierw visible_hostname nasza-nazwa-routera (domyślnie nie ma nic więc trzeba odnaleźć ten string w pliku i wpisać poniżej lini z napisem #Default).
znaleźć linię z http_port 3128 i jeśli trzeba wpisac obok transparent, jeśli squid będzie transparentny. W takim wypadku trzeba jeszcze zastosować regułę iptables.
[przykład] iptables -t nat -A PREROUTING -s 192.168.10.0/24 -d ! 192.168.10.0/24 -p tcp –dport 80 -j REDIRECT –to-port 3128
Następnie odnaleźć linię z IP 192.168.
W razie potrzeby odhaszować linię zaczynającą się od acl our_network i zmienić zakres IP na swój własny, a następnie odhaszować linię poniżej zezwalająca na dostęp.
Ponadto od wersji 2.6 się sporo zmieniało, jest obecnie kilka różnych wersji w repozytoriach. Wersja 2.6STABLE5 pracuje na użytkowniku nobody. Kolejne wersje już na użytkowniku proxy. Są też różnice w położeniu plików, dlatego należy przejrzeć plik konfiguracyjny szujkając wpisów /var/log i /var/cache, i poprawić ewentualnie wpisy tak, żeby cache był w /var/cache/squid a logi w /var/log/squid. Jeśli wcze sniej była zainstalowana inna wersja squida i robimy aktualizację, to należy usunąć dotychczasowy katalog z cache. bo jeśli się zmieni użytkownik, to squid pokaże nam błędy.
Oczywiście cache możemy sobie umieścić w dowolnym miejscu, ale trzeba to wpisac do konfiguracji.
Powyższe elementy konfiguracji dają nam najprostszy i najuboższy sposób działania squida.
Jeśli ktoś potrzebuje bardziej zaawansowanej konfiguracji, należy poczytać sobie o niej na:
www.squid-cache.org
Uwagi dodatkowe:
Po reinstalacji squida nie zaleca się stosowania starego pliku konfiguracyjnego. Przy ewentualnych późniejszych zmianach lub dodawaniu funkcjonalności mogą się pojawić problemy. Lepiej jest plik konfiguracyjny nowy uzupełnić własnymi wpisami.
Ponadto przy przejściu z wersji 2.5 do wersji2.6 należy ręcznie sprawdzić wpis w rc.conf. Stary squid przy deinstalacji dopisuje tam !squid, zaś nowy nie likwiduje wykrzyknika.

Jak ograniczać dostęp do stron pornograficznych?

W chwili, gdy powstaje ten opis, polska dokumentacja Freesco w .pdf nie zawiera jeszcze opisu instalacji i pełnej konfiguracji Squida. Może ją kiedyś opiszę, ale, szczerze mówiąc, nie bardzo widzę powód, ponieważ mnie samemu Squid zainstalował się z paczki gładziutko i bez żadnych problemów, z ustawieniami domyślnymi – a nigdy wcześniej z nim nie pracowałem. Zakładam więc, że masz już działającego Squida.

Metodę tu przedstawioną opracowałem sam – nie jest najlepsza, ale wykorzystuje wyłącznie Squida, tj. nie są do niej potrzebne pakiety typu JunkBuster albo SquidGuard (tego ostatniego zresztą chyba nie ma w wersji pod Freesco).

Wszystkie umieszczone w niniejszym opisie definicje siłą rzeczy są nieścisłe, podobnie jak i sama definicja pornografii, i musimy się z tym pogodzić.

Założenia przyjąłem takie:

1. Będziemy blokować domeny o jawnie ‘seksualnych’ nazwach, np. www.xxx.foo

2. Będziemy blokować ścieżki URL zawierające jawnie ‘seksualne’ słowa, w ten sposób uniemożliwiając m. in. WYSZUKIWANIE takich słów – bo, jak wiadomo, strona z wynikami zawiera w swoim adresie wyszukiwane słowo.

3. Postaramy się, w miarę możliwości, nie blokować wyszukiwania słów ‘dwuznacznych’, tj. takich, których może szukać ktoś zupełnie niewinny, w zupełnie uczciwym celu.

Aby dojść do kompromisowej skuteczności okazało się konieczne rozbicie słów na dwie listy: ‘jednoznaczną’ i ‘dwuznaczną’.

Lista jednoznaczna zawiera słowa, których obecność sprawdzana będzie w całym adresie, tj. w nazwie domeny ORAZ w ścieżce do podstrony (tj. PO znaku / ).

Lista dwuznaczna zawierać będzie słowa, których obecność będzie sprawdzana wyłącznie w nazwie domeny, natomiast po znaku / już nie.

Dlaczego? Może przykład.

Lista jednoznaczna zawiera np. słowo ‘sex’. W wyniku blokowania nie można otworzyć stron:

http://www.sex.com

http://www.domena.pl/obrazki/sex

http://www.szukacz.com/wynikwyszukiwaniasłowa=sex

Gdyby lista jednoznaczna zawierała słowo ‘piersi’, wynik byłby analogiczny. Ale to oznaczałoby, że nie można by było uzyskać wyników zupełnie niewinnego wyszukiwania wyrażenia ‘rak piersi’ – a przecież nie o to nam chodzi.

Dlatego dla słów dwuznacznych tworzymy drugą listę, która będzie sprawdzana tylko w domenie.
Porównajmy:

http://www.piersi.com – chwilowo nie ma takiej, ale gdyby była, uznałbym ją za podejrzaną z powodu samej nazwy. Dlatego nasz filtr domenowy powinien ją zablokować, i pewnie słusznie. Natomiast strona http://www.akademia-medyczna.com/piersi – zostanie uznana za niewinną, a więc filtr jej nie zablokuje. Skuteczność tego podejścia widać np. w Onecie po wyłączeniu filtra rodzinnego. Wpisanie słowa “czekoladki” otworzy listę całej masy stron typu www.cukrownie.pl – które dadzą się otworzyć. Ale znaleźć tam można też pornograficzne – i one prowadzą zwykle do domen z seksem w nazwie, a więc zostaną zablokowane filtrem przeszukującym tylko domenę.

Innymi słowy, uważam, że niewinne strony będą na niewinnych domenach, nawet, jeśli w nazwie ścieżki wystąpią ‘seksualne’ wyrazy. Natomiast strony pornograficzne będą na dobrze znanych domenach, których nazwy nie wzbudzają wątpliwości, nawet, jeśli nazwa ścieżki jest niewinna (np. galeria). Filtrowanie będzie tym skuteczniejsze, im więcej wyrazów będziemy w stanie zgromadzić na obu listach. Ja mam ich w tej chwili około 300 (thank you, Batman!).

Jak wspomniałem wyżej – to tylko założenia. Filtracja nigdy nie będzie 100% skuteczna i nigdy w 100% bez efektów ubocznych. Ale opisany wyżej układ pracuje na moim serwerze i sprawdza się dość dobrze.

Teraz realizacja.

1. W katalogu /mnt/router/packages/squid/etc tworzymy pliki zakazane_domeny i zakazane_urlsy.
Umieszczamy w nich po jednym słowie w wierszu. Pierwsza linia może zawierać komentarz po znaku #.
Zakazane_domeny zawiera słowa dwuznaczne (czekoladki, foki, lalki, pedaly …), a zakazane_urlsy – jednoznaczne (tych jest dużo więcej; oto parę lżejszych: babe, bzykan, sluts, hustler, xxx, zwilzon …). UWAGA: Stwierdziłem, że filtr może nie działać prawidłowo, jeśli w tych plikach znajdują się puste wiersze – należy je usunąć; również linię ostatnią. No i oczywiście słowa, które widać w przykładzie są celowo pozbawione odmiennych końcówek, żeby filtr je „łapał”.

2. W pliku /mnt/router/packages/squid/etc/squid.conf udajemy się najpierw do sekcji acl i dodajemy od siebie pod linią acl CONNECT method CONNECT:

#obyczajówka

acl zakazane_urlsy url_regex -i „zakazane_urlsy”

acl zakazane_domeny dstdom_regex -i „zakazane_domeny”

(Nazwy w cudzysłowiu odwołują się do plików stworzonych w punkcie 1 – najlepiej jest podać pełną ścieżkę, u mnie jest to /mnt/router/packages/squid/etc/. Opcja –i sprawia, że filtr będzie ignorował wielkość liter w URL.)

3. W tym samym pliku udajemy się do sekcji INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS i dodajemy pod nią (a przed http_access allow localnet):

http_access deny zakazane_urlsy

http_access deny zakazane_domeny

Prawdopodobnie będziemy też musieli dodać plik z wyjątkami dozwolone_urlsy (np. na słowo “dowcipy” :).
Stworzymy do niego acl w sposób identyczny, jak podałem powyżej, a regułkę http_access allow wstawimy powyżej regułki deny (reguły analizowane są po kolei).

Następnie zapisujemy plik i wykonujemy restart squida poleceniem ‘rc_squid restart’.

Ponieważ nie wszyscy znają angielski, warto przetłumaczyć stronę z komunikatem o braku dostępu, którą wyświetli squid – konkretnie jest to plik

mnt/router/packages/squid/etc/err_access_denied

Zwłaszcza istotny jest jego fragment “Please contact your service provider if you feel this is incorrect” (Jeśli uważasz, że nastąpiła jakaś pomyłka, skontaktuj się z administratorem – ze mną jak na razie jeszcze nikt się nie skontaktował :). Do tego pliku warto wtedy dodać również na początku tag polskiego kodowania liter, tj.
META http-equiv=”content-type” content=”text/html; charset=ISO-8859-2″

Oczywiście warto też podać Squidowi prawidłowy adres e-mailowy administratora (ustawia się go w linii cache_mgr w pliku squid.conf).

===

Osobną sprawą jest wymuszenie na użytkownikach korzystania ze squida. W tym celu musimy go skonfigurować jako transparentny proxy. Składają się na to dwa elementy: regułka ipfwadm oraz zmiana w squid.conf.

Najpierw element pierwszy:

ipfwadm -I -i accept -P tcp -S 10.0.0.0/24 -D 0.0.0.0/0 80 -r 3128
Jest to reguła, która przekierowuje wszystkie pakiety pochodzące z sieci 10.0.0.0 i zmierzające gdziekolwiek na port 80 na własny interfejs Freesco, na port 3128, gdzie nasłuchuje Squid (przy domyślnej instalacji). Jeśli reguła wpisana jest prawidłowo, możemy ją przetestować: wpisanie dowolnego adresu w przeglądarce będzie zwracać błąd Squida „Invalid URL”, zawierający wszystkie znaki z adresu po nazwie domeny (czyli np. / albo /strona.htm). Na tym etapie konfiguracji jest to jak najbardziej prawidłowy objaw.

Teraz element drugi układanki: udajemy się do squid.conf i modyfikujemy podaną niżej sekcję do takiego kształtu:

#transparentny squid
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
hddpd_accel_uses_host_header on

Po czym restartujemy squida i gotowe.

Dla sadystycznych administratorów

Podaję też konfigurację blokowania ściągania binariów (oczywiście, jeśli transfer http odbywa się za pośrednictwem Squida, np. transparentnego).
Postępujemy analogicznie jak wyżej: tworzymy plik zakazane_binarki i wpisujemy w nim (jeden wpis na linię) np. .zip, .avi. A w squid.conf wstawiamy:

acl zakazane_binarki urlpath_regex
„zakazane_binarki”

i poniżej:

http_access deny zakazane_binarki

Należy uważać z blokowaniem .exe, ponieważ sporo wyników kwerend (np. serwis rozkładu jazdy PKP) zawiera w adresie np. ‘query.exe’, więc natychmiast zostaniemy zbombardowani protestami. Można obejść to tworząc np. dozwolone_binarki (z wpisem query.exe) i wstawiając

http_access allow dozwolone_binarki

nad linią http_access deny zakazane_binarki.

Autor: Andrzej Januszkiewicz Data: 2002-11-18 00:00:00