Instalacja
Najłatwiej zainstalować Squida z pakietu. W Debianie wydajemy polecenie
apt-get isntall squid
W systemach wykorzystujących rpm-y robimy to wydając polecenie:
rpm -ihv squid-wersja.rpm
Jeżeli uruchamiamy squida pierwszy raz albo korzystamy z nowego katalogu należy stworzyć strukturę katalogu swap dla squida. W przypadku dystrybucji Mandrake musimy jednak mieć już w tym momencie poprawnie ustawioną nazwę serwera (definiowaną zmienną visible_hostname), dzięki której w przypadku błędów, program będzie wiedział jak zgłosić błąd. Katalog swap tworzymy przy pomocy polecenia:
squid -z
Uruchomienie, restart i zatrzymanie serwera
Serwer proxy uruchamiamy (w trybie konsoli) w dystrybucjach wykorzystujących schemat V System (czyli np. Red Hat, Debian, Mandrake ale nie Slackware) przy pomocy polecenia:
/etc/init.d/squid start
Serwer restartujemy poleceniem:
/etc/init.d/squid restart
Zatrzymania serwera dokonamy przy pomocy polecenia:
/etc/init.d/squid stop
Najprostszy plik konfiguracyjny
Najprostszy plik konfiguracyjny powinien informować serwer proxy o kilku parametrach: port na którym pracuje program (komenda http_port numer_portu), kto ma dostęp do serwera proxy – aby ktoś z zewnątrz nie obciążał nam serwera (tworzymy najpierw acl-a acl nazwa określenie), ilość pamięci, którą przyzwalamy aby zajął serwer, nadrzędny serwer proxy (cache_peer nazwa serwera cache)
Plik ten ma postać:
############# #### Bardzo prosty plik konfiguracyjny squida ############# ### informacje o administratorze serwera proxy cache_mgr ziutus@gateway.localnet cachemgr_passwd ziutus22 ### porty, na których pracuje squid # port, na którym oczekuje połączeń klienckich http_port 3128 # port na którym wymienia informację z innymi serwerami proxy (0 wyłącza) icp_port 0 #### użytkownik i grupa serwera proxy cache_effective_user proxy cache_effective_group proxy #### redirect_rewrites_host_header off cache_replacement_policy GDSF #### wielkość zasobów udostępnianych przez system # cache_mem 16 MB cache_dir ufs /cache/ 200 16 256 maximum_object_size 12000 KB #### ACLe # nie buforować wyników nadchodzących z skryptów CGI acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY # acl localnet src 10.0.0.0/255.255.255.0 acl Safe_ports port 80 433 210 119 70 21 1025-65535 acl CONNECT method CONNECT acl all src 0.0.0.0/0.0.0.0 http_access allow localnet http_access deny !Safe_ports http_access deny CONNECT http_access deny all ##### logi cache_access_log /var/log/squid/access.log log_icp_queries off buffered_logs on
Podstawowe parametry
- icp_port – port, na którym komunikują się serwery proxy między sobą (domyślnie 3130, 0 wyłącza taką komunikację)
- redirect_rewrites_host_header – czy nadpisywać nagłówki z komputera klienckiego
- cache_replacement_policy – polityka zastępowania obiektów w cachu, gdy potrzebne jest miejsce (dostępne to: lru, GDSF, LFUDA, LRU, domyśla to lru)
Zasoby systemowe przeznaczone dla Squida
cache_mem
Wielkość pamięci operacyjnej przeznaczonej dla Squida,
cache_dir
Dyrektywa ta określa katalog (lub katalogi) w którym squid trzyma obiekty buforowane. Jego składania jest następująca
cache_dir system_plików katalog wielkosc_w_MB L1 L2
gdzie L1 i L2 to ilość katalogów na pierwszym i drugim poziomie. System plików to praktycznie zawsze UFS,czyli standartowy system plików Squida. Wielkość katalogu w MB ma na celu określić maksymalną jego wielkość, dzięki czemu Squid nie rozprzestrzeni się na cały dysk. Może być kilka takich katalogów na dysku.
Przykład:
cache_dir ufs /cache/ 200 16 256
maximum_object_size
Obiekt powyżej tej wielkości nie będzie buforowany na dysku
Komunikacja między serwerami proxy
icp_port
Port na którym wymienia informację z innymi serwerami proxy (0 wyłącza) protokołem ICP (sprawdza się czy na danym serwerze znajduje się szukany obiekt). Domyślnie jest to port 3130.
log_icp_queries
Dyrektywa decyduje czy logować do pliku dostępu access.log komunikację między serwerami proxy. Jeżeli z niej korzystamy należy ją włączyć (wyjątkowo można wyłączyć gdy jest on bardzo duży), w przypadku rezygnacji z współpracy z innymi serwerami proxy można zrezygnować z tej czynności.
Domyślnie jest włączona.
Łączenie serwerów proxy – metoda równorzędna (silbing)
W tym przypadku ważne jest aby wszystkie serwery proxy były pod kontrolą tego samego administratora.
Korzystanie z serwerów nadrzędnych
W przypadku korzystania z serwerów nadrzędnych (typ połączenia parent) wszystkie dane są ściągane z nadrzędnego serwera proxy. Można zdefiniować kilka serwerów nadrzędnych, będą one wtedy wykorzystywane naprzemiennie. Jeśli połączenie prowadzi do publicznego serwera w3cache, należy ustawić port ICP jako 7 oraz dodać opcję no-query i no-digest. Gdy korzystamy z kilku serwerów nadrzędnych należy dodać opcję round-robin (naprzemienne korzystanie z serwerów). Składnia definiująca korzystanie z nadrzędnych serwerów proxy to:
#cache_peer adres typ port_http port_icp [opcje...] np. cache_peer w3cache.tpnet.pl parent 8080 8082 no-query default # nadrzedne proxy
Przykład konfiguracji
cache_peer w3cache.retsat1.com.pl parent 8080 8082 no-query default # nadrzedne proxy
W takim przypadku gdy skorzystamy z serwera nadrzędnego w lokach pojawi się informacja (proszę zwrócić uwagę na zapis DEFAULT_PARENT/w3cache.retsat1.com.pl) :
1093320912.931 174 127.0.0.1 TCP_MISS/200 529 GET http://www.linuxnews.pl/i/dot.gif - DEFAULT_PARENT/w3cache.retsat1.com.pl image/gif
Logi
cache_access_log dziennik dostępu do serwera proxy
cache_log dziennik proxy
cache_store_log
cache_swap_log
emulate_httpd_log
Pozwolenia i blokady
Przy korzystaniu z poniższych reguł należy pamiętać o kolejności zasad. Squid sprawdza do pierwszej pasującej reguły i następne pomija.
Ograniczenia domen docelowych (blokada niechcianych stron)
Przy pomocy dyrektyw acl i http_access możemy sterować dostępem do określonych witryn po ich adresach domenowych.
Przykład:
acl badwww dstdomain kukluxklan.net acl badwww dstdomain www.kukluxklan.net http_access deny badwww
Blokada ściągania określonych plików
Stwórzmy plik /etc/squid/files.acl a w nim umieśćmy rozszerzenia plików, których nie chcemy aby użytkowicy pobierali. Przykładowy plik jest poniżej. Taka budowa pliku wynika z konieczności rozróżniania wielkości liter w pliku ;).
\.[Ee][Xx][Ee]$ \.[Zz][Ii][pP]$ \.[Mm][Pp]3$ \.[Rr][Aa][Rr]$ \.[Aa][Vv][Ii]$ \.[Mm][Oo][Vv]$ \.[Mm][Pp][Gg]$ \.[Mm][Pp][Ee][Gg]$ \.[Aa][Rr][Jj]$ \.[Tt][Aa][Rr]$ \.[Gg][Zz]$ \.[Bb][Zz]$
Następnie dodajmy odpowiednie reguły do pliku konfiguracyjnego.
acl archives urlpath_regex "/etc/squid/files.acl" http_access deny archives
Określenie godzin w których można przeglądać strony w Internecie
Określmy godziny w których można (w przykładzie jest zrobione na odwrót, są zdefiniowane godziny w których nie można oglądać) stron w Internecie.
### kiedy mozna korzystac z internetu acl restricted_weekdays time MTWHF 21:00-23:59 acl restricted_weekdays time MTWHF 00:00-07:59 acl restricted_weekends time A 00:00-07:59 acl restricted_weekends time A 13:00-23:59 acl restricted_weekends time S 00:00-23:59 http_access deny restricted_weekdays http_access deny restricted_weekends
autoryzacja użytkowników korzystających z serwera proxy
Autoryzacja z PAMa
Wygodnie jest mieć jedną bazę autoryzującą użytkowników korzystających z określonych zasobów. W przypadku Linuksa dobrym pomysłem może być baza PAM. Wtedy wszyscy użytkownicy będą się autoryzować podając jednego użytkownika i jedno hasło do wszystkich usług.
Konfiguracja Squida by korzystał z metody PAM autoryzacji wygląda następująco:
auth_param basic program /usr/lib/squid/pam_auth auth_param basic children 5 auth_param basic realm Serwer Proxy linuxexpert.pl auth_param basic credentialsttl 45 minutes acl foo proxy_auth REQUIRED http_access allow foo
Dyrektywa auth_param basic program określa program wykorzystywany do autoryzowania użytkowników (u nas pam_auth). Dyrektywa auth_param basic children określa liczbę procesów autoryzujących użytkowników. Dyrektywa auth_param basic realm definiuje napis pojawiający się w okienku logowania użytkownika. Natomiast dyrektywa auth_param basic credentialsttl określa czas przechowywania informacji o fakcie zalogowania użytkownika.
Pozostałe dwie dyrektywy wprowadzają w życie potrzebę logowania się by skorzystać z serwera proxy. Czasem konieczne może być dodanie pliku w /etc/pam.d/ określającego zasady dostępu mechanizmu PAM.
terminal-3-67:/etc/squid# cat /etc/pam.d/squid @include common-auth @include common-account
Wyłączenie z buforowania określonych witryn
W celu wyłączenia z buforowania określonych stron należy stworzyć acl-e, następnie skorzystać z dyrektywy no_cache (nie przechowuj w buforze) oraz nakazać bezpośrednie połączenia z daną witryną (always_direct). Przykład dla witryn skupionych na serwerze 212.191.200.79:
acl nasze_strony3 dst 212.191.200.79 no_cache deny nasze_strony3 always_direct allow nasze_strony3
Transparent proxy
Tranparent proxy polega (w dużym uproszczeniu) na korzystaniu z serwera proxy bez potrzeby konfiguracji proxy na przeglądarce (IE, Netscape, konqueror, itd….). Można także zmusić użytkowników do korzystania z serwera proxy. Najłatwiej to zrobić przekierowując na maskaradzie na port squida. W przypadku ipchains robimy to następująco:
/sbin/ipchains -A input -s 192.168.0.0/24 -d 0.0.0.0/0 80 -p TCP -j REDIRECT 8080
a w przypadku iptables:
/sbin/iptables -A INPUT -m tcp -p tcp -s 192.168.0.0/24 -d 0.0.0.0/0 80 -j REDIRECT 3126
lub prościej
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
Następnie konfigurujemy squida aby pracował w trybie proxy przezroczystego. W tym celu należy do pliku konfiguracyjnego dodać następujące parametry:
httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on
Anonimowość użytkowników sieci wewnętrznej
Anonimowość dla użytkownikow schowanych za NAT-em jest istotna. Aby squid ustawiał w nagłówku HTTP/1.1 pole 'X-Forwarded-For: unknown’ zamiast 'X-Forwarded-For: 192.168.2.24′, czyli aby ukrywał adres klient-a, należy ustawić parametr forwarded_for na off .
forwarded_for off
Więcej o tym można poczytać pod adresem: http://www.squid-cache.org/Doc/FAQ/FAQ-4.html#ss4.18
Strony błędów w języku polskim
Nie każdy z użytkowników naszego serwera proxy musi znać język angielski. Wygodnie jest zmienić domyślny język stron błędów na Polski. W tym celu wskazujemy katalog stron z błędami:
/usr/lib/squid/errors/
Strony te oczywiście możemy modyfikować do własnych potrzeb.
Programy wspomagające prace Squida
sqcwa
Program ten przegląda liste squid/access.log w locie, analizuje i szuka w nim wszystkich obiektów txt/html zawierających określone tagi, jeżeli je znajdzie, nakazuje squidclient usunąć ją.
Sarg
![]() |
Program generuje statystyki na podstawie pliku logów dostępu do proxy i następnie wyświetla je w postaci strony WWW albo wysyła jako email. Statystyki te są pogrupowane po IP komputera klienta (dostępne są również informacje o tym na jakie strony o której godzinie wchodził) oraz względem popularności w firmie. |
Squid-cgi
![]() |
squid-cgi to program do zarządzania serwerem proxy przez stronę WWW. Posiada dużo statystyk dzięki którym możemy również łatwo zoptymalizować nasze proxy. |
SquidGuard
Program zawiera listy stron do których można by blokować dostęp ze względu na treść. Przykładem są strony pornograficzne, z filmami czy poświęcone przemocy i organizacjom nielegalnym.
Calamaris
Program Calamaris służy do generowania statystyk informujących o pracy Squida (i innych serwerów proxy) w określonym czasie (np. dzień czy tydzień). Przedstawia dużo informacji mogących pomóc w optymalizacji pracy programu.
Strona domowa projektu http://cord.de/tools/squid/calamaris/Welcome.html
Sqeezer
Program analizuje współprace z nadrzędnymi serwera proxy i doradza w zakresie konfiguraji programu. Program omówiony jest w dalszej części kursu.
Squidview
Program Squidview posiada wygodny interfejs napisany w ncurses i służy do bieżącego przeglądania logu access.log, dzięki czemu możemy w komfortowy sposób sprawdzić co squid bieżąco obsługuje. |
Viralator
Program Viralator jest skryptem perlowym uruchamiającym antywirusy zanim dany plik zostanie przekazany Squdowi.
http://viralator.sourceforge.net/
Strona domowa projektu http://viralator.sourceforge.net/
Inne programy
Spis programów umożliwiających analizowanie logów znajdziesz na stronie http://www.squid-cache.org/Scripts/
Cześć a jak to zrobić jak ma się dwie karty sieciowe ? Jedna dla lan a druga dla internetu ?
Siec wygląda następująco:
Komputery klienckie znajdują się w podsieci odciętej od internetu 192.168.1.0/24 (przykładowy komputer kliencki 192.168.1.5).
Serwer proxy posiada dwie karty sieciowe jedna w sieci klientów (np 192.168.1.200) i druga w podsieci 192.168.2.0/24 (np 192.168.2.200) która to podsieć ma całkowicie odblokowany dostęp do internetu.
mój plik wygląda nastepująco:
[code]
cache_mgr zenek@domena.zenka.pl
http_port 3128
# port na którym wymienia informację z innymi serwerami proxy (0 wyłącza)
icp_port 0
#### użytkownik i grupa serwera proxy
cache_effective_user proxy
cache_effective_group proxy
####
redirect_rewrites_host_header off
cache_replacement_policy GDSF
#### wielkość zasobów udostępnianych przez system #
cache_mem 16 MB
cache_dir ufs /cache/ 200 16 256 maximum_object_size 12000 KB
no_cache deny QUERY
acl localnet src 192.168.1.0/255.255.255.0
acl Safe_ports port 80 433 210 119 70 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all
#####
logi cache_access_log /var/log/squid3/access.log
log_icp_queries off
buffered_logs on
[/code]
Ale czegoś tu brakuje.
Kiedy patrzę na ten plik od razu rzuca mi się w oczy brak jakiegokolwiek wpisu dotyczącego sieci 192.168.2.0/24 ale nie wiem gdzie i jak go umieścić bo podejrzewam ze tu jest problem.
Po ustawieniu na komputerze klienckim adresu proxy 192.168.2.1:3128 w przeglądarce mam komunikat serwer proxy odrzuca połączenia. W pliku log /var/log/squid3/access.log nie ma nic nawet jednej linijki czegokolwiek.
Nie dokonywałem żadnych ustawień w iptables jeśli są jakieś wymagane to proszę tez o pomoc.