
pfSense+Squid cu filtrare HTTPS + Tehnologia autentificării unice (SSO) cu filtrare pe grupuri Active Directory
Scurt istoric
Compania a avut nevoie de implementarea unui server proxy cu capacitatea de a filtra accesul la site-uri (inclusiv HTTPS) pe baza grupurilor din AD, astfel încât utilizatorii să nu fie nevoiți să introducă parole suplimentare, iar administrarea să poată fi realizată prin intermediul unei interfețe web. O cerere destul de bună, nu-i așa?
O variantă corectă ar fi fost achiziționarea unor soluții precum Kerio Control sau UserGate, dar, ca întotdeauna, nu sunt suficienți bani, iar necesitatea există.
Aici intră în scenă vechiul și bunul Squid, dar din nou – de unde luăm interfața web? SAMS2? Este moralmente depășit. Aici intervine pfSense.
Descriere
În acest articol va fi descris modul de configurare a serverului proxy Squid.
Pentru autorizarea utilizatorilor va fi folosit Kerberos.
Pentru filtrarea pe grupuri de domeniu va fi utilizat SquidGuard.
Pentru monitorizare vor fi folosite Lightsquid, sqstat și sistemele interne de monitorizare pfSense.
De asemenea, va fi rezolvată o problemă frecventă legată de implementarea tehnologiei autentificării unice (SSO), și anume aplicațiile care încearcă să acceseze internetul sub acreditivul contului sistemului.
Pregătirea pentru instalarea Squid
Se va folosi pfSense ca bază, Instrucțiuni de instalare.
În interiorul său vom organiza autentificarea pe firewall-ul intermediar folosind conturi de domeniu. Instrucțiuni.
Foarte important!
Înainte de a începe instalarea Squid, trebuie să configurăm DNS server în pfSense, să facem o înregistrare A și înregistrări PTR pe serverul nostru DNS și să configurăm NTP astfel încât timpul să nu difere de cel de pe controlerul de domeniu.
De asemenea, în rețeaua dvs. trebuie să permiteți interfeței WAN a pfSense să acceseze internetul, iar utilizatorilor din rețeaua locală să se conecteze la interfața LAN, inclusiv prin porturile 7445 și 3128 (în cazul meu 8080).
Este totul pregătit? Conexiunea cu domeniul prin LDAP pentru autorizare pe pfSense a fost stabilită și timpul este sincronizat? Excelent. Este timpul să trecem la procesul principal.
Instalare și configurare preliminară
Vom instala Squid, SquidGuard și LightSquid din managerul de pachete pfSense în secțiunea „Sistem / Manager de pachete”.
După finalizarea instalării, mergem la „Servicii/Squid Proxy server/” și, în primul rând, în tab-ul Local Cache, configurăm caching-ul. Am setat totul pe 0, deoarece nu văd un sens deosebit în a cache-ui site-urile, acest lucru fiind gestionat eficient și de browsere. După configurare, apăsăm butonul „Salvează” din partea de jos a ecranului și aceasta ne va permite să efectuăm setările principale pentru proxy.
Setările principale le aducem la următoarea formă:

Portul implicit este 3128, dar prefer să folosesc 8080.
Parametrii selectați în tab-ul Proxy Interface determină ce interfete va asculta proxy-ul nostru. serverul. Deoarece acest firewall este construit astfel încât la internet să se uită prin interfața WAN, chiar dacă LAN și WAN pot fi în aceeași subrețea locală, recomand să folosim precis LAN pentru proxy.
Loopback-ul este necesar pentru funcționarea sqstat.
Mai jos veți găsi setările pentru proxy Transparent (transparent) și SSL Filter, dar nu ne sunt necesare, proxy-ul nostru nu va fi transparent, și pentru filtrarea https nu ne vom ocupa de substituirea certificatului (având în vedere că avem documentație, bancă-client și așa mai departe), ci vom analiza doar handshake-ul.
În acest stadiu, trebuie să ne întoarcem la controllerul nostru de domeniu, să creăm un cont pentru autentificare (putem folosi și cel pe care l-am configurat pentru autentificarea pe pfSense). Un factor foarte important aici este — dacă intenționați să folosiți criptarea AES128 sau AES256, bifați opțiunile corespunzătoare în setările contului.
În cazul în care domeniul dumneavoastră este un decor complex cu un număr mare de directoare sau domeniul dvs. este .local, ATUNCI AR PUTEA, dar nu este sigur, să trebuiască să folosiți o parolă simplă pentru acest cont, o problemă cunoscută, dar cu o parolă complexă ar putea pur și simplu să nu funcționeze, trebuie verificat în cazul particular.

După toate acestea generăm fișierul de chei pentru Kerberos, deschidem linia de comandă ca administrator pe controllerul de domeniu și introducem:
# ktpass -princ HTTP/pfsense.domain.local@DOMAIN.LOCAL -mapuser pfsense -pass 3EYldza1sR -crypto {DES-CBC-CRC|DES-CBC-MD5|RC4-HMAC-NT|AES256-SHA1|AES128-SHA1|All} -ptype KRB5_NT_PRINCIPAL -out C:keytabsPROXY.keytabAici specificăm FQDN-ul pfSense, respectând cu strictețe literele mari și mici, în parametrul mapuser introducem contul nostru de domeniu și parola acestuia, iar în crypto alegem metoda de criptare, eu am folosit rc4 pentru lucru, iar în câmpul -out alegem unde vom trimite fișierul nostru de chei gata.
După crearea cu succes a fișierului de chei, îl vom trimite pe pfSense-ul nostru. Am folosit Far pentru asta, dar se poate face și cu comenzi, cu putty sau prin intermediul interfeței web pfSense în secțiunea „Diagnostică - Linia de comandă”.
Acum putem edita sau crea /etc/krb5.conf

unde /etc/krb5.keytab este fișierul de chei pe care l-am creat.
Asigurați-vă că verificați funcționarea Kerberos cu kinit, dacă nu funcționează, nu are sens să citiți mai departe.
Configurarea autentificării Squid și a listei de acces fără autentificare
După ce am configurat Kerberos, îl vom conecta la Squid-ul nostru.
Pentru asta, mergi la Servicii - Server Proxy Squid și în setările de bază derulează la fund, acolo vom găsi butonul „Setări avansate”.
În câmpul Opțiuni personalizate (Înainte de autentificare) introducem:
#Хелперы
auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -s GSS_C_NO_NAME -k /usr/local/etc/squid/squid.keytab -t none
auth_param negotiate children 1000
auth_param negotiate keep_alive on
#Списки доступа
acl auth proxy_auth REQUIRED
acl nonauth dstdomain "/etc/squid/nonauth.txt"
#Разрешения
http_access allow nonauth
http_access deny !auth
http_access allow authuгде auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth — alege helper-ul necesar pentru autentificarea Kerberos.
Cheia -s cu valoarea GSS_C_NO_NAME — definește utilizarea oricărei conturi din fișierul de chei.
Cheia -k cu valoarea /usr/local/etc/squid/squid.keytab — definește utilizarea exact a acestui fișier keytab. În cazul meu, acesta este același fișier keytab creat de noi, pe care l-am copiat în directorul /usr/local/etc/squid/ și l-am redenumit, deoarece Squid nu voia să colaboreze cu acel director, probabil din cauza permiselor insuficiente.
Cheia -t cu valoarea -t none — dezactivează cererile ciclice către controlerul de domeniu, ceea ce reduce semnificativ sarcina pe acesta dacă aveți mai mult de 50 de utilizatori.
Pentru perioada de testare, puteți adăuga, de asemenea, cheia -d - adică diagnosticare, va genera mai multe jurnale.
auth_param negotiate children 1000 — definește câte procese simultane de autorizare pot fi active
auth_param negotiate keep_alive on — nu permite întreruperea conexiunii în timpul interogării lanțului de autorizare
acl auth proxy_auth REQUIRED — creează și necesită o listă de control al accesului, incluzând utilizatorii care au trecut de autentificare
acl nonauth dstdomain "/etc/squid/nonauth.txt" — informăm Squid despre lista de acces nonauth în care se află domenii de destinație, la care tuturor le va fi permis accesul. Creăm fișierul și introducem domeniile în formatul
.whatsapp.com
.whatsapp.netWhatsApp nu este folosit întâmplător ca exemplu - este foarte pretențios în ceea ce privește proxy-urile cu autentificare și nu va funcționa dacă nu este permis înainte de autentificare.
http_access allow nonauth — permitem accesul la această listă tuturor
http_access deny !auth — interzicem accesul utilizatorilor neautorizați la celelalte site-uri
http_access allow auth — permitem accesul utilizatorilor autorizați.
Totul, Squid-ul este configurat, acum este momentul să începem filtrarea pe grupuri.
Configurarea SquidGuard
Trecem la Servicii SquidGuard Proxy Filter.
În LDAP Options introducem datele contului nostru, folosit pentru autentificarea Kerberos, dar în următorul format:
CN=pfsense,OU=service-accounts,DC=domain,DC=localDacă există spații sau caractere ne-latine, această înregistrare ar trebui să fie închisă între ghilimele simple sau duble:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"Apoi, asigură-te că bifezi aceste opțiuni:
![]()
Pentru a elimina domeniile inutile pfsense DOMAIN.LOCAL la care întreaga sistem este foarte sensibil.
Acum trecem la Group Acl și asociem grupurile noastre de acces, eu folosesc denumiri simple în stilul group_0, group_1 și așa mai departe până la 3, unde 3 — acces doar pe lista albă, iar 0 — se poate accesa orice.
Grupurile sunt asociate în următorul mod:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0OU=squidOU=service-groupsDC=DOMAINDC=LOCAL))Salvăm grupul nostru, trecem la Times, acolo am creat un interval semnificând că lucrează întotdeauna, acum trecem la Target Categories și creăm liste după cum dorim, după crearea listelor ne întoarcem la grupurile noastre și în interiorul grupului folosim butoanele pentru a alege cine poate accesa și cine nu.
LightSquid și sqstat
Dacă în procesul de configurare am ales loopback în setările Squid și am deschis posibilitatea de a accesa 7445 în firewall atât în rețeaua noastră, cât și pe pfSense în sine, atunci când trecem la Diagnostica Raportelor Squid Proxy nu vom avea probleme să deschidem atât sqstat cât și LightSquid, pentru acesta din urmă va trebui să inventăm un utilizator și o parolă, iar de asemenea există posibilitatea de a alege designul.
Încheiere
pfSense este un instrument foarte puternic, care poate face foarte multe — atât pentru proxy-ing traficului, cât și pentru controlul accesului utilizatorilor la internet, aceasta este doar o mică parte din funcționalitatea sa; însă, într-o companie cu 500 de mașini, aceasta a rezolvat problema și a permis economisirea la achiziția unui server proxy.
Sper că acest articol va ajuta pe cineva să rezolve o problemă destul de actuală pentru companiile medii și mari.
Sursa: habr.com
