
pfSense+Squid s filtrací https + Technologie jednotného přihlášení (SSO) s filtrováním podle skupin Active Directory
Krátký přehled
V podniku vznikla potřeba implementovat proxy server s možností filtrování přístupu na weby (včetně https) podle skupin z AD, aby uživatelé nemuseli zadávat žádné další hesla a administrace byla možná pomocí webového rozhraní. Není to špatný požadavek, že?
Správnou odpovědí by bylo zakoupit řešení jako Kerio Control nebo UserGate, ale jako vždy peníze chybí, zatímco potřeba existuje.
Tady přichází na pomoc starý dobrý Squid, ale opět — kde vzít webové rozhraní? SAMS2? Morálně zastaralé. A tak přichází na pomoc pfSense.
Popis
V tomto článku bude popsán způsob nastavení proxy serveru Squid.
Pro autorizaci uživatelů bude použit Kerberos.
Pro filtrování podle doménových skupin bude použit SquidGuard.
Pro monitoring bude použit Lightsquid, sqstat a interní monitorovací systémy pfSense.
Také bude vyřešen častý problém spojený s implementací technologie jednotného přihlášení (SSO), a to aplikace, které se snaží přistupovat k Internetu pod účtem svého systému.
Příprava na instalaci Squid
Základem bude pfSense, Instrukce k instalaci.
Uvnitř vytvoříme autentizaci na samotném firewallu pomocí doménových účtů. Instrukce.
Velmi důležité!
Před zahájením instalace Squid je nutné nastavit DNS serveru v pfSense, vytvořit pro něj záznam A a PTR záznamy na našem DNS serveru a nastavit NTP tak, aby čas nesouhlasil s časem na řídicím serveru domény.
A ve vaší síti poskytnout rozhraní WAN pfSense možnost přístupu na Internet, a uživatelům v místní síti umožnit připojení na LAN rozhraní, včetně portů 7445 a 3128 (v mém případě 8080).
Je všechno připraveno? Je zajištěna komunikace s doménou přes LDAP pro autorizaci na pfSense a čas je synchronizován? Skvělé. Je čas začít s hlavním procesem.
Instalace a předběžné nastavení
Squid, SquidGuard a LightSquid nainstalujeme z balíčkového manažera pfSense v sekci „Systém / Správce balíčků“.
Po úspěšné instalaci přejdeme do "Služby/Squid Proxy server/" a především na záložce Místní cache nastavíme ukládání do cache; nastavil jsem vše na 0, protože nevidím velký smysl v cachování stránek, s tím si prohlížeče poradí skvěle. Po nastavení stiskneme tlačítko "Uložit" ve spodní části obrazovky, což nám umožní provést základní nastavení proxy.
Základní nastavení převedeme do následující podoby:

Výchozí port je 3128, ale já preferuji používat 8080.
Vybrané parametry na záložce Proxy Interface určují, které rozhraní bude náš proxy naslouchat. server. Vzhledem k tomu, že tato firewall je postavena tak, že do internetu se dívá přes WAN rozhraní, i když LAN a WAN mohou být v jedné lokální podsíti, doporučuji pro proxy použít právě LAN.
Loopback je potřeba pro fungování sqstat.
Níže naleznete nastavení Transparentního (průhledného) proxy a také SSL filtru, ale ty nepotřebujeme, naše proxy nebude průhledná a pro filtrování https se nebudeme zabývat výměnou certifikátu (vždyť máme dokumentaci, banky a klienty atd.), ale prostě se podíváme na handshake.
V této fázi je potřeba přejít na náš doménový řadič a vytvořit v něm účet pro autentizaci (můžete použít i ten, který jste nastavili pro autentizaci na samotném pfSense). Je zde velmi důležitý faktor — pokud zamýšlíte použít šifrování AES128 nebo AES256 — zaškrtněte odpovídající políčka v nastavení účtu.
Pokud je vaše doména velmi složitý les s velkým množstvím adresářů nebo je vaše doména .local, pak MOŽNÁ, ale ne jistě, budete muset pro tento účet použít jednoduché heslo; je to známá chyba, ale se složitým heslem to může prostě nefungovat, je třeba to ověřit v konkrétním případě.

Po všem tom vytvoříme soubor klíčů pro Kerberos; na doménovém řadiči otevřeme příkazový řádek s administrátorskými právy a zadáme:
# 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.keytabKde uvedeme svůj FQDN pfSense, nutně dodržujeme velikost písmen; do parametru mapuser zadejte náš doménový účet a jeho heslo, a v crypto vyberte způsob šifrování; já použil rc4 pro práci a v poli -out vyberte, kam odešleme náš hotový soubor klíčů.
Po úspěšném vytvoření souboru klíčů jej odešleme na náš pfSense. Použil jsem k tomu Far, ale toto lze provést také pomocí příkazů, putty nebo prostřednictvím webového rozhraní pfSense v sekci „Diagnostika - Příkazový řádek“.
Nyní můžeme upravit vytvořit /etc/krb5.conf

kde /etc/krb5.keytab je námi vytvořený soubor klíčů.
Nezapomeňte zkontrolovat funkčnost Kerberosu pomocí kinit, pokud to nefunguje, nemá smysl číst dál.
Nastavení autentizace Squid a seznamu přístupu bez autentizace
Úspěšně nakonfigurujeme Kerberos a propojujeme ho s naším Squidem.
K tomu přejděte na Služby - Squid Proxy Server a v hlavních nastaveních přejděte až dolů, kde najdete tlačítko „Pokročilé možnosti“.
Do pole Custom Options (Before Auth) vložte:
#Хелперы
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ďe auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth — vybírá potřebného helpera pro Kerberos autentizaci.
Klíč -s s hodnotou GSS_C_NO_NAME — určuje použití libovolného účtu ze souboru klíčů.
Klíč -k s hodnotou /usr/local/etc/squid/squid.keytab — určuje použití tohoto konkrétního keytab souboru. V mém případě je to ten stejný vytvořený keytab soubor, který jsem zkopíroval do adresáře /usr/local/etc/squid/ a přejmenoval, protože s tímto adresářem Squid nechtěl spolupracovat, zřejmě jsem neměl dostatečná práva.
Klíč -t s hodnotou -t none — vypíná cyklické dotazy na řídicí server domény, což významně snižuje zátěž, pokud máte více než 50 uživatelů.
Na dobu testu lze také přidat klíč -d — tedy diagnostiku, zobrazí se více protokolů.
auth_param negotiate children 1000 — určuje, kolik současných procesů autorizace může být spuštěno.
auth_param negotiate keep_alive on — neumožňuje přerušení spojení během dotazování na autorizaci.
acl auth proxy_auth REQUIRED — vytváří a vyžaduje seznam kontrolního přístupu zahrnujícího uživatele, kteří prošli autorizací.
acl nonauth dstdomain "/etc/squid/nonauth.txt" — informuje Squid o nonauth seznamu přístupu, v němž jsou zahrnuty cílové domény, ke kterým bude vždy povolen přístup všem. Soubor vytvoříme a uvnitř napíšeme domény ve formátu
.whatsapp.com
.whatsapp.netWhatsApp není náhodou použit jako příklad — je velmi vybíravý co se týče proxy s autentizací a nebude fungovat, pokud ho před autentizací nedovolíme.
http_access allow nonauth — povolujeme přístup k tomuto seznamu všem.
http_access deny !auth — zakazujeme přístup neautorizovaným uživatelům k ostatním webům.
http_access allow auth — povolujeme přístup autorizovaným uživatelům.
Všechno, Squid je u vás nastaven, teď je čas začít s filtrováním podle skupin.
Nastavení SquidGuard
Přejdeme na Služby SquidGuard Proxy Filter.
Do LDAP Options zadáváme údaje našeho účtu, který se používá pro Kerberos autentizaci, ale v následujícím formátu:
CN=pfsense,OU=service-accounts,DC=domain,DC=localPokud jsou mezery a/nebo nelatinské znaky, je dobré zapsat tuto hodnotu do jednoduchých nebo dvojitých uvozovek:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"Dále je nutné zaškrtnout tyto možnosti:
![]()
Abychom odstranili nepotřebné DOMAINpfsense DOMAIN.LOCAL, na které je celý systém velmi citlivý.
Nyní přecházíme na Group Acl a přiřazujeme naše doménové přístupové skupiny, používám jednoduché názvy jako group_0, group_1 atd. až do 3, kde 3 — přístup pouze do povoleného seznamu, a 0 — vše je povoleno.
Skupiny se přiřazují následujícím způsobem:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0OU=squidOU=service-groupsDC=DOMAINDC=LOCAL))Uložíme naši skupinu, přejdeme do Times, kde jsem vytvořil jeden časový interval, který znamená, že může fungovat neustále, nyní přejdeme do Target Categories a vytvoříme seznamy podle vlastního uvážení, po vytvoření seznamů se vrátíme k našim skupinám a uvnitř skupiny tlačítky vybereme, kdo má kam přístup a kdo ne.
LightSquid a sqstat
Pokud jsme během nastavení zvolili loopback v nastavení Squidu a otevřeli možnost přístupu na port 7445 ve firewallu jak v naší síti, tak na samotném pfSense, při přechodu do Diagnostika Squid Proxy Reports budeme bez problémů moci otevřít jak sqstat, tak Lightsquid, pro poslední je potřeba tamtéž vymyslet přihlašovací jméno a heslo, stejně je možné vybrat rozvržení.
Závěr
pfSense je velmi mocný nástroj, který toho umí opravdu hodně — proxy traffic a kontrola přístupu uživatelů na internet je jen špička celého funkcionálu, přesto to v podniku s 500 stroji vyřešilo problém a umožnilo ušetřit na nákupu proxy.
Doufám, že tento článek pomůže někomu vyřešit poměrně aktuální úkol pro střední a velké podniky.
Zdroj: habr.com
