SQUID – serwer proxy

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/

One thought on “SQUID – serwer proxy”

  1. 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.

Dodaj komentarz