Squid orqali bitta VPN so‘nggi nuqtasi: tor CONNECT istisnosi
Bitta tasdiqlangan manbaga Squid orqali 1194 portidagi bitta VPN darvozasiga yetib borishga ruxsat bering, global port qo‘riqchilarini saqlang va boshqa hech narsa ochilmaganini isbotlang.
Squid CONNECT so‘roviga mos keladigan birinchi http_access satri bilan javob beradi va bu satr rad etish bo‘lishi mumkin. Aynan shu bir fakt VPN so‘nggi nuqtasi uchun istisno odatda birinchi urinishda muvaffaqiyatsiz bo‘lishini tushuntiradi, chunki so‘rov pastda kimdir qo‘shgan ruxsatga hech qachon yetib bormaydi. Tor tuzatish mavjud port qo‘riqchilarini saqlaydi va ularga bitta ko‘rib chiqilgan manba, manzil va portni o‘rgatadi. Proksidagi qolgan hamma narsa avvalgidek ishlaydi.
Squid CONNECT so‘rovini qanday hal qiladi
CONNECT so‘rovi xost va portni nomlaydi, Squid esa http_access satrlarini tartib bilan aylanib chiqadi, toki ulardan biri mos kelguncha. Mos kelgan rad etish baholashni darhol tugatadi va mijoz proksidan 403 oladi. Shuning uchun qoidaning joyi uning so‘zlaridan muhimroq. Xuddi shu satrni bir pog‘ona yuqoriga ko‘chirish natijani butunlay o‘zgartirishi mumkin.
An’anaviy qo‘riqchilar Safe_ports tashqarisidagi hamma narsani rad etadi va SSL_ports tashqarisidagi CONNECT ni rad etadi. Bu nomlar sizning konfiguratsiyangizda belgilangan ACL lar, shuning uchun ularning mazmuni protokolga emas, sizga tegishli. Tarqatma Safe_ports sifatida portlarning keng diapazoniga ruxsat berib, CONNECT ni alohida cheklashi mumkin. Port dizayn bo‘yicha bloklangan deb o‘ylashdan oldin jonli qiymatlarni o‘qing.
So‘rovni rad etayotgan komponent proksi ekanini tasdiqlang. Squid yaratgan 403 VPN serverining TLS ogohlantirishiga umuman o‘xshamaydi, ikkalasini bitta muammoga qo‘shish birinchi soatni oladi. So‘rov uchun kirish jurnali satrini tekshiring, chunki u harakatni ham, uni keltirib chiqargan qoidani ham yozadi.
Uchta alohida ACL o‘rniga bitta birlashtirilgan moslik quring
Istisnoni uchta faktdan quring: tasdiqlangan manba diapazoni, bitta tasdiqlangan manzil manzili va so‘nggi nuqta tinglaydigan yagona port. Ikkita alohida ACL va bitta birlashtirilgan moslik juda boshqacha siyosat beradi, chunki baholanadigan narsa kombinatsiya. Birlashtirilgan ACL ni u nima ruxsat berishiga qarab nomlang, olib yuradigan usulga qarab emas.
Quyidagi shakl ko‘rib chiqilgan qiymatlar bilan almashtirilishi kerak bo‘lgan hujjat diapazonlaridan foydalanadi. Squid bu nomlarning hech birini o‘zi uchun saqlamaydi, shuning uchun ularni tanlash va izchil saqlash sizning ishingiz. Bu retsept all-of guruhini qo‘llab-quvvatlaydigan hujjatlashtirilgan konfiguratsiyaga ega Squid 6 va 7 bilan cheklangan. Joriy ma’lumotnoma bu direktivalarni Squid 8 da mavjud emas deb belgilaydi, shuning uchun buni migratsiya yo‘li emas, versiyaga bog‘langan retsept deb qabul qiling va qo‘llashdan oldin direktivani o‘z versiyangiz ma’lumotnomasida tekshiring.
acl pvpn_src src 192.0.2.128/25
acl pvpn_dst dst 198.51.100.77/32
acl pvpn_port port 1194
acl pvpn_ok all-of CONNECT pvpn_port pvpn_dst pvpn_srcall-of guruhi faqat har bir a’zo mos kelganda mos keladi, ya’ni manba, manzil va port bitta satrda tekshiriladi. Guruh o‘z-o‘zidan hech narsa bermaydi va uchta faktdan faqat ikkitasiga mos keladigan so‘rov uni qanoatlantira olmaydi. Bu xususiyat keyinroq kimdir ikkinchi darvoza qo‘shganda istisnoni tor saqlaydi. Yoki yangi manzil ataylab qo‘shiladi, yoki so‘rov asl qo‘riqchilarga qaytadi.
Port qo‘riqchilarini olib tashlamasdan ularni buking
Hozirgi joylarida ikkita an’anaviy qo‘riqchi satri shunday ko‘rinadi. Ular odatda autentifikatsiyadan keyin va hamma narsaga ruxsat beruvchi siyosat satrlaridan oldin turadi.
http_access deny !Safe_ports
http_access deny CONNECT !SSL_portsHar biriga inkor qilingan birlashtirilgan moslikni qo‘shing, shunda mos keladigan istisno aks holda uni rad etadigan qo‘riqchidan o‘tadi. Faqat qo‘riqchi satrlari o‘zgaradi va har biri faqat bitta qo‘shimcha shart bilan.
http_access deny CONNECT !SSL_ports !pvpn_ok
http_access deny !Safe_ports !pvpn_okBitta kirish satridagi shartlar birlashtiriladi, shuning uchun satr endi faqat asl tekshiruvda ham, istisnoda ham muvaffaqiyatsiz bo‘lgan so‘rovlarni rad etadi. Tasdiqlangan so‘nggi nuqtaga so‘rov o‘tadi va qolgan har bir so‘rov eski port xatti-harakatini saqlaydi. Bu portni global SSL_ports ro‘yxatiga qo‘shishdan torroq, bu o‘sha portga har bir manzil uchun ruxsat bergan bo‘lardi. Agar port allaqachon o‘sha ro‘yxatda bo‘lsa, bu ACL hech narsani tormozlamaydi va eski, kengroq ruxsat boshqa manzillar uchun amal qiladi, shuning uchun istisno portni ochdi deb da’vo qilishdan oldin jonli ro‘yxatni o‘qing. Uni qaytarish ham mumkin, chunki ikkita satr avvalgi shakliga qaytadi. Kirishni boshqarish ma’lumotnomasi bu o‘zgarish bog‘liq bo‘lgan tartib va an’anaviy qo‘riqchilarni hujjatlashtiradi.
Istisnoni qaerga qo‘yish mumkin emas
Vasvasa qo‘riqchilar ustiga ruxsat qo‘yib, ishni tugatishdir. Bunday joylashuv ishlaydigan konfiguratsiyaning yuqori qismiga yaqin turadigan autentifikatsiya va mahalliy manzil himoyalarini ham chetlab o‘tadi. Natija tor istisno emas, ustida izohi bor teshik. Har qanday yangi ruxsatni mijoz siyosatining qolgan qismi kabi bir xil ko‘rib chiqilgan bosqichda saqlang.
Port qo‘riqchilaridan keyin so‘rovga yana nima kerakligini tekshiring. Autentifikatsiya qilingan hisob, ruxsat etilgan mijoz manzili va manzil siyosati hali ham amal qiladi va istisno ularning hech birini o‘zgartirmaydi. Agar proksingiz tasdiqlangan hisobga allaqachon ixtiyoriy manzillarga yetishga ruxsat bersa, port qo‘riqchisi hech qachon haqiqiy nazorat bo‘lmagan.
So‘nggi nuqta umuman TCP ekanini o‘ylab ko‘ring. CONNECT istisnosi TCP oqimlarini tashiydi va UDP ishlatadigan OpenVPN profili u orqali yetib bo‘lmaydigan bo‘ladi. Profilni TCP ga faqat server shunday tinglasa va operator xatti-harakat farqini qabul qilsa o‘zgartiring.
Chegarani parser va haqiqiy so‘rov bilan tekshiring
Qayta yuklashdan oldin konfiguratsiyani tahlil qiling va buni qilayotganda ikkinchi sessiyani ochiq tuting. Qayta yuklash paytida sintaksis xatosi proksini eski konfiguratsiyada qoldirishi yoki yangisini butunlay rad etishi mumkin. Parser rad etilgan satrni xabar qiladi, bu mijoz xatosi aytadiganidan ko‘proq.
Keyin qayta yuklang va tasdiqlangan manbadan proksi orqali bitta haqiqiy CONNECT yuboring. Parserni ishga tushirish birinchi keladi, chunki xatoli qayta yuklash sizga siyosat haqida hech narsa o‘rgatmaydi.
squid -k parse
squid -k reconfigure
curl -v -p -x http://proxy.lab.internal:3128 https://vpn.lab.internal:1194/ --max-time 5Uch holatni sinab ko‘ring: tasdiqlangan manba va hisob, tasdiqlanmagan manba va o‘sha portdagi boshqa manzil. Uchinchi holat istisnoning tor ekanini isbotlaydi, chunki portni manzil mosligisiz ishlatadi. Mijoz xabariga ishonish o‘rniga uchalasi uchun kirish jurnalini o‘qing. Muvaffaqiyatli CONNECT faqat TCP oqimini o‘rnatadi va boshqa hech narsa emas, shuning uchun VPN qo‘l siqishi alohida sinov bo‘lib qoladi.