Ogarnij Squid-a – część II – konfiguracja

Po części pierwszej wiemy już wstępnie jaki sprzęt potrzebujemy pod proxy, w którym miejscu sieci ma się znajdować serwer. Jednak sam blaszak nic nam nie da. Musimy zainstalować na nim oprogramowanie i co ważne, odpowiednio skonfigurować. Już na wstępie powiem, że artykuł nie będzie łatwy i będzie trochę długawy, ale mam nadzieje, że będziecie mieli na tyle cierpliwości, aby przeczytać go do końca.

Porada jest wykonywana pod systemem Debian 6.0
Wersja SQUID użyta w tym artykule to 2.7.STABLE9

Instalacja Squid

Instalacja Squida ogranicza się do podania jednego polecenia:

aptitude install squid

Aplikacja ma rozmiar około 8 MB, ale proszę się nie sugerować rozmiarem względem możliwości.

Squid.conf – dla niektórych samobójstwo

Po instalacji wydajemy polecenie

nano /etc/squid/squid.conf

Otworzy się nam głównym plik konfiguracyjny proxy, który wraz z komentarzami zawiera prawie 6000 linii. Już po cyfrach robi się nam nie dobrze, ale spokojnie. My go skrócimy gdzieś do 120 linii.
Większość tekstu to komentarze wyjaśniające działanie odpowiednich opcji. Powiem krótko. Wywalmy to wszystko. Napiszemy swój plik od zera. Wpisujemy polecenie:

rm /etc/squid/squid.conf

które wywali nam obecny plik konfiguracyjny. Teraz tworzymy pusty plik z tą samą nazwą:

touch /etc/squid/squid.conf

Nadajemy mu odpowiednie chmody:

chmod 600 /etc/squid/squid.conf

Drugi krok za nami. Mamy czysty plik konfiguracyjny. Teraz pora no odrobinę teorii.
Przeglądając dokumentację squida można złapać się za głowę, ile tam jest różnym kombinacji, ustawień, zmiennych itd. W tym artykule skupię się na takiej konfiguracji, aby mogła ona płynnie działać. W trzeciej części pokażę różne „ficzere” do proxy.
Dobra dosyć smęcenia. Bierzemy się do roboty. Noo – ale od czego zacząć ?
Od kontrolek ACL. Kontrolki ACL wyznaczają, kto może a kto nie może łączyć się i korzystać ze squida. Rodzai kontrolek ACL jest tyle, ile w wieku 18-lat mieliście włosów na głowie. (no chyba, że ktoś już był wtedy łysy). Póki co zaczynamy od domyślnych definicji kontrolek ACL:

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

Teraz do tych kontrolek musimy dodać swoją sieć. W moim przypadku niech to będzie:

acl our_networks src 192.168.0.0/24 #nasza sieć

Mamy dodaną nasz sieć. Kopiujemy ten fragment do naszego pliku squid.conf.

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl our_networks src 192.168.0.0/24 #nasza sieć

Dobra. ACL-ki mamy już ustawione, teraz musimy zdefiniować, które mają dostęp na świat, a które nie. Więc ustalamy:

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow our_networks
http_access deny all

Pierwsze 4 linijki są domyślne definiowane przez squida. Pozostawimy więc je w spokoju. W piątej linijce znajduje się nasza wcześniej zdefiniowana sieć. która naturalnie ma dostęp do Internetu. Ostatnia linijka jest bardzo ważna. Blokuje ona inne sieci nie zdefiniowane w ACL.
ACL i zdefiniowane obszary dostępu mamy za sobą. Do tej pory cały plik konfiguracyjny ma wyglądać tak:

#acl-ki
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl our_networks src 192.168.0.0/24 #nasza sieć
acl SSL_ports port 443
acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443        # https
acl Safe_ports port 70        # gopher
acl Safe_ports port 210        # wais
acl Safe_ports port 1025-65535    # unregistered ports
acl Safe_ports port 280        # http-mgmt
acl Safe_ports port 488        # gss-http
acl Safe_ports port 591        # filemaker
acl Safe_ports port 777        # multiling http
#ktore acl-ki moga sie laczyc
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow our_networks
http_access deny all

Teraz wypadałoby wybrać port na jakim ma squid pracować.

#port, na którym działa squid
http_port 3128

Domyślnie działa na 3128, więc do celów testowych zostawiamy go. Osobiście jednak polecam wykonanie przekierowania na inny port, najlepiej taki z kosmosu, gdyż bardzo często port 3128 jest skanowany. Żeby się nie okazało, że ktoś podepnie się pod proxy i będzie korzystał z niego za free.

Kolejna rzecz to zdefiniowanie pamięci dla squida.
#pamiec dla squida
cache_mem 1024 MB

My przypiszemy mu 1 GB.

Skoro mamy przypisaną daną wielkość pamięci ram, to wypadałoby, aby zdefiniować również rozmiar obiektów, jakie mają lądować do tej pamięci.

#maksymalny obiekt w pamieci ram
maximum_object_size_in_memory 256 KB

Obiekty większe niż wielkość zdefiniowana tutaj nie będą przechowywane w pamięci RAM. Od razu mówię, że tu będzie dużo kombinowania z tą wartością, gdyż jak damy za dużo, to RAM będzie nam znikał w oczach, jak za mało, to Squid będzie się czuł, jakby był w ciąży.

Kolejna sprawa to rodzaj odświeżania plików. Na początku zajmiemy się pamięcią RAM

#metoda odświeżania cache dla pamięci RAM
memory_replacement_policy heap GDSF

Ta metoda odświeżania zatrzymuje w pamięci niewielkie, ale często używane dane, przez co pamięć jest efektywnie wykorzystywana i nie marnowana.

Dla dysku zaś wybieramy:

#metoda odswiezania cache dla dysku
cache_replacement_policy heap LFUDA

Polega ona na odświeżaniu najrzadziej używanych plików. Dysk może sobie na takie coś pozwolić, bo w końcu pomieści więcej danych i robi jako magazyn.
Teraz wypadałoby wskazać, gdzie squid ma ładować pliki.

#lokalizacja rozmiar ilosc katalogow i podkatalogow dla proxy
cache_dir aufs /var/spool/squid 2048 16 256

Składnia wygląda tak:

cache_dir aufs cache_dir aufs (lokalizacja) (miejsce w MB) (ilość katalogów) (ilość podkatalogów)

Co do lokalizacji to nie polecam dysku, na którym jest zainstalowany system.
Tutaj jeszcze jedna mała uwaga apropo HDD. Jeżeli będziemy mieli dysk PATA, SATA to zaleca się, aby działał on na osobnej taśmie. Nie będzie miał przez to spowolnień.
Rozmiar wybieramy już sami. Należy tylko pamiętać, że im więcej przypiszemy MB tym więcej będzie jadł RAM-u.

Ilość katalogów i podkatalogów.

Polecam ustawienie 16 katalogów I 256 podkatalogów. Jest to optymalne ustawianie. Gdy ustawimy mu za mało, to squid w pewnym momencie zacznie ładować pliki gdzie popadnie, przez co wyszukanie odpowiedniego będzie zajmowało coraz więcej czasu, a gdy za dużo, to od nadmiaru plików squid zacznie wariować. Może doprowadzić nawet do zawieszania się dysku (jak u mnie na początku pracy).

Mamy lokalizację, miejsce itd, teraz wypadałoby określić maksymalny rozmiar cachowanych plików na dysku:

#minimalny rozmiar object dla dysku
minimum_object_size 0 KB

Poniżej tego obszaru pliki nie będą składowane na HDD. Ustawiając na zero, minimalny rozmiar nie istnieje.
Jeżeli jest coś minimum, to musi być i maksimum.

#maksymalny rozmiar obiektu na dysku
maximum_object_size 500 MB

Obiekty większe od tej wielkości nie będą składowane na dysku. Myślicie, że przesadziłem ? Nie. Jak będziemy instalować aktualizacje na jednym komputerze a następnie te same na drugim, to drugi komputer będzie już brał je z cache.

Teraz gdy mamy już rozmiar, pojemności, należy ustawić na jakim poziomie zapełniania ma pracować dyskowy cache

#poziomy, na których ma następować agresywniejsza wymiana cache
cache_swap_low 90
cache_swap_high 97

Gdy zostanie przekroczona wartość cache_swap_low squid zacznie się martwić wymianą plików na dysku. HDD w takiej sytuacji może zwiększyć swoje decybele. Po przekroczeniu cache_swap_high rozpocznie się jazda bez trzymanki. Proxy zacznie agresywnie wymieniać dane z bufora.

Oczywiście wszystkie kroki squida ma ją być śledzone:

#lokalizacja logów
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log

Tutaj definiujemy, gdzie mają znajdować się logi.

Wartość:

#maska klienta
client_netmask 255.255.255.0

Niby ma maskować adres IP klienta, jednak za dobrze to nie działa, ale zostawmy.

#maksymalny rozmiar wysyłanego nagłówka
request_header_max_size 1 MB

Określamy maksymalny rozmiar nagłówka, jaki może wysłać przeglądarka.

#maksymalny rozmiar treści zapytania
request_body_max_size 2 MB

Wartość ważna, jeżeli wysyłamy dużą ilość plików np. do chmury. Swego czasu były „jaja” z tą wartością. Szerzej problem był opisywany tutaj. Pisząc ten artykuł testowo zacząłem manipulować tą wartością, i pliki były wysyłane prawidłowo. Jednak warto mieć tą wartość na uwadze.

#odrzuca niedokończone połączenia
half_closed_clients off

Proxy będzie odrzucać niedokończone połączenia.

Domyślnie squid ma długi czas rozruchu. Możemy go skrócić.

#czas zamkniecia/restartu squida
shutdown_lifetime 10 second

Oczywiście nie należy przesadzać z tą wartością.

#użytkownic uprawiony do korzystania z proxy
cache_effective_user proxy

Użytkownik w systemie, który będzie miał uprawniania uruchomić squida i korzystać z niego. Domyślnie jest to użytkownik o nazwie proxy.

#grupa uprawniona do uzywania cache
cache_effective_group proxy

Grupa w systemie, która ma prawa do korzystania ze squida. Domyślnie jest to grupa proxy.

Jeżeli Squid będzie miał chwile słabości:

#logi bledow
error_directory /var/log/squid/errors/Polish

To w tej lokalizacji będą lądować wszystkie błędy.

Sprawimy, aby squid lepiej współpracował z serwerami DNS
#wsparcie dla dns
dns_defnames on

Więc włączamy tą opcję.

Jeżeli jednak włączymy tą opcję, to jesteśmy zobowiązani podać ich adresy IP

#adresy ip dns
dns_nameservers 194.204.152.34 194.204.159.1

W tym przypadku są to serwery DNS Neostrady.

#coś tam z ip
ipcache_size 10240
ipcache_low 90
ipcache_size 97

Szczerze mówiąc nie wiem jak mam wytłumaczyć tą opcję. Wiem, że przeglądając wiele innych konfiguracji squida ten wpis się pojawia.

W dokumentacji pisze:
The size, low-, and high-water marks for the IP cache.

#buforowanie nazw domen
fqdncache_size 8192

Pozwala buforować nazwy domen

#squid trzyma pamięć dla potencjalnego usera
memory_pools on

Squid może zarezerwować pamięć dla potencjalnego użytkownika. Działa to mniej więcej w ten sposób, że Squid rezerwuje określony rozmiar pamięci RAM dla nowego użytkownika po to, aby nie musiał kasować uzbieranych plików w celu uzyskania miejsca w pamięci RAM dla niego.

#limit zarezerwowanej pamięci
memory_pools_limit 100 MB

Tutaj rezerwujemy ilość miejsca dla powyższej opcji

Trochę tych poleceń było, więc pasowałoby wszystko pozbierać do kupy. Nasz plik squid.conf po zebraniu wszystkiego powinien wyglądać następująco:

#zdefiniowane obaszry sieci, które squid ma brać pod uwagę

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl our_networks src 192.168.0.0/24 #nasza sieć

#zezwalamy na dostęp do sieci odpowiednim obszarom
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow our_networks
http_access deny all
#port, na którym działa squid
http_port 3128
#pamiec dla squid
cache_mem 1024 MB
#maksmylany obiekt w pamieci
maximum_object_size_in_memory 256 KB
#metoda odświeżania cache dla pamięci RAM
memory_replacement_policy heap GDSF
#metoda odswiezania cache dla dysku
cache_replacement_policy heap LFUDA
#lokalizacja rozmiar ilosc katalogow i podkatalogow dla proxy
cache_dir aufs /var/spool/squid 2048 16 256
cache_dir aufs /mnt/sdb1 2000 16 256
#minimalny rozmiar object dla dysku
minimum_object_size 0 KB
#maksymalny rozmiar obiektu na dysku
maximum_object_size 500 MB
#poziomy, na których ma następować agresywniejsza wymiana cache
cache_swap_low 90
cache_swap_high 97
#lokalizacja logów
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#maska klienta
client_netmask 255.255.255.0
#maksymalny rozmiar wysyłanego nagłówka
request_header_max_size 1 MB
#maksymalny rozmiar treści zapytania
request_body_max_size 2 MB
#odrzuca niedokończone połączenia
half_closed_clients off
#czas zamkniecia/restartu squida
shutdown_lifetime 10 second
#użytkownic uprawiony do korzystania z proxy
cache_effective_user proxy
#grupa uprawniona do uzywania cache
cache_effective_group proxy
#logi bledow
error_directory /var/log/squid/errors/Polish
#wsparcie dla dns
dns_defnames on
#adresy ip dns
dns_nameservers 194.204.152.34 194.204.159.1
#coś tam z ip
ipcache_size 10240
ipcache_low 90
ipcache_size 97
#buforowanie nazw domen
fqdncache_size 8192
#squid trzyma pamięć dla potencjalnego usera
memory_pools on
#limit zarezerwowanej pamięci
memory_pools_limit 100 MB

Przeklęte refresh_pattern

Teraz została ostatnia, najgorsza rzecz. Długość trzymania cachowanych plików na dysku. Od tej opcji praktycznie wszystko zależy. Pamiętam, jak pierwszy raz ustawiałem reguły odświeżania, to nawet na następny dzień przeglądarka wyświetlała mi starą stronę. Regułki refresh_patter są praktycznie najważniejsze w całym pliku squid.conf. Jeżeli ustawimy zbyt małe wartości, to nie odczujemy żadnej różnicy. Jeżeli damy za duże, to na następny dzień możemy zobaczyć jeszcze wczorajszą stronę.

Jeżeli będziecie wdrażać Squida gdzieś w środowisku produkcyjnym, to reguły odświeżania mogą wam się śnic po nocach.

Jak wygląda domyślna składnia.

refresh_pattern -i \.(gif|tif|tiff|bmp|jpg|jpeg|png|ico) 1440 50% 10080

czyli

refresh_pattern –i\. (rozszerzenia cachowanych plików) (minimalny wiek obiektu) (procentowy stosunek wieku obiektu do czasu, jaki upłynął od jego ostatniej modyfikacji) (wiek maksymalny w minutach)

Oczywiście regułek refresh_pattern znów jest od groma, jednak ja dla tego artykułu posłużę się tylko tymi do cachowania konkretnych rozszerzeń plików. Możemy również dzięki tym regułkom ustawiać cachowanie osobno dla każdej witryny. Dobra. Omówię co tu nabazgrałem:

(rozszerzenia cachowanych plików) – to nic innego jak rozszerzenia tych plików, które mają być cachowane

(minimalny wiek obiektu) – minimalny wiek obiektu to różnica między chwilą obecną a momentem jego sprowadzenia i zapisania w buforze wyrażony w minutach

(wiek maksymalny w minutach) – to czas wyrażony minutach ile dany obiekt ma być przechowywany

Te wyjaśnienia nie są łatwe do przyswojenia, jednak przy refresh_patternach łamana jest każda teoria. Tu trzeba tak kombinować, aby w końcu działało.

My dla swoich potrzeb zdefiniujmy takie reguły odświeżania:

refresh_pattern -i \.(gif|tif|tiff|bmp|jpg|jpeg|png|ico) 1440 50% 10080
#odswiezanie dla obrazkow
refresh_pattern -i \.(wav|mp3|mp2|wmp|mid) 10080 50%  20160
#odswiezanie dokumentow
refresh_pattern -i \.(txt|pdf|doc|xls|docx|odf|ppt|pptx) 4320 50%  10080
#odswiezanie statycznych elementow stron
refresh_pattern -i \.(css|html|htm) 2880 50% 43200
#odswiezanie filmow
refresh_pattern -i \.(flv|swf|mp4|wmv|) 10080 70% 43200

Tutaj jest jedna ważna zależność. Pliki, które mogą się często zmieniać powinny być krócej przechowywane w cache, obrazki należy traktować z umiarem, a filmy, muzyka, to można trochę po szarżować.

Tutaj załamię tych, którzy chcą cachować filmiki z youtube. Niestety, standardowo squid nie potrafi cachować filmików z youtube. Testując kilkanaście konfiguracji, czytając dużo wypowiedzi na necie doszedłem do takiego wniosku – Google, a dokładniej Youtube wysyła dziwne nagłówki, z którymi squid nie wie co zrobić i po prostu je odrzuca. Pozostaje jeszcze nadzieja w Video Cache, ale to artykuł na późniejszą metę. (jeżeli coś z tego wyjdzie oczywiście).
Ok. Mamy już cały plik konfiguracyjny. Ma on wyglądać tak:

#zdefiniowane obaszry sieci, które squid ma brać pod uwagę

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl our_networks src 192.168.0.0/24 #nasza sieć

#zezwalamy na dostęp do sieci odpowiednim obszarom
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow our_networks
http_access deny all
#port, na którym działa squid
http_port 3128
#pamiec dla squid
cache_mem 1024 MB
#maksmylany obiekt w pamieci
maximum_object_size_in_memory 256 KB
#metoda odświeżania cache dla pamięci RAM
memory_replacement_policy heap GDSF
#metoda odswiezania cache dla dysku
cache_replacement_policy heap LFUDA
#lokalizacja rozmiar ilosc katalogow i podkatalogow dla proxy
cache_dir aufs /mnt/sdb1 2000 16 256
#minimalny rozmiar object dla dysku
minimum_object_size 0 KB
#maksymalny rozmiar obiektu na dysku
maximum_object_size 500 MB
#poziomy, na których ma następować agresywniejsza wymiana cache
cache_swap_low 90
cache_swap_high 97
#lokalizacja logów
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
#maska klienta
client_netmask 255.255.255.0
#maksymalny rozmiar wysyłanego nagłówka
request_header_max_size 1 MB
#maksymalny rozmiar treści zapytania
request_body_max_size 2 MB
#odrzuca niedokończone połączenia
half_closed_clients off
#czas zamkniecia/restartu squida
shutdown_lifetime 10 second
#użytkownic uprawiony do korzystania z proxy
cache_effective_user proxy
#grupa uprawniona do uzywania cache
cache_effective_group proxy
#logi bledow
error_directory /var/log/squid/errors/Polish
#wsparcie dla dns
dns_defnames on
#adresy ip dns
dns_nameservers 194.204.152.34 194.204.159.1
#coś tam z ip
ipcache_size 10240
ipcache_low 90
ipcache_size 97
#buforowanie nazw domen
fqdncache_size 8192
#squid trzyma pamięć dla potencjalnego usera
memory_pools on
#limit zarezerwowanej pamięci
memory_pools_limit 100 MB

#odswiezanie plikow

#odswiezanie dla obrazkow
refresh_pattern -i \.(gif|tif|tiff|bmp|jpg|jpeg|png|ico) 1440 50% 10080
#odswiezanie dla obrazkow
refresh_pattern -i \.(wav|mp3|mp2|wmp|mid) 10080 50%  20160
#odswiezanie dokumentow
refresh_pattern -i \.(txt|pdf|doc|xls|docx|odf|ppt|pptx) 4320 50%  10080
#odswiezanie statycznych elementow stron
refresh_pattern -i \.(css|html|htm) 2880 50% 43200
#odswiezanie filmow
refresh_pattern -i \.(flv|swf|mp4|wmv|) 10080 70% 43200

Teraz po tej nudnej teorii rozpoczynamy praktykę.

Przygotowania dysku

Mamy spisany plik squid.conf. Niech on będzie w spokoju. W poleceniu cache_dir aufs /mnt/sdb1 2000 16 256 określiliśmy, że ma być osobny dysk dla proxy. Zakładam więc, że dysk jest już zamontowany i sformatowany. Teraz pokaże Wam jak skonfigurować dysk, przekierować ruch na odpowiedni port i lookniemy, jak wyglądają pliki z logami.

Na początku wypada skonfigurować dysk, czyli utworzyć strukturę katalogów. Jest on zamontowany w katalogu /mnt/sdb1/. Musimy jednak zmienić właściciela oraz grupę tego katalogu, bo inaczej squid nie wystartuje. Wpisujemy zatem polecenie:

chown proxy:proxy /mnt/sdb1

Gotowe. Teraz musimy utworzyć katalog, gdzie będą lądowały logi z błędami. Wpisujemy polecenia jedno po drugim:

cd /var/log/squid
mkdir errors
cd /var/log/squid/errors
mkdir Polish

Katalog gotowy.Teraz musimy utworzyć strukturę katalogów, czyli 16 katalogów I 256 podkatalogów. Na wszelki wypadek wykonajmy polecenie:

/etc/init.d/squid stop

Będziemy mieli wtedy pewność, że squid nie pracuje. Wprawdzie gdyby pracował, to nie pozwoliłby nam przebudować buforów. Kolejne polecenie do wpisania to:

squid –f /etc/squid/squid.conf –z

Flaga –f wskazuje plik konfiguracyjny, zaś –z rozkaże przebudować bufory dyskowe. Po wykonaniu polecenie powinien pojawić się napis:

2011/07/03 11:42:05| Creating Swap Directories

Oznacza to, że budowa cache została zakończona pomyślnie. Przechodzimy do naszego dysku. Wpisujemy polecenie:

cd /mnt/sdb1

po Enterze

ls

i Enter.
Pojawią się nam katalogi


Kliknij, aby powiększyć

Powinno być ich 16. Teraz sprawdź jak wygląda struktura podkatalogów.

cd /mnt/sdb1/00

(zera)

Enter

ls

Enter


Kliknij, aby powiększyć

Wszystko się zgadza. Cache dysku poprawnie utworzone.

Kierujemy ruchem

Squid gotowy, teraz musimy jeszcze wykonać prerouting w iptables, czyli przekierować ruch z portu 80 na port 3128.

W IPtables wpisujemy polecenie:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

gdzie za eth0 wpisujemy swój własny interfejs sieciowy. Zapisujemy zmiany.

Gotowe

Squid jest gotowy do pracy, więc uruchamiamy go poleceniem:

/etc/init.d/squid start

Jeżeli konsola nic nie wywali, to znaczy, że wszystko poszło idealnie. Teraz wypadało by przynajmniej wizualnie zobaczyć jak wyglądają logi. Pierwszy plik to Access.log


Kliknij, aby powiększyć

Plik zawiera informacje takie jak odwiedzone witryny, cachowane z nich elementy, ich adres IP, czas w którym to dokonano itd.

Drugi plik to Cache.log


Kliknij, aby powiększyć

On zaś zawiera wszystkie informacje, które generuje squid podczas pracy. Ile w danym momencie zajmował miejsca w pamięci RAM, ile zajmowały miejsca takie obiekty itd.

Trzeci to store.log


Kliknij, aby powiększyć

Tutaj zbierane są informacje na temat plików, które znajdują się w cache i te, które zostały z niego usunięte.

Jeżeli wejdziemy w pierwsze podkatalogi squid, to zobaczymy taki obrazek


Kliknij, aby powiększyć

Są to cachowane pliki znajdujące się już na dysku.

Artykuł nie krótki, zawierający na raz bardzo dużo informacji może przyprawić nie jednego o zawroty głowy. Jednak jak już się w to wgłębimy, to kolejne serwery proxy będziemy konfigurować w maksimum godzinę.

W kolejnej, trzeciej części pokaże różne dodatkowe opcje squid takie jak np anonimowość, blokowanie dostępu do stron itd. Więcej nie zdradzę i przy okazji obiecuję, że trzecia część powstanie dużo szybciej niż druga.