Wyszukiwanie w witrynie

Konfigurowanie serwera proxy Squid z ograniczonym dostępem i konfigurowanie klientów do korzystania z serwera proxy — część 5


Certyfikowany inżynier Linux Foundation to wykwalifikowany profesjonalista posiadający wiedzę specjalistyczną w zakresie instalowania usług sieciowych w systemach Linux, zarządzania nimi i rozwiązywania problemów z nimi, a także jest odpowiedzialny za projektowanie, wdrażanie i bieżącą konserwację systemu- szeroka architektura.

Przedstawiamy program certyfikacyjny Linux Foundation.

W Części 1 tej serii pokazaliśmy, jak zainstalować squid, serwer buforujący proxy dla klientów internetowych. Proszę zapoznać się z tym postem (link podany poniżej), zanim przejdziesz dalej, jeśli nie zainstalowałeś jeszcze Squida w swoim systemie.

  1. Część 1 – Zainstaluj usługi sieciowe i konfiguruj automatyczne uruchamianie podczas rozruchu

W tym artykule pokażemy, jak skonfigurować serwer proxy Squid w celu udzielenia lub ograniczenia dostępu do Internetu oraz jak skonfigurować klienta http lub przeglądarkę internetową, aby korzystała z tego serwera proxy.

Konfiguracja mojego środowiska testowego

Serwer Squid
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Maszyna Klienta 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Maszyna Klienta 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Pamiętajmy, że w uproszczeniu webowy serwer proxy jest pośrednikiem pomiędzy jednym (lub większą liczbą) komputerów klienckich a określonym zasobem sieciowym, z których najczęstszym jest dostęp do Internetu. Innymi słowy, serwer proxy jest podłączony z jednej strony bezpośrednio do Internetu (lub do routera podłączonego do Internetu), a z drugiej strony do sieci komputerów klienckich, które będą za jego pośrednictwem uzyskać dostęp do sieci WWW.

Być może zastanawiasz się, dlaczego miałbym chcieć dodać kolejne oprogramowanie do mojej infrastruktury sieciowej?

Oto 3 najważniejsze powody:

1. Squid przechowuje pliki z poprzednich żądań, aby przyspieszyć przyszłe transfery. Załóżmy na przykład, że klient1 pobiera plik CentOS-7.0-1406-x86_64-DVD.iso z Internetu. Kiedy klient2 żąda dostępu do tego samego pliku, squid może przenieść plik ze swojej pamięci podręcznej, zamiast pobierać go ponownie z Internetu. Jak się domyślasz, możesz użyć tej funkcji do przyspieszenia przesyłania danych w sieci komputerów, które wymagają częstych aktualizacji.

2. Listy ACL (Listy kontroli dostępu) pozwalają nam ograniczać dostęp do stron internetowych i/lub monitorować dostęp dla poszczególnych użytkowników. Możesz ograniczyć dostęp na przykład na podstawie dnia tygodnia, pory dnia lub domeny.

3. Omijanie filtrów sieciowych jest możliwe dzięki zastosowaniu internetowego serwera proxy, do którego kierowane są żądania i który zwraca żądaną treść klientowi, zamiast wysyłać żądanie klienta bezpośrednio do Internetu.

Załóżmy na przykład, że jesteś zalogowany w kliencie1 i chcesz uzyskać dostęp do www.facebook.com za pośrednictwem routera swojej firmy. Ponieważ witryna może być blokowana przez zasady Twojej firmy, możesz zamiast tego połączyć się z internetowym serwerem proxy i poprosić go o dostęp do witryny www.facebook.com. Zdalna zawartość jest następnie ponownie zwracana do Ciebie za pośrednictwem internetowego serwera proxy, z pominięciem zasad blokowania routera Twojej firmy.

Konfiguracja Squida – podstawy

Schemat kontroli dostępu internetowego serwera proxy Squid składa się z dwóch różnych komponentów:

  1. Elementy ACL to linie dyrektyw rozpoczynające się od słowa „acl” i reprezentujące typy testów przeprowadzanych w odniesieniu do dowolnej transakcji żądania.
  2. Reguły listy dostępu składają się z akcji zezwól lub odmów, po której następuje pewna liczba elementów listy ACL i służą do wskazania, jakie działanie lub ograniczenie ma do wykonania dla danego żądania. Są one sprawdzane w kolejności, a przeszukiwanie listy kończy się, gdy tylko jedna z reguł zostanie zgodna. Jeśli reguła ma wiele elementów ACL, jest implementowana jako operacja logiczna AND (wszystkie elementy ACL reguły muszą być zgodne, aby reguła była zgodna).

Główny plik konfiguracyjny Squida to /etc/squid/squid.conf i ma długość ~5000, ponieważ zawiera zarówno dyrektywy konfiguracyjne, jak i dokumentację. Z tego powodu utworzymy nowy plik squid.conf zawierający tylko linie zawierające dyrektywy konfiguracyjne, dla naszej wygody, pomijając linie puste lub skomentowane. W tym celu użyjemy następujących poleceń.

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

I wtedy,

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

Teraz otwórz nowo utworzony plik squid.conf i poszukaj (lub dodaj) następujące elementy ACL i listy dostępu.

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

Dwie linie powyżej przedstawiają podstawowy przykład użycia elementów ACL.

  1. Pierwsze słowo, acl, wskazuje, że jest to linia dyrektywy elementu ACL.
  2. Drugie słowo, localhost lub localnet, określa nazwę dyrektywy.
  3. Trzecie słowo, w tym przypadku src, to typ elementu listy ACL używany do reprezentowania odpowiednio adresu IP klienta lub zakresu adresów. Możesz określić pojedynczego hosta według adresu IP (lub nazwy hosta, jeśli masz zaimplementowaną funkcję rozpoznawania DNS) lub adresu sieciowego.
  4. Czwarty parametr to argument filtrujący, który jest „podawany” do dyrektywy.

Dwie linie poniżej to reguły listy dostępu i przedstawiają wyraźną implementację wspomnianych wcześniej dyrektyw ACL. W kilku słowach wskazują, że należy przyznać dostęp http, jeśli żądanie pochodzi z sieci lokalnej (localnet) lub z localhost. W szczególności, jakie są dozwolone adresy sieci lokalnej lub hosta lokalnego? Odpowiedź brzmi: te określone w dyrektywach localhost i localnet.

http_access allow localnet
http_access allow localhost

W tym momencie możesz ponownie uruchomić Squid, aby zastosować wszelkie oczekujące zmiany.

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

a następnie skonfiguruj przeglądarkę klienta w sieci lokalnej (w naszym przypadku 192.168.0.104), aby uzyskać dostęp do Internetu za pośrednictwem serwera proxy w następujący sposób.

W Firefoksie

1. Przejdź do menu Edycja i wybierz opcję Preferencje.

2. Kliknij Zaawansowane, następnie kartę Sieć, a na koniec Ustawienia

3. Zaznacz opcję Ręczna konfiguracja proxy i wprowadź adres IP serwera proxy oraz port, na którym nasłuchuje dla połączeń.

Uwaga, że domyślnie Squid nasłuchuje na porcie 3128, ale możesz obejść to zachowanie, edytując listę dostępu reguła rozpoczynająca się od http_port (domyślnie ma ona postać http_port 3128).

4. Kliknij OK, aby zastosować zmiany i gotowe.

Sprawdzanie, czy Klient ma dostęp do Internetu

Możesz teraz sprawdzić, czy klient sieci lokalnej uzyskuje dostęp do Internetu za pośrednictwem serwera proxy, w następujący sposób.

1. W kliencie otwórz terminal i wpisz:

ip address show eth0 | grep -Ei '(inet.*eth0)'

To polecenie wyświetli bieżący adres IP Twojego klienta (192.168.0.104 na poniższym obrazku).

2. W swoim kliencie użyj przeglądarki internetowej, aby otworzyć dowolną witrynę internetową (w tym przypadku linux-console.net).

3. Uruchom na serwerze.

tail -f /var/log/squid/access.log

a otrzymasz podgląd na żywo żądań obsługiwanych przez Squid.

Ograniczanie dostępu przez klienta

Załóżmy teraz, że chcesz wyraźnie odmówić dostępu do tego konkretnego adresu IP klienta, zachowując jednocześnie dostęp dla pozostałej części sieci lokalnej.

1. Zdefiniuj nową dyrektywę ACL w następujący sposób (nazwałem ją ubuntuOS, ale możesz nazwać ją dowolną).

acl ubuntuOS src 192.168.0.104

2. Dodaj dyrektywę ACL do listy dostępu do sieci lokalnej, która już istnieje, ale poprzedź ją wykrzyknikiem. Oznacza to: „Zezwalaj na dostęp do Internetu klientom zgodnym z dyrektywą ACL sieci lokalnej, z wyjątkiem tego, który jest zgodny z dyrektywą ubuntuOS”.

http_access allow localnet !ubuntuOS

3. Teraz musimy zrestartować Squida, aby zastosować zmiany. Następnie, jeśli spróbujemy przeglądać dowolną witrynę, okaże się, że dostęp jest teraz zabroniony.

Konfiguracja Squida – dostrajanie

Ograniczanie dostępu według domeny i/lub pory dnia/dnia tygodnia

Aby ograniczyć dostęp do Squid według domeny, użyjemy słowa kluczowego dstdomain w dyrektywie ACL w następujący sposób.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Gdzie zabronione_domeny to zwykły plik tekstowy zawierający domeny, do których chcemy odmówić dostępu.

Na koniec musimy przyznać dostęp Squidowi w przypadku żądań niezgodnych z powyższą dyrektywą.

http_access allow localnet !forbidden

A może będziemy chcieli umożliwić dostęp do tych stron tylko o określonej porze dnia (10:00 do 11:00) tylko w poniedziałek (M), środa (W) i piątek (P).

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

W przeciwnym razie dostęp do tych domen zostanie zablokowany.

Ograniczanie dostępu poprzez uwierzytelnienie użytkownika

Squid obsługuje kilka mechanizmów uwierzytelniania (Basic, NTLM, Digest, SPNEGO i Oauth) oraz pomocników (baza danych SQL, LDAP, NIS, NCSA, żeby wymienić tylko kilka). W tym samouczku użyjemy uwierzytelniania podstawowego z NCSA.

Dodaj następujące linie do pliku /etc/squid/squid.conf.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

Uwaga: w CentOS 7 wtyczkę NCSA dla squid można znaleźć w /usr/lib64/squid/basic_nsca_auth, więc zmień odpowiednio powyższą linię.

Kilka wyjaśnień:

  1. Musimy powiedzieć Squidowi, jakiego programu pomocniczego uwierzytelniania użyć z dyrektywą auth_param, podając nazwę programu (najprawdopodobniej /usr/lib/squid/ncsa_auth lub /usr/lib64/squid/basic_nsca_auth) plus wszelkie opcje wiersza poleceń (w tym przypadku /etc/squid/passwd), jeśli to konieczne.
  2. Plik /etc/squid/passwd jest tworzony za pomocą htpasswd, narzędzia do zarządzania podstawowym uwierzytelnianiem za pomocą plików. Pozwoli nam to dodać listę nazw użytkowników (i odpowiadających im haseł), którzy będą mogli korzystać z Squid.
  3. credentialsttl 30 minut będzie wymagało wprowadzania nazwy użytkownika i hasła co 30 minut (możesz określić ten przedział czasu również w godzinach).
  4. Opcja uwzględniająca wielkość liter włączona wskazuje, że w nazwach użytkowników i hasłach wielkość liter jest uwzględniana.
  5. dziedzina reprezentuje tekst okna dialogowego uwierzytelniania, który będzie używany do uwierzytelniania w squid.
  6. Wreszcie dostęp jest przyznawany tylko wtedy, gdy uwierzytelnienie proxy (proxy_auth WYMAGANE) zakończy się pomyślnie.

Uruchom następujące polecenie, aby utworzyć plik i dodać poświadczenia dla użytkownika gacanepa (pomiń flagę -c, jeśli plik już istnieje).

htpasswd -c /etc/squid/passwd gacanepa

Otwórz przeglądarkę internetową na komputerze klienckim i spróbuj przejść do dowolnej witryny.

Jeśli uwierzytelnienie zakończy się pomyślnie, dostęp do żądanego zasobu zostanie przyznany. W przeciwnym razie dostęp zostanie odrzucony.

Korzystanie z pamięci podręcznej w celu przyspieszenia transferu danych

Jedną z cech wyróżniających Squida jest możliwość buforowania zasobów żądanych z Internetu na dysk w celu przyspieszenia przyszłych żądań tych obiektów przez tego samego klienta lub innych.

Dodaj następujące dyrektywy do pliku squid.conf.

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

Kilka wyjaśnień do powyższych dyrektyw.

  1. ufs to format przechowywania plików Squid.
  2. /var/cache/squid to katalog najwyższego poziomu, w którym będą przechowywane pliki pamięci podręcznej. Ten katalog musi istnieć i być możliwy do zapisu przez Squid (Squid NIE utworzy tego katalogu za Ciebie).
  3. 1000 to ilość (w MB) do wykorzystania w tym katalogu.
  4. 16 to liczba podkatalogów pierwszego poziomu, natomiast 256 to liczba podkatalogów drugiego poziomu w /var/spool/squid.
  5. Dyrektywa maximum_object_size określa maksymalny rozmiar dozwolonych obiektów w pamięci podręcznej.
  6. refresh_pattern mówi Squidowi, jak postępować z określonymi typami plików (w tym przypadku .mp4 i .iso) i jak długo powinien przechowywać żądane obiektów w pamięci podręcznej (2880 minut=2 dni).

Pierwsza i druga 2880 to odpowiednio dolna i górna granica tego, jak długo obiekty bez wyraźnego czasu wygaśnięcia będą uważane za najnowsze i tym samym będą obsługiwane przez pamięć podręczną, natomiast 0% to procent wieku obiektów (czas od ostatniej modyfikacji), przy którym każdy obiekt bez wyraźnego czasu wygaśnięcia będzie uważany za nowy.

Studium przypadku: pobieranie pliku .mp4 od 2 różnych klientów i testowanie pamięci podręcznej

Pierwszy klient (IP 192.168.0.104) pobiera plik 71 MB .mp4 w 2 minuty i 52 sekundy.

Drugi klient (IP 192.168.0.17) pobiera ten sam plik w 1,4 sekundy!

Dzieje się tak dlatego, że plik został dostarczony z pamięci podręcznej Squid (wskazanej przez TCP_HIT/200) w drugim przypadku, a nie w pierwszym przypadku, kiedy został pobrany bezpośrednio z Internet (reprezentowany przez TCP_MISS/200).

Słowa kluczowe HIT i MISS wraz z kodem odpowiedzi 200 http wskazują, że plik został pomyślnie udostępniony w obu przypadkach, ale pamięć podręczna miała wartość HIT i Nieodebrane odpowiednio. Jeśli z jakiegoś powodu żądanie nie może zostać obsłużone przez pamięć podręczną, Squid próbuje obsłużyć je z Internetu.

Wniosek

W tym artykule omówiliśmy, jak skonfigurować internetowy serwer proxy buforujący Squid. Możesz użyć serwera proxy do filtrowania treści według wybranych kryteriów, a także do zmniejszenia opóźnień (ponieważ identyczne żądania przychodzące są obsługiwane z pamięci podręcznej, która jest bliżej klienta niż serwer WWW, który faktycznie obsługuje treść, co skutkuje szybszą transfery danych) i ruch sieciowy (zmniejszając ilość wykorzystywanej przepustowości, co pozwala zaoszczędzić pieniądze, jeśli płacisz za ruch).

Możesz odwiedzić stronę internetową Squid w celu uzyskania dalszej dokumentacji (nie zapomnij sprawdzić również wiki), ale nie wahaj się z nami skontaktować, jeśli masz jakiekolwiek pytania lub komentarze. Będzie nam więcej niż miło usłyszeć od Ciebie!