To ostateczny przypadek użycia proxy . Normalny serwer proxy, a nie odwrotny serwer proxy (zwany także modułami równoważenia obciążenia).
Najbardziej znanym, wolnym i otwartym oprogramowaniem jest kałamarnica . Na szczęście jest to jedno z niewielu dobrych programów typu open source, które można łatwo zainstalować za pomocą jednego apt-get install squid3
i skonfigurować za pomocą jednego pliku /etc/squid3/squid.conf
.
Omówimy dobre praktyki i lekcje, o których warto wiedzieć.
Oficjalny plik konfiguracyjny został nieco zmodyfikowany (usunięto 5000 bezużytecznych komentarzy).
# WELCOME TO SQUID 3.4.8
# ----------------------------
#
# This is the documentation for the Squid configuration file.
# This documentation can also be found online at:
# http://www.squid-cache.org/Doc/config/
#
# You may wish to look at the Squid home page and wiki for the
# FAQ and other documentation:
# http://www.squid-cache.org/
# http://wiki.squid-cache.org/SquidFaq
# http://wiki.squid-cache.org/ConfigExamples
#
###########################################################
# ACL
###########################################################
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 1025-65535 # unregistered ports
acl CONNECT method CONNECT
#####################################################
# Recommended minimum Access Permission configuration
#####################################################
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
#####################################################
# ACL
#####################################################
# access is limited to our subnets
acl mycompany_net src 10.0.0.0/8
# access is limited to whitelisted domains
# ".example.com" includes all subdomains of example.com
acl repo_domain dstdomain .keyserver.ubuntu.com
acl repo_domain dstdomain .debian.org
acl repo_domain dstdomain .python.org
# clients come from a known subnet AND go to a known domain
http_access allow repo_domain mycompany_net
# And finally deny all other access to this proxy
http_access deny all
#####################################################
# Other
#####################################################
# default proxy port is 3128
http_port 0.0.0.0:3128
# don't forward internal private IP addresses
forwarded_for off
# disable ALL caching
# bandwidth is cheap. debugging cache related bugs is expensive.
cache deny all
# logs
# Note: not sure if squid configures logrotate or not
access_log daemon:/var/log/squid3/access.log squid
access_log syslog:squid.INFO squid
# leave coredumps in the first cache dir
coredump_dir /var/spool/squid3
# force immediaty expiry of items in the cache.
# caching is disabled. This setting is set as an additional precaution.
refresh_pattern . 0 0% 0
Konfiguracja klienta - zmienne środowiskowe
Skonfiguruj te dwie zmienne środowiskowe we wszystkich systemach.
http_proxy=squid.internal.mycompany.com:3128
https_proxy=squid.internal.mycompany.com:3128
Większość bibliotek klienckich http (libcurl, httpclient, ...) konfiguruje się samodzielnie przy użyciu zmiennych środowiskowych. Większość aplikacji korzysta z jednej ze wspólnych bibliotek, a tym samym obsługuje proxy bezpośrednio po wyjęciu z pudełka (bez konieczności tworzenia przez programistę wiedzy).
Zauważ, że składnia jest ścisła:
- Nazwa zmiennej
http_proxy
MUSI zawierać małe litery w większości systemów Linux.
- Wartość zmiennej NIE MOŻE zaczynać się od
http(s)://
(protokół proxy to NIE http (s)).
Konfiguracja klienta - specyficzna
Niektóre aplikacje ignorują zmienne środowiskowe i / lub są uruchamiane jako usługa, zanim można ustawić zmienne (np. Debian apt
).
Te aplikacje będą wymagały specjalnej konfiguracji (np /etc/apt.conf
.).
HTTPS Proxying - Connect
Proxy HTTPS jest w pełni obsługiwane przez projekt. Korzysta ze specjalnej metody „CONNECT”, która ustanawia tunel między przeglądarką a serwerem proxy.
Nie wiem zbyt wiele na ten temat, ale nigdy nie miałem z tym problemów od lat. To po prostu działa.
Przypadek specjalny HTTPS - przezroczysty serwer proxy
Uwaga na temat przezroczystego serwera proxy. (tzn. serwer proxy jest ukryty i przechwytuje żądania klientów, np. man-in-the-middle).
Przezroczyste proxy przełamują HTTPS. Klient nie wie, że istnieje serwer proxy i nie ma powodu, aby używać specjalnej metody Connect.
Klient próbuje bezpośredniego połączenia HTTPS ... przechwyconego. Przechwytywanie jest wykrywane, a błędy są zgłaszane w dowolnym miejscu. (HTTPS ma na celu wykrywanie ataków typu człowiek w środku).
Biała lista domen i CDN
Biała lista domen i subdomen jest w pełni obsługiwana przez kałamarnicę. Niemniej jednak od czasu do czasu musi zawieść w nieoczekiwany sposób.
Nowoczesne strony internetowe mogą mieć wszelkiego rodzaju przekierowania domen i CDN. To złamie ACL, gdy ludzie nie zrobią więcej, aby wszystko uporządkować w jednej domenie.
Czasami pojawia się instalator lub pakiet, który chce zadzwonić do domu lub pobrać zewnętrzne zależności przed uruchomieniem. Za każdym razem zawiedzie i nic nie możesz na to poradzić.
Buforowanie
Podany plik konfiguracyjny wyłącza wszelkie formy buforowania. Lepiej dmuchać na zimne.
Osobiście w tej chwili działam w chmurze, wszystkie instancje mają łączność co najmniej 100 Mb / s, a dostawca uruchamia własne repozytorium popularnych rzeczy (np. Debian), które są wykrywane automatycznie. To sprawia, że przepustowość jest towarem, o który nie dbam mniej.
Wolę całkowicie wyłączyć buforowanie niż napotkać pojedynczy błąd buforowania, który stopi mój mózg podczas rozwiązywania problemów. Każda pojedyncza osoba w Internecie NIE MOŻE poprawnie ustawić swoich nagłówków buforowania.
Jednak nie wszystkie środowiska mają takie same wymagania. Możesz pójść o krok dalej i skonfigurować buforowanie.
NIGDY NIGDY nie wymaga uwierzytelnienia na serwerze proxy
Istnieje możliwość żądania uwierzytelnienia hasła od klientów, zwykle przy użyciu ich kont LDAP. Zniszczy każdą przeglądarkę i każde narzędzie wiersza poleceń we wszechświecie.
Jeśli chcesz przeprowadzić uwierzytelnianie na serwerze proxy, nie rób tego.
Jeśli zarząd chce uwierzytelnienia, wyjaśnij, że nie jest to możliwe.
Jeśli jesteś programistą i właśnie dołączyłeś do firmy, która blokuje bezpośredni internet ORAZ wymusza uwierzytelnianie proxy, URUCHAMIAJ SIĘ, GDY MOŻESZ.
Wniosek
Przeszliśmy przez wspólną konfigurację, typowe błędy i rzeczy, które trzeba wiedzieć o proxy.
Wyciągnięta lekcja:
- Istnieje dobre oprogramowanie typu open source do proxy (kałamarnica)
- Jest prosty i łatwy w konfiguracji (pojedynczy krótki plik)
- Wszystkie (opcjonalne) środki bezpieczeństwa mają kompromisy
- Najbardziej zaawansowane opcje psują rzeczy i wracają, by cię prześladować
- Przezroczyste proxy przełamują HTTPS
- Uwierzytelnianie proxy jest złe
Jak zwykle w programowaniu i projektowaniu systemu, niezwykle ważne jest zarządzanie wymaganiami i oczekiwaniami.
Zalecam trzymanie się podstaw podczas konfigurowania serwera proxy. Ogólnie rzecz biorąc, zwykły serwer proxy bez żadnego konkretnego filtrowania będzie działał dobrze i nie sprawiał problemów. Pamiętaj tylko o (automatycznej) konfiguracji klientów.