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