
pfSense+Squid con filtraggio https + Tecnologia di accesso unico (SSO) con filtraggio per gruppi Active Directory
Breve introduzione
L'azienda ha avuto la necessità di implementare un proxy server con la possibilità di filtrare l'accesso ai siti (incluso https) per gruppi di AD, affinché gli utenti non dovessero immettere ulteriori password e l'amministrazione fosse possibile tramite un'interfaccia web. Non è male come proposta, vero?
La risposta corretta sarebbe stata acquistare soluzioni come Kerio Control o UserGate, ma come al solito non ci sono fondi, anche se c'è bisogno.
Ecco dove ci viene in aiuto il buon vecchio Squid, ma di nuovo — dove trovare l'interfaccia web? SAMS2? È moralmente obsoleto. Ecco dove interviene pfSense.
Descrizione
In questo articolo verrà descritto come configurare il proxy server Squid.
Per l'autenticazione degli utenti verrà utilizzato Kerberos.
Per il filtraggio per gruppi di dominio verrà utilizzato SquidGuard.
Per il monitoraggio verranno utilizzati Lightsquid, sqstat e i sistemi di monitoraggio interni di pfSense.
Sarà inoltre risolto un comune problema legato all'implementazione della tecnologia di accesso unico (SSO), ovvero le applicazioni che tentano di accedere a Internet con le proprie credenziali di sistema.
Preparazione all'installazione di Squid
Si prenderà come base pfSense, Istruzioni per l'installazione.
All'interno del quale organizzeremo l'autenticazione sul firewall stesso utilizzando le credenziali di dominio. Istruzioni.
Molto importante!
Prima di iniziare l'installazione di Squid è necessario configurare il DNS server in pfSense, creare un record A e un record PTR sul nostro server DNS e configurare l'NTP in modo che l'orario non diverga da quello del controller di dominio.
E nella vostra rete fornire l'accesso all'interfaccia WAN di pfSense per connettersi a Internet, e agli utenti nella rete locale di collegarsi all'interfaccia LAN, inclusi le porte 7445 e 3128 (nel mio caso 8080).
Tutto pronto? La connessione con il dominio via LDAP per l'autenticazione su pfSense è stata stabilita e l'orario è sincronizzato? Ottimo. È tempo di iniziare il processo principale.
Installazione e configurazione preliminare
Installeremo Squid, SquidGuard e LightSquid dal gestore pacchetti di pfSense nella sezione "Sistema/Manager pacchetti".
Dopo aver completato l'installazione, andiamo in «Servizi/Squid Proxy server/» e per prima cosa nella scheda Cache Locale impostiamo la cache; io ho impostato tutto a 0, poiché non vedo particolare senso nel memorizzare i siti, questo è compito dei browser. Dopo aver configurato, premiamo il pulsante «Salva» in fondo allo schermo, il che ci permetterà di effettuare le impostazioni principali del proxy.
Le impostazioni principali le portiamo alla seguente configurazione:

La porta predefinita è 3128, ma preferisco usare 8080.
Le opzioni selezionate nella scheda Interfaccia Proxy definiscono quali interfacce ascolterà il nostro proxy server. Poiché questo firewall è configurato in modo tale che vede internet tramite l'interfaccia WAN, anche se LAN e WAN possono trovarsi nella stessa sottorete locale, consiglio di utilizzare LAN per il proxy.
Il loopback è necessario per il funzionamento di sqstat.
Di seguito troverai le impostazioni del proxy Trasparente, nonché del Filtro SSL, ma non ci servono, il nostro proxy sarà non trasparente e per filtrare https non ci occuperemo della sostituzione del certificato (abbiamo infatti documenti, banche-clienti, ecc.), ma ci limiteremo a osservare l handshake.
A questo punto dobbiamo accedere al nostro controller di dominio, creare un account per l'autenticazione (puoi utilizzare anche quello impostato per l'autenticazione su pfSense). Qui è fondamentale un fattore: se intendi utilizzare la crittografia AES128 o AES256, assicurati di spuntare le caselle appropriate nelle impostazioni dell'account.
Se il tuo dominio è un bosco piuttosto complesso con un gran numero di cataloghi o il tuo dominio è .local, allora POTREBBE, ma non è certo, che dovrai utilizzare una password semplice per questo account; è un bug noto, ma con una password complessa potrebbe semplicemente non funzionare, è meglio verificarlo caso per caso.

Dopo tutto questo, generiamo il file delle chiavi per Kerberos; sul controller di dominio apriamo il prompt dei comandi con diritti di amministratore e digitiamo:
# 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.keytabDove indichiamo il nostro FQDN pfSense, facendo attenzione al maiuscolo, nel parametro mapuser inseriamo il nostro account di dominio e la relativa password, mentre in crypto scegliamo il metodo di crittografia; io ho utilizzato rc4 per il funzionamento e nel campo -out scegliamo dove inviare il file chiave pronto.
Dopo aver creato con successo il file delle chiavi, lo invieremo al nostro pfSense. Ho usato Far per questo, ma è possibile farlo anche tramite comandi, putty o attraverso l'interfaccia web di pfSense nella sezione «Diagnostica → Riga di comando».
Ora possiamo modificare/create /etc/krb5.conf

dove /etc/krb5.keytab è il file delle chiavi che abbiamo creato.
Assicurati di verificare il funzionamento di Kerberos con kinit; se non funziona, non ha senso continuare a leggere.
Configurazione dell'autenticazione Squid e lista di accesso senza autenticazione
Dopo aver configurato correttamente Kerberos, lo collegheremo al nostro Squid.
Per fare ciò, vai su Servizi → Squid Proxy Server e nelle impostazioni principali scorri fino in fondo, dove troverai il pulsante «Impostazioni avanzate».
Nel campo Opzioni personalizzate (Prima dell'autenticazione) inseriamo:
#Хелперы
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 — seleziona l'helper Kerberos di autenticazione necessario.
Chiave -s con valore GSS_C_NO_NAME — definisce l'uso di qualsiasi account dal file delle chiavi.
Chiave -k con valore /usr/local/etc/squid/squid.keytab — specifica di utilizzare esattamente questo file keytab. Nel mio caso, è lo stesso file keytab che abbiamo creato, che ho copiato nella directory /usr/local/etc/squid/ e rinominato, perché Squid non voleva collaborare con quella directory, probabilmente a causa di privilegi insufficienti.
Chiave -t con valore -t none — disabilita le richieste cicliche al controller di dominio, il che riduce notevolmente il carico su di esso se avete più di 50 utenti.
Per il periodo di test, è possibile aggiungere anche la chiave -d — cioè diagnostica, verranno visualizzati ulteriori log.
auth_param negotiate children 1000 — definisce quanti processi di autorizzazione simultanei possono essere avviati
auth_param negotiate keep_alive on — evita disconnessioni durante le indagini della catena di autorizzazione
acl auth proxy_auth REQUIRED — crea e richiede una lista di controllo accessi che include gli utenti che hanno superato l'autenticazione
acl nonauth dstdomain «/etc/squid/nonauth.txt» — informiamo Squid sulla lista di accesso nonauth contenente i domini di destinazione, a cui tutti avranno sempre accesso. Creiamo noi il file e scriviamo al suo interno i domini nel formato
.whatsapp.com
.whatsapp.netWhatsapp non è usato come esempio a caso — è molto esigente nei confronti dei proxy con autenticazione e non funzionerà se non viene autorizzato prima dell'autenticazione.
http_access allow nonauth — autorizziamo l'accesso a tale lista a tutti
http_access deny !auth — vietiamo l'accesso agli utenti non autorizzati agli altri siti
http_access consenti auth — consentiamo l'accesso agli utenti autorizzati.
Tutto, il tuo squido è impostato, ora è il momento di iniziare a filtrare per gruppi.
Configurazione di SquidGuard
Passiamo a Servizi SquidGuard Proxy Filter.
Nelle Opzioni LDAP inseriamo i dati del nostro account utilizzato per l'autenticazione Kerberos, nel seguente formato:
CN=pfsense,OU=service-accounts,DC=domain,DC=localSe ci sono spazi o caratteri non latini, tutta questa registrazione deve essere racchiusa tra virgolette singole o doppie:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"Successivamente, dobbiamo spuntare queste caselle:
![]()
Per tagliare i DOMAINpfsense non necessari DOMAIN.LOCAL a cui l'intero sistema è molto sensibile.
Ora passiamo a Group Acl e colleghiamo i nostri gruppi di accesso di dominio; uso nomi semplici come group_0, group_1, ecc. fino a 3, dove 3 significa accesso solo in lista bianca e 0 significa accesso completo.
I gruppi vengono collegati nel seguente modo:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0OU=squidOU=service-groupsDC=DOMAINDC=LOCAL))salviamo il nostro gruppo, passiamo a Times, dove ho creato un intervallo che significa lavorare sempre. Ora passiamo a Categorie di Target e creiamo liste a nostra discrezione. Dopo aver creato le liste, torniamo ai nostri gruppi e all'interno del gruppo scegliamo chi può andare dove e chi no.
LightSquid e sqstat
Se durante la configurazione abbiamo scelto il loopback nelle impostazioni di Squid e abbiamo aperto la possibilità di accedere a 7445 nel firewall sia nella nostra rete sia su pfSense, allora passando a Diagnostica Squid Proxy Reports non avremo problemi ad aprire sia sqstat che Lighsquid; per quest'ultimo sarà necessario inventare un username e una password e c'è anche la possibilità di scegliere lo stile.
Conclusione
pfSense è uno strumento molto potente che può fare molte cose: dal proxying del traffico al controllo dell'accesso degli utenti a internet, è solo un assaggio delle funzionalità. Tuttavia, in un'azienda con 500 macchine, ha risolto il problema e ha consentito di risparmiare sull'acquisto di proxy.
Spero che questo articolo possa aiutare qualcuno a risolvere una questione piuttosto attuale per le medie e grandi imprese.
Fonte: habr.com
