
pfSense+Squid HTTPS szűréssel + Egységes bejelentkezési technológia (SSO) Active Directory csoportok szerinti szűréssel
Rövid háttér
A vállalatnál felmerült a szükséglet, hogy proxy szervert vezessenek be, amely képes a weboldalakhoz (beleértve a HTTPS-t is) való hozzáférést Active Directory csoportok szerint szűrni, hogy a felhasználóknak ne kelljen további jelszavakat beírniuk, és az adminisztráció webes felületről végezhető legyen. Nem rossz igény, igaz?
A helyes válasz az lenne, hogy olyan megoldásokat vásárolunk, mint a Kerio Control vagy a UserGate, de mint mindig, pénz nincs, a szükséglet viszont adott.
Itt jön a segítségünkre a régi jó Squid, de ismét csak — hol találunk webes felületet? SAMS2? Morálisan elavult. Itt jön a segítségünkre a pfSense.
Leírás
A cikkben a Squid proxy szerver beállításának módját írjuk le.
A felhasználók azonosításához Kerberos-t fogunk használni.
A domain csoportok szerinti szűréshez a SquidGuard-t fogjuk használni.
A monitorozáshoz a Lightsquid, sqstat és a pfSense belső monitorozási rendszerei fognak szolgálni.
A gyakori problémát is megoldjuk, amely az egységes bejelentkezési technológia (SSO) bevezetésével kapcsolatos, nevezetesen azt, hogy az alkalmazások a saját rendszerfelhasználónkkal próbálnak internetre csatlakozni.
Előkészületek a Squid telepítéséhez
Alapként a pfSense-t fogjuk használni, Telepítési útmutató.
Amelyben megszervezzük az azonosítást a tűzfalhoz domain fiókokkal. Útmutató.
Nagyon fontos!
A Squid telepítése előtt be kell állítani a DNS-t a szerver a pfSense-ben, A és PTR rekordokat létrehozni a DNS szerverünkön, és az NTP-t úgy beállítani, hogy az idő ne térjen el a domain vezérlőn lévő időtől.
A hálózatban pedig lehetővé kell tenni, hogy a pfSense WAN interfész csatlakozzon az internethez, míg a helyi hálózat felhasználói csatlakozhassanak a LAN interfészhez, beleértve a 7445-ös és 3128-as portot (az én esetemben 8080).
Minden készen áll? A domain LDAP kapcsolata a pfSense-zel létrejött, és az idő szinkronizált? Kiváló. Itt az ideje, hogy nekiálljunk a fő folyamatnak.
Telepítés és előzetes beállítás
A Squid, SquidGuard és LightSquid telepítése a pfSense csomagkezelőjéből, a 'Rendszer/Csomagkezelő' szakaszban fog megtörténni.
A sikeres telepítést követően lépjünk a «Szolgáltatások/Squid Proxy szerver/» részre, és először a Helyi gyorsítótár fülön állítsuk be a gyorsítást, én minden értéket 0-ra állítottam, mivel nem látom értelmét a weboldalak gyorsításának, ezt a böngészők is remekül végzik. A beállítások után nyomjuk meg a «Mentés» gombot a képernyő alján, ez lehetővé teszi, hogy elvégezzük a proxy alapbeállításait.
A fő beállításokat a következőképpen hozzuk létre:

Az alapértelmezett port 3128, de én inkább a 8080-at használom.
A Proxy Interface fülön kiválasztott paraméterek határozzák meg, hogy mely interfészeket figyel a proxy. szerverMivel ez a tűzfal úgy van felépítve, hogy az internetet a WAN interfészen keresztül figyeli, még akkor is, ha a LAN és WAN azonos helyi alhálózatban lehet, javaslom, hogy a proxy-hoz mindenképpen a LAN-t használjuk.
A loopback a sqstat működéséhez szükséges.
Alább találja az Áttetsző (Transparent) proxy beállításait, valamint az SSL szűrőt, de ezekre nincs szükségünk, a proxy-nk áttetsző nem lesz, az https szűréséhez nem fogunk tanúsítványt cserélni (hiszen itt dokumentumforgalom, bankkliensek stb. is vannak), csak az ügyletet nézzük.
Ezen a lépésnél szükség van arra, hogy átlépjünk a tartományvezérlőnkre, ahol létrehozunk egy hitelesítési fiókot (azt a fiókot is használhatjuk, amelyet a pfSense hitelesítésére állítottunk be). Itt nagyon fontos tényező az, hogy ha AES128 vagy AES256 titkosítást szeretne használni, akkor jelölje be a megfelelő opciókat a fiók beállításaiban.
Ha a tartománya egy bonyolult erdőt képvisel sok mappával, vagy ha a tartománya .local, akkor LEHETSÉGES, de nem biztos, hogy egyszerű jelszót kell használnia ehhez a fiókhoz, ez egy ismert hiba, de egy bonyolult jelszó egyszerűen nem működhet, ezt a konkrét eset alapján érdemes ellenőrizni.

Ezután generáljuk le a kulcsfájlt a Kerberoshoz, a tartományvezérlőn nyissunk meg egy parancssort adminisztrátori jogokkal, és írjuk be:
# 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.keytabItt adjuk meg a saját FQDN pfSense-ünket, figyeljünk a kis- és nagybetűk használatára, a mapuser paraméterhez írjuk be a domain fiókunkat és annak jelszavát, a crypto mezőhöz válasszuk ki a titkosítási módot, én az rc4-et használtam, és a -out mezőnél válasszuk ki, hová küldjük a kész kulcsfájlt.
A sikeres kulcsfájl létrehozása után elküldjük azt a pfSense-ünknek, én a Far-t használtam ehhez, de ezt meg lehet csinálni parancsokkal, putty-val vagy a pfSense webes felületén a „Diagnosztika > Parancssor” szakaszban is.
Most szerkeszthetjük vagy létrehozhatjuk a /etc/krb5.conf fájlt.

ahol a /etc/krb5.keytab az általunk létrehozott kulcsfájl.
Kötelező ellenőrizni a Kerberos működését a kinit segítségével, ha nem működik — akkor nincs értelme tovább olvasni.
Squid hitelesítési és hitelesítés nélküli hozzáférési lista beállítása
A Kerberos sikeres beállítása után csatlakoztatjuk azt a Squid-hez.
Ehhez menj a Szolgáltatások > Squid Proxy Server részhez, és az alapbeállításokban lépj a legaljára, ott találod a „Speciális beállítások” gombot.
A Custom Options (Before Auth) mezőbe írjuk be:
#Хелперы
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 authüde auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth — kiválasztja a szükséges Kerberos hitelesítési segédprogramot.
Kulcs -s a következő értékkel GSS_C_NO_NAME — meghatározza, hogy bármelyik fiókot használni kell a kulcsfájlban.
Kulcs -k a következő értékkel /usr/local/etc/squid/squid.keytab — meghatározza, hogy pontosan ezt a keytab fájlt használjuk. Az én esetemben ez az a keytab fájl, amelyet átkonvertáltam a /usr/local/etc/squid/ könyvtárba, és átneveztem, mert a Squid nem akart együttműködni a régi könyvtárral, valószínűleg, mert nem volt elég jogom.
Kulcs - folyamatosan „pingelni” (a leállításhoz nyomjuk meg a Ctrl+C kombinációt) a következő értékkel -t none — letiltja a ciklikus kéréseket a tartományvezérlőhöz, ami jelentősen csökkenti a terhelést, ha több mint 50 felhasználód van.
A tesztidőszak alatt a -d kapcsolót is hozzáadhatjuk — ezáltal diagnosztikai információkat kapunk, több napló fog megjelenni.
auth_param negotiate children 1000 — meghatározza, hány egyidejű hitelesítési folyamatot lehet futtatni
auth_param negotiate keep_alive on — nem engedi megszakadni a kapcsolatot a hitelesítési lánc lekérdezése közben
acl auth proxy_auth REQUIRED — létrehozza és megköveteli a hozzáférési vezérlő listát, amely tartalmazza a hitelesítést megszerzett felhasználókat
acl nonauth dstdomain „/etc/squid/nonauth.txt” — tájékoztatjuk a Squid-et a nonauth hozzáférési lista létezéséről, amely tartalmazza azokat a cél domain neveket, amelyekhez mindig engedélyezett a hozzáférés mindenkinek. A fájlt létrehozzuk, belül pedig a domain neveket a következő formátumban írjuk be:
.whatsapp.com
.whatsapp.netA WhatsApp nem véletlenül van példaként említve — nagyon érzékeny a hitelesítéssel rendelkező proxykra, és nem fog működni, ha nem engedélyezik a hitelesítés előtt.
http_access allow nonauth — engedjük meg a hozzáférést a listához mindenkinek
http_access deny !auth — megtagadjuk a hozzáférést a nem hitelesített felhasználóknak a többi webhelyhez
http_access allow auth — engedélyezzük a hozzáférést az azonosított felhasználók számára.
Most, hogy a Squid be van állítva, itt az idő, hogy elkezdjük a csoportok szerinti szűrést.
SquidGuard beállítása
Lépjünk a Szolgáltatások SquidGuard Proxy Szűrőhöz.
Az LDAP beállításokban adjuk meg azokat az adatokat, amelyeket a Kerberos hitelesítéshez használnak, de a következő formátumban:
CN=pfsense,OU=service-accounts,DC=domain,DC=localHa szóközök vagy nem latin karakterek vannak, akkor ezt az egész bejegyzést egyetlen vagy dupla idézőjelbe kell zárni:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"Ezután kötelező megjelölni ezeket a négyzeteket:
![]()
A nem kívánt DOMAINpfsense levágásához DOMAIN.LOCAL, amelyre a rendszer nagyon érzékeny.
Most lépjünk a Csoport ACL-be, és kapcsoljuk össze a domain hozzáférési csoportjainkat, én egyszerű neveket használok, mint group_0, group_1 és így tovább 3-ig, ahol a 3 csak a fehérlistás hozzáférést jelenti, míg a 0 minden engedélyezett.
A csoportokat a következőképpen kapcsoljuk össze:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0OU=squidOU=service-groupsDC=DOMAINDC=LOCAL))Mentjük a csoportunkat, átlépünk az Időszakokba, ahol létrehoztam egy időintervallumot, ami mindig érvényes, majd lépjünk a Célkategóriákhoz, és hozzunk létre listákat saját tetszésünk szerint. A listák létrehozása után térjünk vissza a csoportjainkhoz, és a csoporton belül gombokkal válasszuk ki, ki hová mehet és ki hová nem.
LightSquid és sqstat
Ha a beállítások során loopback-et választottunk a Squid beállításaiban, és engedélyeztük a 7445-ös port elérését a tűzfalban mind a saját hálózatunkban, mind a pfSense-en, akkor a Diagnosztika Squid Proxy Jelentésekhez lépve problémamentesen nyithatjuk meg mind a sqstat-ot, mind a LightSquid-t. Az utóbbihoz ott is ki kell találni egy felhasználónevet és jelszót, és van lehetőség a megjelenés kiválasztására is.
Befejezés
A pfSense egy nagyon erős eszköz, amely rengeteg mindent tud — a forgalom proxizálásától kezdve a felhasználói hozzáférés ellenőrzéséig az interneten, ez csak egy kis részét jelenti a funkcionalitásának; ennek ellenére egy 500 gépből álló vállalatnál megoldotta a problémát és lehetővé tette, hogy spóroljunk a proxy vásárlásával.
Remélem, hogy ez a cikk segít valakinek megoldani egy elég aktuális feladatot a közepes és nagyvállalatok számára.
Forrás: habr.com
