Proxy
Z wiki linux-user
(Utworzył nową stronę „Category:Serwery == Proxy == STRONA W BUDOWIE”) |
|||
Linia 1: | Linia 1: | ||
− | [[Category: | + | [[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 | ||
− | + | === 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> |