WSTĘP
Do czego służy Squid?W poniższym artykule starałem się przedstawić sposoby autoryzacji użytkowników korzystających z serwera proxy w oparciu o program Squid (w wersji 2.5). Jego autorami są Certyfikowani Deweloperzy Squid'a. Potrzeba autoryzacji bardzo często ma miejsce w przedsiębiorstwach. Dzięki autoryzacji możemy zaplanować politykę dostępu do Internetu, co w konsekwencji ułatwi nam również monitorowanie ruchu i tworzenie statystyk używania sieci przez użytkowników (pracowników).
INSTALACJA
W pierwszym kroku należy zainstalować Squida. Dzięki wbudowanemu, we FreeBSD, mechanizmowi portów (/usr/ports) instalacja programu nie powinna przysporzyć większych problemów. Wystarczy wykonać poniższe czynności a program zostanie, po samoczynnym ściągnięciu źródeł z Internetu, automatycznie skompilowany i zainstalowany:$/> cd /usr/ports/www/squidW poniższych przykładach opisałem również metody autoryzacji z wykorzystaniem serwera SMB. Jeżeli zdecydujemy się na użycie jednej z nich, konieczne będzie zainstalowanie także serwera Samby. Wykonajmy poniższe czynności:
$/usr/ports/www/squid> make install clean
$/> cd /usr/ports/net/sambaNależy podkreślić, że po wykonaniu powyższych czynności należy jeszcze poprawnie skonfigurować i uruchomić każdy program. W tym celu proponuję skorzystać z dokumentacji zamieszonej na stronach www (odpowiednio): www.squid-cache.org i www.samba.org.
$/usr/ports/net/samba> make install clean
Moduły autoryzujące
Wraz ze źródłami Squida dostarczanych jest kilka modułów autoryzujących, przykładowo: ncsa, msnt, smb, ntlm, winbind i inne. Aby móc autoryzować użytkowników należy skompilować i zainstalować jeden z powyższych modułów autoryzacji. Następnie musimy wskazać Squidowi, którego z autoryzujących programów ma używać. W tym celu podajemy w pliku konfiguracyjnym Squida nazwę programu oraz dodatkowe polecenia, jeśli jest to potrzebne. Autoryzacja dokonywana jest poza głównym procesem Squida. W chwili uruchomienia Squida, tworzy on kilka autoryzujących podprocesów, które odpowiadają za czytanie nazw użytkowników i haseł na standardowym wejściu (stdin), a następnie podają odpowiedź "OK" lub "ERR" na standardowe wyjście (stdout).Uwaga! W przypadku autoryzowania użytkowników serwer proxy nie może pracować w trybie transparentnym.
ncsa_auth
ncsa_auth jest jednym z modułów służącym do autoryzacji. Jeśli, podczas instalacji Squida, nie został on dodany automatycznie należy go zainstalować "ręcznie". Źródła programu można znaleźć w pliku z dystrybucją Squida (w katalogu - ../helpers/basic_auth/NCSA). Aby zainstalować program wpisz:
$/> make && make install && make cleanJeśli program jest już zainstalowany w systemie następnym krokiem, który należy wykonać, jest stworzenie pliku z hasłami. W tym celu możemy użyć programu htpasswd, dostarczanego razem z serwerem Apache.
Sam program można pobrać z http://www.squid-cache.org/htpasswd.
Dla leniwych: możliwe jest wygenerowanie pliku z hasłem korzystając ze strony http://www.php.co.ba/index.php?action=htaccess.
Przetestujmy teraz poprawność działania modułu:
$/> cd /usr/local/libexecWpisujemy nazwę użytkownika oraz hasło. Jeśli podaliśmy prawidłowe dane program zwróci OK - w przeciwnym wypadku ERR.
$/usr/local/ libexec> ./ncsa_auth /ścieżka/do/pliku/z/hasłami
Zakładając, że program działa prawidłowo, do pliku konfiguracyjnego Squida należy dodać poniższe linie:
auth_param basic program /usr/local/libexec/ncsa_auth /ścieżka/do/pliku/z/hasłamiOstatnim krokiem, który należy wykonać, jest dodanie poprawnych wpisów ACL (Access Control List - lista kontroli dostępu) do pliku konfiguracyjnego Squida - squid.conf:
auth_param basic children 5
auth_param basic credentialsttl 2 hours
auth_param basic realm Squid proxy-caching web server
acl AuthorizedUsers proxy_auth REQUIREDTeraz uruchamiamy Squida z nowymi ustawieniami:
http_access allow AuthorizedUsers
http_access deny all
$/> squid -k shutdownmsnt_auth
$/> squid
msnt_auth pozwala na autoryzacje użytkowników wielu domen. Źródła programu można znaleźć w pliku z dystrybucją Squida (w katalogu -../helpers/basic_auth/MSNT). Aby zainstalować program wpisz:
$/> make && make install && make cleanW tym momencie wszystkie potrzebne składniki powinny znajdować się w systemie. Teraz możemy przejść do konfiguracji programu. W katalogu /usr/local/etc/squid powinien znajdować się plik msntauth.conf, który należy wyedytować. Przykładowa konfiguracja może wyglądać następująco:
# Sample MSNT authenticator configuration filePrzynajmniej jeden serwer musi być zdefiniowany, aby program msnt_auth się uruchomił. W przypadku, gdy nie posiadamy zapasowego kontrolera domeny BDC, należy zamiast niego podać nazwę serwera PDC. Następnie musimy dodać odpowiednie wpisy do pliku /etc/hosts (pamiętajmy o kropce na końcu pliku!). Przykładowy plik hosts może wyglądać tak:
# Antonino Iannella, Stellar-X Pty Ltd
# Tue Sep 26 17:26:59 CST 2000
server wilk szakal vtest
#server my_PDC my_BDC my_NTdomain
#server other_PDC other_BDC otherdomain
#denyusers /usr/local/etc/squid/denyusers
allowusers /usr/local/etc/squid/allowusers
#Przykładowy plik /etc/hostsTeraz kolej na określenie użytkowników posiadających dostęp do Squida. W przykładzie używany jest jedynie plik allowusers, dlatego też należy stworzyć plik o takiej nazwie w katalogu /usr/local/etc/squid. Do pliku dodajemy nazwy użytkowników, którzy mają posiadać dostęp do proxy. Pamiętajmy, że w przypadku użycia dwóch plików (allowusers i denyusers) w pierwszej kolejności sprawdzany jest ten drugi. Jeśli nazwa użytkownika pojawi się w tym pliku, nie otrzyma on dostępu do proxy, nawet w przypadku gdyby użytkownik był wpisany do pliku allowusers. Jeśli nazwa użytkownika nie pojawi się w obydwu plikach, nie otrzyma on w ogóle dostępu. Ostatecznie jeśli plik allowusers będzie pusty, wszyscy użytkownicy otrzymają dostęp do proxy. Możemy teraz przetestować poprawność działania modułu:
127.0.0.1 localhost
192.168.1.1 wilk PDC.
$/> cd /usr/local/libexecWpisujemy nazwę użytkownika oraz hasło. Jeśli podaliśmy prawidłowe dane program zwróci OK - w przeciwnym wypadku ERR.
$/usr/local/ libexec> ./msnt_auth
Dodajemy teraz do pliku konfiguracyjnego Squida poniższe linie:
auth_param basic program /usr/local/libexec/msnt_authNastępnie uruchamiamy Squida z nowymi ustawieniami:
auth_param basic children 5
auth_param basic credentialsttl 2 hours
auth_param basic realm Squid proxy-caching web server
acl AuthorizedUsers proxy_auth REQUIRED
http_access allow AuthorizedUsers
http_access deny all
$/> squid -k shutdownsmb_auth
$/> squid
Kolejnym modułem służącym do autoryzacji jest smb_auth. Dzięki smb_auth można uwierzytelniać użytkowników i grupy poprzez serwer SMB taki jak Windows NT lub Samba.
Rozpocznijmy od konfiguracji Samby. Musimy pamiętać aby kontrola dostępu odbywała się na poziomie domeny. W ten sposób Samba będzie działała jako członek domeny Windows. Aby to wykonać należy dodać do sekcji [global] pliku konfiguracyjnego Samby następujące wpisy:
workgroup = vtestNastępnie należy skonfigurować serwer PDC i BDC (o ile istnieje) do prawidłowej pracy z modułem smb_auth. W tym celu tworzymy w udziale [netlogon] plik o nazwie proxyauth, w którym umieszczamy słowo "allow". W kolejnym kroku przyznajemy uprawnienia do czytania tego pliku użytkownikom i/lub grupom, które mają posiadać dostęp do proxy. Jeśli dostęp ma być realizowany dla wielu domen, należy umieścić plik i ustawić prawa dostępu na każdym kontrolerze domeny. Następnie do pliku konfiguracyjnego Squida dodajemy poniższe linie:
netbios name = owca
security = domain
password server = wilk
auth_param basic program /usr/local/bin/smb_auth -W domain -U PDCipTeraz możemy przetestować konfigurację:
auth_param basic children 5
auth_param basic credentialsttl 2 hours
auth_param basic realm Squid proxy-caching web server
$/> cd /usr/local/binWpisujemy nazwę użytkownika oraz hasło. Na ekranie powinny wyświetlić się poniższe informacje diagnostyczne:
$/usr/local/bin> ./smb_auth -W vtest -d
nazwa_użytkownika hasłoOczywiście w przypadku podania nieprawidłowej nazwy użytkownika lub hasła, program zwróci wartość ERR zamiast OK. W konsekwencji użytkownik nie dostanie uprawnień do korzystania z serwera proxy. Ostatnim krokiem, który należy wykonać, jest dodanie poprawnych wpisów ACL (Access Control List - lista kontroli dostępu) do pliku konfiguracyjnego Squida - squid.conf:
Domain name: vtest
Pass-through authentication: no
Query address options:
Domain controller IP address: IP.ADD.RRE.SS
Domain controller NETBIOS name: wilk
Contents of //wilk/netlogon/proxyauth: allow
OK
acl AuthorizedUsers proxy_auth REQUIREDTeraz uruchamiamy Squida z nowymi ustawieniami:
http_access allow AuthorizedUsers
http_access deny all
$/> squid -k shutdownDzięki konfiguracji praw dostępu bezpośrednio z poziomu kontrolera domeny, można autoryzować także grupy. Ma to duże znaczenie w przypadku dużej ilości użytkowników. Zamiast dodawać wiele wpisów acl do pliku squid.conf należy nadać uprawnienia do czytania pliku proxyauth odpowiednim grupom.
$/> squid
winbind
Powyższe sposoby autoryzacji mają zasadniczą wadę. Każdorazowo, podczas uruchomienia przeglądarki www, użytkownikowi pojawia się okno (tzw. pop-up window), w którym należy podać właściwą nazwę użytkownika oraz hasło. Warto więc przyjrzeć się innemu programowi, dzięki któremu możemy autoryzować użytkowników transparentnie (transparentna autoryzacja dokonywana jest jedynie przy korzystaniu z przeglądarki Microsoft Internet Explorer. W innych przypadkach (Netscape, Mozilla, Opera) pojawi się standardowe okno pop-up).
Do poprawnej pracy systemu należy zainstalować Sambę razem z winbindem. W tym celu musimy skompilować źródła z dodatkowymi opcjami: --with-winbind oraz -with-winbind-auth-challenge.
Następnie skonfigurujmy Sambę tak, aby kontrola dostępu odbywała się na poziomie domeny. W ten sposób Samba będzie działała jako członek domeny Windows (trzeba pamiętać o dodaniu konta zaufania na kontrolerze domeny PDC). Należy dodać również opcje odpowiedzialne z konfiguracje winbinda. Do sekcji [global] pliku konfiguracyjnego Samby dodajmy więc następujące wpisy:
workgroup = vtestWygodnym sposobem jest również skonfigurowanie Samby tak, aby automatycznie logowała się do domeny (można o tym przeczytać w Samba FAQ). Połączmy się z domeną. Aby to wykonać wykonajmy polecenie:
netbios name = owca
security = domain
password server = wilk
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind use default domain = yes
$/> smbpasswd -j vtest -r wilk -U AdministratorMusimy uruchomić demona winbindd oraz sprawdźić czy konto zaufania działa poprawnie:
$/> wbinfo -tPrzetestujmy autoryzację użytkownika poprzez winbindd:
Secret is good
$/> wbinfo -a vtest\\nazwa_użytkownika%hasłoObydwie metody autoryzacji powinny zwrócić wartość "succeeded". Mając poprawnie skonfigurowaną Sambę możemy przystąpić do konfiguracji Squida. Aby Squid mógł poprawnie autoryzować użytkowników poprzez winbind, musi zostać skompilowany z poniższymi opcjami:
plaintext password authentication succeeded
error code was NT_STATUS_OK (0x0)
challenge/response password authentication succeeded
error code was NT_STATUS_OK (0x0)
--enable-auth="ntlm,basic"Zanim przejdziemy dalej, sprawdźmy poprawność działania Squida bez żadnych autoryzacji. Kolejnym krokiem jaki wykonamy będzie sprawdzenie działania modułu winbind (dokonamy sprawdzenia trybu basic):
--enable-basic-auth-helpers="winbind"
--enable-ntlm-auth-helpers="winbind"
$/> /usr/local/libexec/wb_auth -dJeśli podamy prawidłowe dane, powinniśmy otrzymać rezultat OK. Ostatnim etapem, który nam pozostał, jest dodanie poniższych opcji do pliku konfiguracyjnego squid.conf:
/wb_auth[65180](wb_basic_auth.c:136): basic winbindd auth helper ...
mydomain\myuser mypasswd
/wb_auth[65180](wb_basic_auth.c:107): Got 'mydomain\myuser mypasswd' from squid (length: 24).
/wb_auth[65180](wb_basic_auth.c:54): winbindd result: 0
/wb_auth[65180](wb_basic_auth.c:57): sending 'OK' to squid
OK
auth_param ntlm program /usr/local/libexec/wb_ntlmauthPowyższy przykład autoryzuje każdego użytkownika zalogowanego do domeny. Jeśli jednak chcemy zezwolić wybranym osobom korzystać z proxy, zamiast opcji REQUIRED możemy podać listę użytkowników w postaci nazwa_domeny\nazwa_użytkownika, na przykład:
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param basic program /usr/local/libexec/wb_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl all src 0.0.0.0/0.0.0.0
acl AuthorizedUsers proxy_auth REQUIRED
http_access allow all AuthorizedUsers
acl AuthorizedUsers proxy_auth vtest\admin
Dodatkowe informacje można uzyskać kontaktując się z autorem: Łukasz Tomaszewski
Źródło: http://blog.siebab.net/2006/11/autoryzacja-dostpu-do-serwera-proxy-we.html