
pfSense+Squid ilə HTTPS filtrasiya + Tək giriş texnologiyası (SSO) ilə Active Directory qrupları üzrə filtrasiya
Qısa tarixçəsi
Şirkətdə AD qruplarından istifadə edərək (o cümlədən https) saytlar üzrə girişin filtrasiya edilməsi üçün proxy-serverin tətbiqinə ehtiyac yarandı ki, istifadəçilər əlavə parol daxil etməyərək, idarə etməni veb interfeysdən həyata keçirə bilsinlər. Nəhayət, gözəl bir şərait, düzdür?
Doğru cavab Kerio Control və ya UserGate kimi həllərin alınması olardı, lakin həmişə olduğu kimi pul yoxdur, ancaq ehtiyac var.
Burada köməyimizə köhnə yaxşı Squid gəlir, amma yenə də — veb interfeysini hardan tapmaq olar? SAMS2? Moral olaraq köhnəlib. Burada pfSense köməyimizə gəlir.
Təsvir
Bu məqalədə Squid proxy-serverinin konfiqurasiyası yolu təsvir ediləcək.
İstifadəçilərin autentifikasiyası üçün Kerberos istifadə ediləcək.
Domendən qruplar üzrə filtrasiya üçün SquidGuard istifadə ediləcək.
Monitorinq üçün Lightsquid, sqstat və pfSense-in daxili monitorinq sistemləri istifadə olunacaq.
Eyni zamanda, tək giriş (SSO) texnologiyası tətbiqindən irəli gələn tez-tez rast gəlinən bir problemi həll ediləcək, yəni sistemin öz hesabı ilə internetə çıxmağa çalışan tətbiqlər.
Squid-in quraşdırılmasına hazırlıq
Məsələn pfSense əsasında olacaq, Quraşdırma təlimatı.
Onun daxilində biz pərdələrə (firewall) domen hesabları ilə autentifikasiyanı təşkil edəcəyik. Təlimat.
Çox vacibdir!
Squid-i quraşdırmadan əvvəl DNS-i pfSense-də konfiqurasiya etmək server A qeydini və PTR qeydini bizim DNS serverimizdə yaratmaq və NTP-ni konfiqurasiya etməkdir ki, vaxt domain kontrolerinin vaxtından fərqlənməsin.
Sizin şəbəkədə pfSense-in WAN interfeysinin internetə çıxması və istifadəçilərin LAN interfeysinə qoşulması, o cümlədən 7445 və 3128 (mənim halda 8080) portları vasitəsilə mümkündür.
Hər şey hazırdır? Domena LDAP ilə əlaqə pfSense-də qurulub və vaxt sinxronlaşdırılıb? Əla. İndi əsas prosesi başlamaq vaxtıdır.
Quraşdırma və ilkin konfiqurasiya
Squid, SquidGuard və LightSquid-i pfSense paket menecerindən «Sistem/Paket meneceri» bölməsindən quraşdıracağıq.
Uğurlu quraşdırmadan sonra «Xidmətlər / Squid Proxy server /» bölməsinə keçirik və ilk növbədə Local Cache sekmesinde keşi tənzimləyirik, mən hər şeyi 0 olaraq təyin etdim, çünki veb saytlarının keşi yığmaqda xüsusi bir mənası görmürəm, bu tapşırığı brauzerlər çox yaxşı yerinə yetirir. Tənzimləmədən sonra ekranın aşağısında «Saxla» düyməsini basırıq və bu, bizə proksi üçün əsas tənzimləmələri həyata keçirmək imkanı verəcək.
Əsas tənzimləmələri aşağıdakı şəkildə təqdim edirik:

Varsayılan port 3128-dir, amma mən 8080 istifadə etməyi üstün tuturam.
Proxy Interface sekmesində seçilmiş parametrlər proksimizin hansı interfeisləri dinləyəcəyini müəyyən edir. server. Bu firewall internetə WAN interfeysi ilə baxdığı üçün, LAN və WAN eyni yerli şəbəkədə olsa belə, proksi üçün LAN istifadə etməyi tövsiyə edirəm.
Loopback sqstat-ın işləməsi üçün lazımdır.
Aşağıda sizi Şəffaf (Transparent) proksi tənzimləmələri və SSL Filter ilə tanış edəcəyik, amma onlara ehtiyacımız yoxdur, proksimiz şəffaf olmayacaq və HTTPS filtrasyonunda sertifikat dəyişdirmə ilə məşğul olmayacağıq (axı biz sənəd dövriyyəsi, bank-müştərilər və s. ilə məşğuluq), sadəcə əl sıxılması göstəriləcək.
Bu mərhələdə domen kontrolçümüzə keçməliyik, orada autentifikasiya üçün hesab yaratmalıyıq (pfSense-də autentifikasiya üçün tənzimlədiyimiz hesabdan da istifadə edə bilərik). Burada çox vacib bir amil var – əgər AES128 və ya AES256 şifrələməsi istifadə etməyi planlaşdırıyorsanız, hesab tənzimləmələrində müvafiq seçimləri işarələyin.
Əgər sizin domeniniz olduqca mürəkkəb bir meşədirsə və çox sayda qovluq varsa və ya domeniniz .local-dırsa, OLA BİLƏR, lakin dəqiq deyil, bu hesab üçün sadə bir şifrə istifadə etməli olacaqsınız, bu bir problem olaraq məlumdur, lakin mürəkkəb şifrə ilə işləməyə bilər, konkret bir halda yoxlamaq lazımdır.

Bundan sonra Kerberos üçün açar faylını hazırlayırıq, domen kontrolçüsündə administrator hüquqları ilə komanda xəttini açırıq və daxil edirik:
# 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.keytabBurada öz FQDN pfSense-nizi göstəririk, böyük-küçük hərfləri mütləq qoruyuruq, mapuser parametrində domen hesabımızı və onun şifrəsini daxil edirik, crypto parametrində şifrələmə üsulunu seçirik, mən iş üçün rc4-dən istifadə etdim və -out sahəsində hazır açar faylımızı hara göndərəcəyimizi seçirik.
Açar faylını uğurla yaratdıqdan sonra, onu bizim pfSense-ə göndərəcəyik. Bunun üçün Far-dan istifadə etdim, amma bunu həmçinin komandalarla, həm də putty ilə ya da pfSense-in «Diaqnostika - Komanda xətti» bölməsində web interfeysi vasitəsilə etmək olar.
İndi biz /etc/krb5.conf faylını redaktə edə bilərik/yeni yarada bilərik.

burada /etc/krb5.keytab bizim yaratdığımız açar faylıdır.
Kerberos-un işlədiyinə əmin olmaq üçün kinit ilə yoxlayın, əgər işləmirsə, daha sonra oxumağın mənası yoxdur.
Squid-in autentifikasiyasını və autentifikasiyaya ehtiyacı olmayan giriş siyahısını konfiqurasiya etmək.
Kerberos-u uğurla qurduqdan sonra onu bizim Squid-ə əlavə edəcəyik.
Bunun üçün Xidmətlər - Squid Proxy Server bölməsinə keçin və əsas parametrlərdə ən aşağıya enin, orada «Əlavə parametrlər» düyməsini tapacağıq.
Custom Options (Before Auth) sahəsinə daxil edəcəyik:
#Хелперы
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 — lazım olan Kerberos autentifikasiyası üçün yardımcı proqramı seçir.
Açar -s dəyəri ilə GSS_C_NO_NAME — açar faylından hər hansı bir hesabın istifadəsini müəyyən edir.
Açar -k dəyəri ilə /usr/local/etc/squid/squid.keytab — məhz bu keytab faylını istifadə etməyi müəyyən edir. Mənim halımda, bu eyni şəkildə yaratdığımız keytab faylıdır ki, onu /usr/local/etc/squid/ direktoryasına köçürdüm və adını dəyişdirdim, çünki Squid-in o direktoriya ilə dostluğu yox idi, görəsən görüntü hüquqları çatışmırdı.
Açar -t dəyəri ilə -t none — domen kontrol sahəsinə dövrü sorğuları dayandırır ki, bu da yükü ciddi dərəcədə azaldır, əgər 50-dən artıq istifadəçiniz varsa.
Test müddətində həmçinin -d açarını əlavə edə bilərsiniz — yəni diaqnostika, daha çox loq açıqlanacaq.
auth_param negotiate children 1000 — eyni anda nə qədər autentifikasiya prosesi başlaya biləcəyini müəyyən edir.
auth_param negotiate keep_alive on — autentifikasiya zəncirinin sorğusu zamanı əlaqəni kəsməməyə imkan verir.
acl auth proxy_auth REQUIRED — autentifikasiyadan keçmiş istifadəçiləri əhatə edən giriş kontrol siyahısını yaradır və tələb edir.
acl nonauth dstdomain «/etc/squid/nonauth.txt» — Squid-ə, hər zaman hamıya açıq olan hədəf domenlərinin yer aldığı nonauth giriş siyahısını bildiririk. Özümüz siyahı yaradıb, içərisinə aşağıdakı formatda domenləri qeyd edəcəyik:
.whatsapp.com
.whatsapp.netWhatsapp misal olaraq boşuna seçilməmişdir — o, autentifikasiyaya malik proxy-lərə qarşı çox tələbkardır və autentifikasiyadan əvvəl icazə verilmədikdə işləməyəcək.
http_access allow nonauth — bu siyahıya giriş imtiyazını hamıya veririk.
http_access deny !auth — qeyri-autentifikasiya olunmuş istifadəçilərin digər saytlara girişini qadağan edirik.
http_access allow auth — giriş izni verilen istifadəçilərə imkan tanıyır.
Hər şey, Squid artıq sizin üçün tənzimlənib, indi qruplara görə filtreləməyə başlamaq üçün ən doğru zamandır.
SquidGuard Tənzimlənməsi
Servislərə keçirikSquidGuard Proxy Filter.
LDAP Seçimlərində Kerberos autentifikasiyası üçün istifadə edilən hesabımızın məlumatlarını, amma aşağıdakı formatda daxil edirik:
CN=pfsense,OU=xidmət-hesabları,DC=domain,DC=localƏgər boşluqlar və ya latın olmayan simvollar varsa, bu yazıların hamısını tək və ya ikiqat qeyd işarəsinə almalı:
'CN=sg,OU=xidmət-hesabları,DC=domain,DC=local'
"CN=sg,OU=xidmət-hesabları,DC=domain,DC=local"Sonra bu işarələri mütləq qoyuruq:
![]()
Lazımsız DOMAINpfsense-i kəsmək üçün DOMAIN.LOCAL, sisteme olduqca həssasdır.
İndi Group Acl-ə keçirik və domen qruplarımızı bağlayırıq, mən group_0, group_1 və s. kimi sadə adlar istifadə edirəm, burada 3 — yalnız ağ siyahıya giriş, 0 — hər şeyə giriş imkanı.
Qruplar aşağıdakı kimi bağlanır:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0OU=squidOU=xidmət-qruplarıDC=DOMAINDC=LOCAL))Qrupumuzu saxlayırıq, Times-a keçirik, orada hər zaman işləmək mənasını verən bir intervalla yaradılmışdır, indi Target Categories-a keçirik və öz istəyimizə görə siyahılar yaradırıq, siyahıları yaratdıqdan sonra qruplarımıza geri dönerik və içərisində düymələrlə kimlərin hara girmək icazəsi, kimlərin hara girməməsi seçilir.
LightSquid və sqstat
Tənzimləmələrdə lüpbək seçdiksə və 7445-ə giriş imkanı açmışıqsa, həm şəbəkəmizdə, həm də pfSense-də, Squid Proxy Reports-a keçdikdə, heç bir problem olmadan sqstat və Lighsquid-i açacağıq. Sonuncusu üçün orada istifadəçi adı və şifrə düşünməli olacağıq, həmçinin dizayn seçimi imkanı da var.
Tamamlanma
pfSense çox güclü bir vasitədir, çox şey edə bilir — həm trafik proxy-ləşdirilməsi, həm də internetə girişin idarə edilməsi sadəcə onun funksionallığının bir hissəsidir. Yüzdən çox maşını olan müəssisədə bu problem həll edildi və proxy alımında qənaət etməyə imkan yaratdı.
Ümid edirəm ki, bu məqalə orta və böyük müəssisələr üçün müasir bir problemi həll etməyə kömək edəcək.
Mənbə: habr.com
