Proxy

Z wiki linux-user
Skocz do: nawigacji, wyszukiwania
 
Linia 1: Linia 1:
 
[[Category:Serwer]]
 
[[Category:Serwer]]
 
== Proxy ==
 
== Proxy ==
 +
W tym howto zostało opisane w jaki sposób można utworzyć serwer pośredniczący '''proxy''' za pomocą oprogramowania '''Squid'''.
 +
'''Squid''' jest najpopularniejszym oprogramowaniem przy użyciu którego możliwe jest skonfigurowanie serwera '''proxy'''. Oprogramowanie squid rozwijane jest na licejncji GPL. Strona domowa projektu to [http://www.squid-cache.org/ www.squid-cache.org].
 +
Serwer proxy używany jest najczęściej do nawiązywania połączenia w imieniu użytkownika łączącego się z siecią zewnętrzną i na odwrót. W czasie połączenia serwer proxy może filtrować treści i innego typu dane i ewentualnie je blokować lub wykonywać inne operacje.
 +
Niniejszy tutorial i wszystkie testy były przeprowadzane na systemie ''Centos 5.8 i386''.
 +
# uname -a
 +
Linux localhost 2.6.18-308.4.1.el5 #1 SMP Tue Apr 17 17:08:10 EDT 2012 i686 i686 i386 GNU/Linux
  
STRONA W BUDOWIE
+
=== Instalacja oprogramowania Squid ===
 +
Aby dokonać instalacji oprogramowania Squid wystarczy jako użytkownik [[root]] wydać polecenie
 +
yum install squid
 +
Podstawowe pliki konfiguracyjne squida znajdują się w ścieżce ''/etc/squid'' a głównym plikiem konfiguracyjnym jest ''squid.conf''. Pliki z logami znajdują się w ścieżce ''/var/log/squid/'' i jeżeli nie zostało inaczej skonfigurowane to są to pliki
 +
*/var/log/squid/access.log
 +
*/var/log/squid/cache.log
 +
*/var/log/squid/squid.out
 +
*/var/log/squid/store.log
 +
Aby uruchomić serwer wydajemy polecenie
 +
service squid start
 +
restartowanie serwera
 +
service squid restart
 +
lub przeładowanie konfiguracji
 +
service squid reload
 +
oraz zatrzymywanie serwera squid
 +
service squid stop
 +
aby skonfigurować automatyczne włączanie się squida po uruchomieniu serwera  wydajemy polecenie
 +
chkconfig squid on
 +
 
 +
=== Podstawowe opcje ===
 +
'''Squid''' zaraz po instalacji może zostać uruchomiony i prawdopodobnie jest gotowy do pracy. Jednak sam plik konfiguracyjny ''squid.conf'' zawiera wiele komentarzy, które oczywiście warto przeczytać jednak utrudniają one w znacznym stopniu pracę przy edytowaniu pliku, dlatego warto jest zachować oryginalny plik  a do konfiguracji oprogramowania stworzyć nowy pusty.
 +
Poniżej wyjaśnię kilka przydatnych opcji
 +
* '''http_port''' opcja przy użyciu której określamy na którym porcie ma nasłuchiwać squid (domyślnie 3128)
 +
* '''cache_mem (MB)''' opcja pozwala ustalić ile pamięci może być wykorzystane do cachowania danych
 +
* '''visible_hostname nazwa-komputera''' możemy określić nazwę jaką ma posługiwać się squid, ''nawa-komputera'' to nazwa z pliku ''/etc/hosts''
 +
* '''reference_age''' opcja umożliwia określenie po jakim czasie zostaną usunięte przechowywane dane
 +
* '''maximum_object_size''' ustalenie maksymalnej wielkości pojedyńczego pliku
 +
* '''forwarded_for''' - opcja umożliwia włączenie anonimowości dla użytkowników będących za bramą sieciową (np nie będą wyświetlane ich adresy lokalne)
 +
* '''memory_replacement_policy typ''' – opcja umożliwia definicję kolejności, w jakiej dane będą usuwane z cache (dyskowego i pamięciowego), gdzie typy to:
 +
**'''lru''' usuwanie obiektu o najdawniejszym dostępie, jak w starych wersjach Squida,
 +
**'''heap LRU''' algorytm LRU używający sterty (heap),
 +
**'''heap LFUDA''' zostawia w cache popularne obiekty niezależnie od ich rozmiaru,
 +
**'''heap GDSF''' zatrzymuje w cache niewielkie popularne obiekty.
 +
* '''ACL (Access Control List)''' list kontroli dostępu opartych o akcje '''allow''' lub '''deny''' dla zdefiniowanych elementów ACL. '''ACL''' składa się z
 +
acl [nazwa_ACL] [typ] [parametry]
 +
niektóre z ciekawszych typów to
 +
 
 +
** '''arp''' adres ''MAC'' klienta
 +
** '''browser''' przeglądark, która wysłała zapytanie
 +
** '''dst''' adres serwera na który wskazuje zapytanie
 +
** '''maxconn''' określa maksymalną ilość połączeń z jednego adresu IP
 +
** '''port''' opcja pozwala na określenie numerów portów docelowych
 +
** '''proto''' określenie protokołu
 +
** '''src''' adres klienta z którego przychodzi zapytanie
 +
Przykładem '''acl''' może być
 +
acl wszyscy src 0.0.0.0/0.0.0.0
 +
lub
 +
acl ssl_ports port 443 444
 +
 
 +
=== listy kontrola dostępu ===
 +
Najczęściej używane opcje z listy kontroli dostępu
 +
* '''http_access''' opcja umożliwiająca klientom na dostęp do wybranych acl
 +
* '''http_reply_access''' opcja określająca prawa dla klientów http odnośnie odbioru odpowiedzi na ich żądania
 +
* '''cache''' opcja pozwalająca na ustalenie, które odpowiedzi mają być buforowane
 +
* '''always_direct''' określa, które żądania powinny być bezpośrednio przekierowane z pominięciem serwera proxy
 +
* '''never_direct''' określa, które żądania powinny zawsze przechodzić przez serwer proxy
 +
przykładem kontroli dostępu mogą być
 +
http_access deny wszyscy
 +
lub
 +
http_port 80 vhost
 +
 
 +
=== Inne opcje ===
 +
aby uzyskać więcej informacji na temat działania serwera możemy dodać opcję
 +
debug_options ALL,1 33,2
 +
lub jeszcze więcej
 +
debug_options ALL,1 33,2 28,9
 +
informacje będą zachowywane w pliku ''/var/log/squid/cache.log''
 +
Aby uruchomić serwer squid w trybie pełnego debugowania używamy opcji
 +
squid -NX
 +
 
 +
=== Przykłady ===
 +
Poniżej przedstawiam kilka przykładowych opcji, które można wkleić bezpośrednio do swojej konfiguracji squida (plik squid.conf)
 +
 
 +
Blokowanie wybranej witryny
 +
acl blokowana1 url_regex wp\.pl
 +
http_access deny blokowana1
 +
 
 +
 
 +
Blokowanie wybranych domen znajdujących się w pliku tekstowym
 +
acl zakazane url_regex "/etc/squid/lista_domen_zakazanych.txt"
 +
http_access deny zakazane
 +
 
 +
 
 +
Zablokowanie wszystkich stron www oprócz wybranych domen dla danych adresów IP
 +
acl komputer src 192.168.0.12
 +
acl dostepne_strony dstdomain .onet.pl .google.pl
 +
http_access allow dostepne_strony
 +
http_access deny komputer
 +
 
 +
 
 +
Autoryzacja użytkowników
 +
auth_param basic program /usr/lib64/squid/pam_auth
 +
auth_param basic children 5
 +
auth_param basic realm Logowanie
 +
auth_param basic credentialsttl 1 hours
 +
oraz wymuszamy autoryzację przy pomocy acl:
 +
acl password proxy_auth REQUIRED
 +
http_access allow password
 +
 
 +
 
 +
Blokowanie stron youtube wraz z filmami podłączonymi do innych stron
 +
acl youtube_domains dstdomain .youtube.com .googlevideo.com .ytimg.com
 +
http_access deny youtube_domains
 +
 
 +
 
 +
Blokowanie innych formatów np takich jak flv, mms, swf i inne
 +
# MediaPlayer MMS Protocol
 +
acl media rep_mime_type mms
 +
acl mediapr url_regex dvrplayer mediastream ^mms://
 +
## Active Stream Format (Windows Media Player)
 +
acl media rep_mime_type x-ms-asf
 +
acl mediapr urlpath_regex \.(afx|asf)(\?.*)?$
 +
## Flash Video Format
 +
acl media rep_mime_type video/flv video/x-flv
 +
acl mediapr urlpath_regex \.flv(\?.*)?$
 +
## Flash General Media Scripts (Animation)
 +
acl media rep_mime_type application/x-shockwave-flash
 +
acl mediapr urlpath_regex \.swf(\?.*)?$
 +
## Others currently unknown
 +
acl media rep_mime_type ms-hdr
 +
acl media rep_mime_type x-fcs
 +
http_access deny mediapr
 +
http_reply_access deny media
 +
 
 +
 
 +
Pliki użytkowników i haseł <br />
 +
tworzymy plik z hasłami i nazwami użytkowników
 +
htpasswd -c /etc/squid/passwd user1
 +
nadajemy mu odpowiednie uprawnienia
 +
chmod o+r /etc/squid/passwd
 +
dodajemy obsługę uwierzytelniania poprzez plik haseł:
 +
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
 +
auth_param basic children 5
 +
auth_param basic realm Squid proxy-caching web server
 +
auth_param basic credentialsttl 2 hours
 +
auth_param basic casesensitive off
 +
ustawiamy odpowiednie acl i listy dostępu:
 +
acl ncsa_users proxy_auth REQUIRED
 +
http_access allow ncsa_users
 +
opis wykorzystanych przełączników:
 +
* '''auth_param basic program''' określa położenie pliku z hasłami oraz programu pomocniczego
 +
* '''auth_param basic children''' ilość procesów uwierzytelniania
 +
* '''auth_param basic realm''' część tekstu jaki zobaczy użytkownik podczas wprowadzania nazwy użytkownika i hasła
 +
* '''auth_param basic credentialsttl''' jak długo będzie utrzymywana autoryzacja
 +
* '''auth_param basic casesensitive''' określa czy w nazwie użytkownika mają być rozpoznawana duże i małe litery
 +
 
 +
=== Uruchamianie squida w środowisku chroot ===
 +
Na początku musimy stworzyć i przekopiować pliki squida
 +
mkdir -p /usr/local/squid3/var/cache/squid3
 +
chown proxy:nogroup /usr/local/squid3/var/cache/squid3
 +
mkdir -p /usr/local/squid3/var/log/squid3
 +
mkdir -p /usr/local/squid3/var/run/nscd
 +
chown proxy:nogroup /usr/local/squid3/var/run
 +
mkdir -p /usr/local/squid3/etc
 +
mkdir -p /usr/local/squid3/lib
 +
mkdir -p /usr/local/squid3/var/spool/squid3
 +
chown proxy:nogroup /usr/local/squid3/var/spool/squid3
 +
mkdir -p /usr/local/squid3/usr/share/squid3
 +
cp /usr/share/squid3/mime.conf /usr/local/squid3/usr/share/squid3/
 +
cp -r /usr/share/squid3/icons /usr/local/squid3/usr/share/squid3/
 +
mkdir -p /usr/local/squid3/etc
 +
cp /etc/resolv.conf /usr/local/squid3/etc/
 +
cp /etc/nsswitch.conf /usr/local/squid3/etc/
 +
mkdir -p /usr/local/squid3/lib
 +
cp /lib/libnss_dns* /usr/local/squid3/lib/
 +
mkdir -p /usr/local/squid3/usr/lib/squid3
 +
cp /usr/lib/squid3/* /usr/local/squid3/usr/lib/squid3/
 +
 
 +
oraz w pliku ''squid.conf'' dodać
 +
chroot /usr/local/squid3
 +
 
 +
=== Strony błędów ===
 +
Strony błędów oprogramowania squid przechowywane są w plikach podzielonych na różne wątki w katalogu ''/etc/squid/errors/''. Strony są niczym innym jak zwykłym HTML'em, które możemy dowolnie dostosować do własnych potrzeb.
 +
Możemy również zdefiniować własne strony błędów. Aby stworzyć własną stronę błedu należy
 +
* utworzyć i zdefiniować stronę błędu w katalogu ''/etc/squid/errors/''
 +
* dodać regułe do pliku ''squid.conf'' informującą w jakim zdarzeniu ma wyświetlić się strona np
 +
acl zablokowane_domeny url_regex "/etc/squid/zablokowane_domeny.txt"
 +
deny_info ERR_ZABLOKOWANE_DOMENY zablokowane_domeny
 +
http_access deny zablokowane_domeny
 +
 
 +
=== Monitoring ===
 +
Mamy możliwość również graficznego przeglądania logów squida za pomocą przeglądarki internetowej. Do tego celu będziemy potrzebowali jednak uruchomiony serwer http np [[apache]]. Programem, który służy do generowania raportów na podstawie plików z logami squida jest '''Calamaris'''. Jedyne co musimy zrobić to w terminalu wydać polecenie
 +
yum install calamaris
 +
a następnie
 +
cat /var/log/squid/access.log | calamaris -a -F 'html' > /www/htdocs/calamaris.html
 +
i możemy cieszyć się graficznym przedstawieniem logów<br />
 +
[[Plik:calamaris.png| 600 px]]
 +
=== Squid jako transparent proxy ===
 +
ustawiamy squid tak, aby działa jak przezroczyste proxy
 +
http_port 3128 transparent
 +
przy pomocy [[Firewall|firewalla]] ustawiamy przekierowanie całego ruchu z portu 80 na port squid
 +
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
 +
'''UWAGA''' nie można posługiwać się uwierzytelnianiem w trybie przeźroczystego proxy
 +
 
 +
=== Zobacz również ===
 +
Inne strony na temat squida i proxy
 +
* [[Squid & Qlproxy|linux-user.eu/wiki/index.php/Squid_%26_Qlproxy]]
 +
* [http://www.squid-cache.org/ www.squid-cache.org]
 +
* [http://wiki.squid-cache.org/FrontPage wiki.squid-cache.org/FrontPage]
 +
 
 +
<br /><google1 style="4"></google1>

Aktualna wersja na dzień 13:47, 21 maj 2012

Osobiste
Przestrzenie nazw

Warianty
Działania
Nawigacja
Narzędzia


Sponsor serwisu

Firma informatyczna ITProjek Bydgoszcz usługi informacztyczne, serwery, linux, windows, strony www, hosting, sieci komputerowe, system archiwizacji danych