Vienas VPN galinis taškas per Squid: siaura CONNECT išimtis
Leiskite vienam patvirtintam šaltiniui per Squid pasiekti vieną VPN šliuzą prievade 1194, išlaikykite visuotinius prievadų sargus ir įrodykite, kad daugiau nieko nebuvo atidaryta.
Squid atsako į CONNECT užklausą pirmąja atitinkančia http_access eilute, ir ta eilutė gali būti atmetimas. Šis vienas faktas paaiškina, kodėl VPN galinio taško išimtis paprastai nepavyksta pirmu bandymu, nes užklausa niekada nepasiekia leidimo, kurį kas nors pridėjo apačioje. Siaura pataisa išlaiko esamus prievadų sargus ir pamoko juos vieno peržiūrėto šaltinio, paskirties ir prievado. Visa kita tarpinio serverio veikla išlieka lygiai tokia pati kaip anksčiau.
Kaip Squid nusprendžia dėl CONNECT užklausos
CONNECT užklausa įvardija hostą ir prievadą, o Squid eina per http_access eilutes iš eilės, kol viena jų atitinka. Atitinkantis atmetimas iš karto baigia vertinimą, ir klientas iš tarpinio serverio gauna 403. Štai kodėl taisyklės vieta svarbesnė už jos formuluotę. Tos pačios eilutės perkėlimas vienu žingsniu aukščiau gali visiškai pakeisti rezultatą.
Įprasti sargai atmeta viską, kas už Safe_ports ribų, ir atmeta CONNECT už SSL_ports ribų. Tie pavadinimai yra ACL, apibrėžti jūsų pačių konfigūracijoje, todėl jų turinys priklauso jums, o ne protokolui. Distribucija gali leisti platų prievadų diapazoną kaip Safe_ports ir tuo pačiu atskirai apriboti CONNECT. Perskaitykite gyvas reikšmes prieš manydami, kad prievadas užblokuotas dėl dizaino.
Patvirtinkite, kad būtent tarpinis serveris atmeta užklausą. Squid sugeneruotas 403 visai neprimena VPN serverio TLS įspėjimo, o abiejų sujungimas į vieną problemą kainuoja pirmą valandą. Patikrinkite užklausos prieigos žurnalo eilutę, nes ji fiksuoja ir veiksmą, ir jį sukėlusią taisyklę.
Sukurkite vieną sujungtą atitikimą vietoj trijų atskirų ACL
Išimtį kurkite iš trijų faktų: patvirtinto šaltinio diapazono, vieno patvirtinto paskirties adreso ir vienintelio prievado, kuriame klausosi galinis taškas. Du atskiri ACL ir vienas sujungtas atitikimas duoda labai skirtingą politiką, nes vertinama būtent kombinacija. Sujungtą ACL pavadinkite pagal tai, ką ji leidžia, o ne pagal metodą, kurį ji neša.
Žemiau pateikta forma naudoja dokumentacijos diapazonus, kuriuos reikia pakeisti peržiūrėtomis reikšmėmis. Squid nerezervuoja nė vieno iš šių pavadinimų, todėl juos rinktis ir išlaikyti nuoseklius yra jūsų reikalas. Šis receptas skirtas tik Squid 6 ir 7, kurių dokumentuota konfigūracija palaiko all-of grupę. Dabartinė žinyno versija tuos nurodymus žymi kaip nepasiekiamus Squid 8, todėl traktuokite tai kaip su versija susietą receptą, o ne migracijos kelią, ir prieš taikydami patikrinkite nurodymą savo versijos žinyne.
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 grupė atitinka tik tada, kai atitinka kiekvienas narys, tai reiškia, kad šaltinis, paskirtis ir prievadas tikrinami vienoje eilutėje. Grupė pati savaime nieko nesuteikia, o užklausa, atitinkanti tik du iš trijų faktų, negali jos patenkinti. Ši savybė išlaiko išimtį siaurą, kai kas nors vėliau prideda antrą šliuzą. Arba nauja paskirtis pridedama sąmoningai, arba užklausa grįžta prie pradinių sargų.
Palenkite prievadų sargus jų nešalindami
Savo dabartinėse pozicijose dvi įprastos sargo eilutės atrodo taip. Paprastai jos yra po autentifikavimo ir prieš politikos eilutes, kurios leidžia viską.
http_access deny !Safe_ports
http_access deny CONNECT !SSL_portsPridėkite paneigtą sujungtą atitikimą prie kiekvienos, kad atitinkanti išimtis išliktų prieš sargą, kuris kitu atveju ją atmestų. Keičiasi tik sargo eilutės, ir kiekviena – tik vienu papildomu terminu.
http_access deny CONNECT !SSL_ports !pvpn_ok
http_access deny !Safe_ports !pvpn_okVienos prieigos eilutės terminai sujungiami, todėl eilutė dabar atmeta tik tas užklausas, kurios nepraeina ir pirminės patikros, ir išimties. Užklausa patvirtintam galiniam taškui praeina, o kiekviena kita užklausa išlaiko seną prievado elgesį. Tai siauriau nei pridėti prievadą į visuotinį SSL_ports sąrašą, kuris leistų tą prievadą kiekvienai paskirčiai. Jei prievadas jau yra tame sąraše, šis ACL nieko nesusiaurina, ir senesnis, platesnis leidimas vis dar galioja kitoms paskirtims, todėl perskaitykite gyvą sąrašą prieš teigdami, kad išimtis atidarė prievadą. Ji taip pat atšaukiama, nes dvi eilutės grįžta į ankstesnę formą. Prieigos kontrolės žinynas dokumentuoja tvarką ir įprastus sargus, nuo kurių priklauso šis pakeitimas.
Kur išimties dėti negalima
Pagunda – uždėti leidimą virš sargų ir baigti. Tokia vieta taip pat praleidžia autentifikavimo ir vietinės paskirties apsaugas, kurios paprastai yra netoli veikiančios konfigūracijos viršaus. Rezultatas – ne siaura išimtis, o skylė su komentaru virš jos. Laikykite bet kurį naują leidimą tame pačiame peržiūrėtame etape kaip ir likusią kliento politiką.
Patikrinkite, ko užklausai dar reikia po prievadų sargų. Autentifikuota paskyra, leidžiamas kliento adresas ir paskirties politika vis dar galioja, o išimtis nekeičia nė vieno jų. Jei jūsų tarpinis serveris jau leidžia patvirtintai paskyrai pasiekti savavališkas paskirtis, prievado sargas niekada nebuvo tikroji kontrolė.
Pagalvokite, ar galinis taškas apskritai TCP. CONNECT išimtis perduoda TCP srautus, o UDP naudojantis OpenVPN profilis per ją netaps pasiekiamas. Keiskite profilį į TCP tik jei serveris taip klausosi ir operatorius priima elgesio skirtumą.
Patikrinkite ribą analizatoriumi ir realia užklausa
Išanalizuokite konfigūraciją prieš įkeldami iš naujo, ir tą darydami laikykite atvirą antrą sesiją. Sintaksės klaida įkeliant iš naujo gali palikti tarpinį serverį su sena konfigūracija arba visiškai atmesti naują. Analizatorius praneša atmestą eilutę, o tai daugiau, nei pasakys kliento klaida.
Tada įkelkite iš naujo ir išsiųskite vieną realią CONNECT užklausą per tarpinį serverį iš patvirtinto šaltinio. Analizatoriaus paleidimas eina pirmas, nes įkėlimas su rašybos klaida nieko neišmoko apie politiką.
squid -k parse
squid -k reconfigure
curl -v -p -x http://proxy.lab.internal:3128 https://vpn.lab.internal:1194/ --max-time 5Išbandykite tris atvejus: patvirtintą šaltinį ir paskyrą, nepatvirtintą šaltinį ir kitą paskirtį tame pačiame prievade. Trečiasis atvejis įrodo, kad išimtis siaura, nes naudoja prievadą be paskirties atitikimo. Skaitykite prieigos žurnalą visiems trims, o ne pasitikėkite kliento pranešimu. Sėkmingas CONNECT užmezga TCP srautą ir nieko daugiau, todėl VPN rankos paspaudimas lieka atskiru bandymu.