W czasach, kiedy internet współdzieliliśmy z sąsiadami przeciągając skrętkę między piętrami i między oknami naszych bloków, a dostawcy internetu oferowali zawrotne prędkości na poziomie 64 Kb/s czy 128 Kb/s, a potem dochodziliśmy powoli do 512 Kb/s i wyżej, szalenie ważną rolę odgrywały serwery proxy. Pozwalały one na przechowywanie w cache części zawartości stron, dzięki czemu, tak w ogromnym uproszczeniu, strony ładowały się po prostu szybciej. Wystarczyło, że jeden ze współdzielących internautów odwiedził daną stronę, a jej elementy zostawały na serwerze proxy (takie jak obrazki, skrypty – innymi słowy zawartość statyczna), dzięki czemu wszyscy inni, podpięci już łączami na poziomie 10 Mb/s i 100 Mb/s w sieci lokalnej, ładowali część strony bezpośrednio z proxy odciążając internet. Dziś, kiedy mamy łącza rzędu 1 Gb/s, nie ma to praktycznie znaczenia, ale wtedy bez proxy – internet po prostu działał niesamowicie wolno. 

Proxy dzisiaj może mieć, podobnie jak wtedy, wiele innych zalet. Przede wszystkim, w korporacjach często korzysta się z proxy po to, aby limitować ruch do zasobów sieci. Nie zawsze takie usługi realizowane są przez urządzenia do tego stworzone, ale często spotykamy się z rozwiązaniami software opartymi właśnie na squid. Budując reguły, dopuszcza się konkretne strony, a całą resztę blokuje, dzięki czemu pracownicy, którzy mają ograniczone możliwości wyłączenia proxy czy ominięcia go, mogą wchodzić wyłącznie na strony dopuszczone przez dział bezpieczeństwa. Inna sprawa, że wciąż na Polskiej mapie są miejsca, gdzie internet nie przekracza 5 Mb/s lub dostęp jest możliwy tylko za pomocą sieci mobilnej z ograniczoną liczbą danych do przesłania. Zatem Proxy wciąż jest bardzo szeroko wykorzystywany. 

W dzisiejszym artykule pokażę, jak zainstalować i skonfigurować serwer proxy w oparciu o najbardziej popularne rozwiązanie tego typu – squid, uruchomiony na serwerze z najnowszym systemem operacyjnym CentOS 9. 

Instalacja 

yum install squid 

Squid znajduje się w repozytoriach standardowych, więc nie ma potrzeby dorzucania dodatkowych repozytoriów. W chwili pisania tego poradnika najnowszą dostępną wersją w repozytorium jest: squid-5.5-1.el9

Uruchamiamy i włączamy squid’a, aby startował razem z systemem. 

systemctl enable squid 
systemctl start squid 

Konfiguracja 

Pliki konfiguracyjne squid’a znajdują się w katalogu /etc/squid. 

Główny plik konfiguracyjny: /etc/squid/squid.conf 

Domyślnym portem nasłuchiwania dla proxy squid jest port: 3128 i binduje na wszystkie interfejsy, zarówno zewnętrzny, jak i lokalny na serwerze.  

Aby zmienić port nasłuchu zmieniamy konfigurację: 

http_port INNY_PORT 

Ja, dla potrzeb niniejszego artykułu, zostawiłem port domyślny: 3128

Konfigurowanie dostępów realizowane jest za pomocą ACL – access control list. 

Domyślnie, jak widać, squid zezwala na dostęp i komunikację w sieciach lokalnych. Z reguły jest to wystarczające do podstawowej kontroli dostępu.  

Uwierzytelnianie w proxy Squid 

Aby nasz serwer proxy był jeszcze bardziej bezpieczny, konieczne będzie dodanie możliwości uwierzytelniania – czyli dostępu na login i hasło. Dzięki temu dodamy kolejną warstwę ochrony.  Wówczas, nawet jeśli ktoś przypadkowo w naszej sieci lokalnej przyłączy nieautoryzowane urządzenie, to i tak nie będzie mógł skorzystać z naszego serwera. 

Konfiguracja pliku autoryzacyjnego znajduje się w /etc/squid/htpasswd. 

Wygląd i działanie pliku znamy z pewnością z basic auth serwera www Apache. Instalujemy niezbędne narzędzie do generowania haseł i loginów. Możemy też generować hasła na boku i po prostu wklejać je do pliku-  jeśli chcemy zachować pełny minimalizm systemu i nie instalować tool’a z Apache. 

yum install httpd_tools 

Dodawanie użytkowników 

htpasswd -c /etc/squid/htpasswd azug 

Pamiętaj, że przełącznik -c używamy tylko pierwszy raz. Kolejne dodawanie użytkowników realizujemy bez -c (nadpisze on nasz plik). 

Umieszczamy konfigurację w /etc/squid/squid.conf, aby nasz mechanizm autoryzacji mógł działać poprawnie. 

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/htpasswd. 
auth_param basic realm proxy                                                   
acl authenticated proxy_auth REQUIRED                                            
http_access allow authenticated 

Przeładowujemy konfigurację squid’a 

systemctl restart squid 

Dodanie wyjątku do firewalla 

Jeśli mamy uruchomiony Firewall – nie zapomnijmy o dodaniu odpowiedniej regułki do naszego filtra, aby dopuścić ruch dla squid’a. 

Np. dla firewalld, którego konfigurację także pokazywałem na Władcach Sieci, przykładowa regułka wyglądałaby mniej więcej tak: 

firewall-cmd --permanent --add-port=3128/tcp 

Sprawdzamy czy squid nasłuchuje na wskazanym przez nas porcie. 

Konfiguracja przeglądarki 

W ustawieniach sieciowych przeglądarki (w tym przypadku Firefox) wpisujemy dane do naszego Squid’a.  

Po wejściu na stronę, na przykład wladcysieci.pl, pojawi nam się okienko logowania do proxy. 

Wpisujemy wygenerowany login i hasło. 

To wszystko J Mamy uruchomiony własny serwer proxy i już możemy filtrować na nim ruch układając ACL, regułki przyspieszając działanie stron i ich wczytywanie się. 

Korzystanie ze Squid’a bez hasła 

Dla niektórych adresów IP, możemy dodatkowo zrezygnować z uwierzytelniania, na przykład z naszego domowego IP, jeśli jest stałe lub z całej klasy adresowej. 

Jeśli chcemy otworzyć squida na świat i zezwolić na komunikację z innego zewnętrznego IP, to w tym miejscu musimy dodać odpowiednią regułę ACL. 

# Własny zakres IP 
# Pojedynczy IP 
acl moje-ip src 1.2.3.4/32 

# Klasa adresowa 
acl moja-klasa src 4.3.2.1/24 

Poniżej zdefiniowanych wszystkich ACL musimy dodać regułę dopuszczającą ruch: 

http_access allow moje-ip 
http_access allow moja-klasa 

Restartujemy Squid’a 

systemctl restart squid 

Wskazany adres IP lub klasa adresowa będą mogły łączyć się bez wpisywania hasła. 

W kolejnych artykułach pokażę, jak jeszcze mocniej zabezpieczyć, jak filtrować wskazane strony internetowe i konfigurować cache w proxy Squid.