
pfSense+Squid med HTTPS-filtrering + Single Sign-On (SSO) teknologi med filtrering efter Active Directory-grupper
Kort baggrund
Virksomheden havde behov for at implementere en proxyserver med mulighed for at filtrere adgang til websteder (herunder HTTPS) efter grupper i AD, så brugerne ikke skulle indtaste nogen ekstra adgangskoder, og administrationen kunne ske via webgrænsefladen. Ikke en dårlig forespørgsel, vel?
En korrekt løsning ville være at købe løsninger som Kerio Control eller UserGate, men ligesom altid, er pengene knappe, og behovet er der.
Her kommer den gamle, gode Squid til undsætning, men igen – hvor finder vi en webgrænseflade? SAMS2? Det er forældet. Her kommer pfSense til hjælp.
Description
I denne artikel vil måden at konfigurere proxyserveren Squid blive beskrevet.
Kerberos vil blive brugt til brugerautorisering.
SquidGuard vil blive anvendt til filtrering efter domænegrupper.
Lightsquid, sqstat og interne overvågningssystemer fra pfSense vil blive brugt til overvågning.
Der vil også blive løst et almindeligt problem relateret til implementeringen af teknologien for enkelt login (SSO), nemlig applikationer, der forsøger at få adgang til internettet med den systembrugerkonto, de har.
Forberedelse til installation af Squid
Vi tager udgangspunkt i pfSense, Installationsvejledning.
Hvor vi organiserer autentifikation på selve firewallen ved hjælp af domænekonti. Vejledning.
Meget vigtigt!
Før installationen af Squid skal DNS server i pfSense konfigureres, og der skal laves en A- og PTR-post på vores DNS-server samt konfigureres NTP, så tiden ikke afviger fra tiden på domænekontrolleren.
Og i dit netværk skal WAN-interfacet på pfSense have adgang til internettet, mens brugerne i det lokale netværk kan tilsluttes LAN-interfacet, herunder portene 7445 og 3128 (i mit tilfælde 8080).
Er alt klar? Er forbindelsen til domænet via LDAP for autorisation på pfSense etableret, og er tiden synkroniseret? Fremragende. Det er tid til at gå i gang med hovedprocessen.
Installation og forberedende konfiguration
Vi vil installere Squid, SquidGuard og LightSquid fra pakkehåndtereren i pfSense under "System/Pakkemanager".
Når installationen er fuldført, går vi til «Tjenester/Squid Proxy server/» og konfigurerer først cache-indstillingerne under fanen Local Cache. Jeg satte alle værdier til 0, da jeg ikke ser nogen særlig mening i at cache websider, det klarer browsere fint. Efter konfigurationen trykker vi på «Gem» nederst på skærmen, og det giver os mulighed for at foretage de primære proxyindstillinger.
De grundlæggende indstillinger justeres til følgende:

Standardporten er 3128, men jeg foretrækker at bruge 8080.
De valgte parametre under fanen Proxy Interface bestemmer, hvilke interfaces vores proxy vil lytte på. server. Da denne firewall er konstrueret på en sådan måde, at den ser ud til internettet via WAN-interfacet, selvom LAN og WAN kan være i samme lokale subnet, anbefaler jeg at bruge LAN til proxyen.
Loopback er nødvendig for at få sqstat til at fungere.
Nedenfor finder du indstillingerne for Transparent (gennemsigtig) proxy, samt SSL-filter, men de er ikke nødvendige for os, da vores proxy ikke vil være gennemsigtig, og vi vil ikke håndtere udskiftning af certifikater (da vi har dokumenthåndtering, bank- og klientsystemer osv.), men blot observere håndtrykket.
På dette trin skal vi gå til vores domænecontroller og oprette en konto til autentificering (man kan også bruge den, der er opsat til autentificering på selve pfSense). Her er en meget vigtig faktor – hvis du planlægger at bruge AES128 eller AES256 kryptering, så sørg for at sætte de relevante markeringer i kontoinstillingerne.
Hvis dit domæne udgør et ret komplekst skov med mange kataloger eller dit domæne er .local, så MÅSKE, men ikke med sikkerhed, skal du bruge en simpel adgangskode til denne konto, en kendt bug, men med en kompleks adgangskode kan det bare ikke fungere, det skal testes i det specifikke tilfælde.

Efter dette skal vi generere en nøglefil til Kerberos. Åbn kommandoprompten som administrator på domænecontrolleren og indtast følgende:
# 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.keytabHvor vi angiver vores FQDN pfSense, husk at overholde store og små bogstaver, i parameteren mapuser indtaster vi vores domænekonto og dens adgangskode, og under crypto vælger vi krypteringsmetoden, jeg brugte rc4 til arbejdet og under -out vælger vi, hvor vi vil sende vores færdige nøglefil.
Efter vellykket oprettelse af nøglen vil vi sende den til vores pfSense. Jeg har brugt Far til dette, men det kan også gøres med kommandoer, putty eller via webgrænsefladen i pfSense under "DiagnoseKommandolinje".
Nu kan vi redigere eller oprette /etc/krb5.conf

hvor /etc/krb5.keytab er den nøglefil, vi har oprettet.
Sørg for at tjekke Kerberos' funktion med kinit; hvis det ikke virker, giver det ikke mening at læse videre.
Konfiguration af autentificering af Squid og adgangsliste uden autentificering
Når vi har konfigureret Kerberos, binder vi det til vores Squid.
For at gøre dette skal du gå til TjenesterSquid Proxy Server og i de grundlæggende indstillinger rulle ned til bunden, hvor vi finder knappen "Avancerede indstillinger".
I feltet Custom Options (Before Auth) indtaster vi:
#Хелперы
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 — vælger den nødvendige Kerberos autentificeringshelper.
Nøgle -s med værdien GSS_C_NO_NAME — definerer brugen af hvilken som helst konto fra nøglefilen.
Nøgle -k med værdien /usr/local/etc/squid/squid.keytab — definerer, at denne keytab-fil specifikt skal anvendes. I mit tilfælde er det den samme keytab-fil, som jeg kopierede til mappen /usr/local/etc/squid/ og omdøbte, fordi Squid ikke kunne finde ud af at arbejde med den mappe af en eller anden grund.
Nøgle -t med værdien -t none — deaktiverer cykliske forespørgsler til domænekontrolleren, hvilket kraftigt reducerer belastningen på den, hvis du har mere end 50 brugere.
Under testen kan du også tilføje nøglen -d — dvs. diagnosticering, flere logfiler vil blive genereret.
auth_param negotiate children 1000 — angiver hvor mange samtidige autentificeringsprocesser der kan køres
auth_param negotiate keep_alive on — forhindrer forbindelsen i at blive brudt under forespørgslen af autentificeringskæden
acl auth proxy_auth REQUIRED — opretter og kræver en adgangskontrol liste, der inkluderer brugere, der er blevet autentificeret
acl nonauth dstdomain "/etc/squid/nonauth.txt" — vi informerer Squid om nonauth adgangslisten, som indeholder måldomæner, der altid vil have tilladelse til adgang for alle. Filen oprettes af os, og vi skriver domæner ind i den i formatet
.whatsapp.com
.whatsapp.netWhatsapp bruges ikke for ingenting som eksempel — den er meget krævende i forhold til proxyer med autentificering og vil ikke fungere, hvis den ikke tillades før autentificering.
http_access allow nonauth — giver adgang til denne liste til alle
http_access deny !auth — nægter ikke-autentificerede brugere adgang til andre websteder
http_access allow auth — vi giver adgang til autoriserede brugere.
Nu er selve squid konfigureret, og det er tid til at begynde at filtrere efter grupper.
Konfiguration af SquidGuard
Gå til Tjenester > SquidGuard Proxy Filter.
I LDAP-indstillinger indtaster vi oplysningerne fra vores konto, der bruges til Kerberos autentificering, men i følgende format:
CN=pfsense,OU=service-accounts,DC=domain,DC=localHvis der er mellemrum eller ikke-latinske tegn, skal hele denne post placeres i enkelt- eller dobbelte citationstegn:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"Derefter skal vi sørge for at aktivere disse afkrydsningsfelter:
![]()
For at skære de unødvendige DOMAINpfsense DOMAIN.LOCAL, som hele systemet er meget følsomt overfor.
Nu går vi til Group Acl og knytter vores domæner til adgangsgrupperne, jeg bruger simple navne som group_0, group_1 osv. op til 3, hvor 3 kun har adgang til whitelist, mens 0 har adgang til alt.
Grupperne knyttes på følgende måde:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0OU=squidOU=service-groupsDC=DOMAINDC=LOCAL))Vi gemmer vores gruppe, går til Tider, hvor jeg har oprettet et interval, der betyder at arbejdet altid skal være aktivt. Nu går vi til Målkategorier og opretter lister efter eget valg. Efter oprettelse af listerne vender vi tilbage til vores grupper og inden i gruppen vælger vi, hvem der kan hvad.
LightSquid og sqstat
Hvis vi under opsætningen valgte loopback i squid-indstillingerne og åbnede mulighed for at tilgå port 7445 i firewallen, både i vores netværk og på selve pfSense, så kan vi uden problemer åbne både sqstat og Lighsquid under Diagnostik > Squid Proxy Reports. For sidstnævnte skal der oprettes et brugernavn og password, og der er også mulighed for at vælge layout.
Afslutning
pfSense er et meget kraftfuldt værktøj, der kan meget — både proxytrafik og kontrol over brugernes adgang til internettet er kun en brøkdel af dets funktioner. Ikke desto mindre løste det et problem i en virksomhed med 500 maskiner og gjorde det muligt at spare på indkøb af en proxy.
Jeg håber, at denne artikel vil hjælpe nogen med at løse en opgave, som er meget relevant for mellemstore og store virksomheder.
Kilde: habr.com
