Squid-ը CONNECT հարցմանը պատասխանում է առաջին համապատասխանող http_access տողով, և այդ տողը կարող է մերժում լինել։ Հենց այս մեկ փաստը բացատրում է, թե ինչու VPN վերջնակետի բացառությունը սովորաբար ձախողվում է առաջին իսկ փորձից, որովհետև հարցումը երբեք չի հասնում ներքևում ինչ-որ մեկի ավելացրած թույլտվությանը։ Նեղ ուղղումը պահպանում է գոյություն ունեցող պորտային պահապանները և սովորեցնում նրանց մեկ վերանայված աղբյուր, նպատակակետ և պորտ։ Պրոքսիի վրա մնացած ամեն ինչ իրեն պահում է ճիշտ այնպես, ինչպես առաջ։

Ինչպես է Squid-ը որոշում CONNECT հարցման մասին

CONNECT հարցումը նշում է հոսթ և պորտ, և Squid-ը հերթով անցնում է http_access տողերը, մինչև դրանցից մեկը համապատասխանի։ Համապատասխան մերժումը անմիջապես ավարտում է գնահատումը, և հաճախորդը պրոքսիից ստանում է 403։ Ահա թե ինչու կանոնի դիրքը ավելի կարևոր է, քան դրա ձևակերպումը։ Նույն տողը մեկ աստիճան վերև տեղափոխելը կարող է ամբողջությամբ փոխել արդյունքը։

Սովորական պահապանները մերժում են ամեն ինչ Safe_ports-ից դուրս և մերժում են CONNECT-ը SSL_ports-ից դուրս։ Այդ անունները ձեր սեփական կոնֆիգուրացիայում սահմանված ACL-ներ են, ուստի դրանց բովանդակությունը ձերն է, ոչ թե արձանագրությանը։ Տարածումը կարող է թույլատրել պորտերի լայն շրջանակ որպես Safe_ports՝ միաժամանակ առանձին սահմանափակելով CONNECT-ը։ Կարդացեք կենդանի արժեքները նախքան ենթադրելը, որ պորտը արգելափակված է դիզայնով։

Հաստատեք, որ հենց պրոքսին է մերժում հարցումը։ Squid-ի կողմից ստեղծված 403-ը բոլորովին նման չէ VPN սերվերի TLS նախազգուշացմանը, և երկուսը մեկ խնդրի մեջ միավորելը արժենում է առաջին ժամը։ Ստուգեք հարցման մուտքի մատյանի տողը, որովհետև այն գրանցում է և՛ գործողությունը, և՛ այն առաջացրած կանոնը։

Կառուցեք մեկ համակցված համապատասխանություն երեք առանձին ACL-ի փոխարեն

Բացառությունը կառուցեք երեք փաստից՝ հաստատված աղբյուրի տիրույթ, մեկ հաստատված նպատակակետի հասցե և այն միակ պորտը, որի վրա լսում է վերջնակետը։ Երկու առանձին ACL և մեկ համակցված համապատասխանություն տալիս են շատ տարբեր քաղաքականություն, որովհետև գնահատվում է հենց համակցությունը։ Անվանեք համակցված ACL-ը ըստ այն բանի, ինչ թույլատրում է, ոչ թե ըստ այն մեթոդի, ինչ կրում է։

Ստորև բերված ձևը օգտագործում է փաստաթղթային տիրույթներ, որոնք պետք է փոխարինվեն վերանայված արժեքներով։ Squid-ը իրեն չի վերապահում այս անուններից ոչ մեկը, ուստի դրանք ընտրելը և հետևողական պահելը ձեր գործն է։ Այս բաղադրատոմսը սահմանափակված է Squid 6-ով և 7-ով, որոնց փաստաթղթավորված կոնֆիգուրացիան աջակցում է all-of խմբին։ Ընթացիկ տեղեկատուն այդ հրահանգները նշում է որպես անհասանելի Squid 8-ում, ուստի վերաբերվեք սրան որպես տարբերակին կապված բաղադրատոմս, ոչ թե միգրացիայի ուղի, և նախքան կիրառելը ստուգեք հրահանգը ձեր սեփական տարբերակի տեղեկատուում։

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_src

all-of խումբը համապատասխանում է միայն այն դեպքում, երբ համապատասխանում է յուրաքանչյուր անդամ, այսինքն աղբյուրը, նպատակակետը և պորտը ստուգվում են մեկ տողում։ Խումբն ինքնին ոչինչ չի տալիս, և երեք փաստերից միայն երկուսին համապատասխանող հարցումը չի կարող բավարարել այն։ Այդ հատկությունը բացառությունը նեղ է պահում, երբ ինչ-որ մեկը հետագայում ավելացնում է երկրորդ դարպաս։ Կա՛մ նոր նպատակակետը ավելացվում է դիտավորյալ, կա՛մ հարցումը վերադառնում է սկզբնական պահապաններին։

Ծալեք պորտային պահապանները՝ առանց դրանք հեռացնելու

Իրենց ներկայիս դիրքերում երկու սովորական պահապան տողերը այսպիսի տեսք ունեն։ Դրանք սովորաբար գտնվում են նույնականացումից հետո և ամեն ինչ թույլատրող քաղաքականության տողերից առաջ։

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

Ավելացրեք ժխտված համակցված համապատասխանությունը յուրաքանչյուրին, որպեսզի համապատասխանող բացառությունը վերապրի պահապանին, որը հակառակ դեպքում կմերժեր այն։ Փոխվում են միայն պահապան տողերը, և յուրաքանչյուրը՝ ընդամենը մեկ լրացուցիչ պայմանով։

http_access deny CONNECT !SSL_ports !pvpn_ok
http_access deny !Safe_ports !pvpn_ok

Մեկ մուտքի տողում պայմանները համակցվում են, ուստի տողն այժմ մերժում է միայն այն հարցումները, որոնք ձախողվում են և՛ սկզբնական ստուգման, և՛ բացառության մեջ։ Հաստատված վերջնակետի հարցումն անցնում է, իսկ ցանկացած այլ հարցում պահպանում է պորտի հին վարքը։ Սա ավելի նեղ է, քան պորտը գլոբալ SSL_ports ցանկին ավելացնելը, ինչը թույլ կտար այդ պորտը ցանկացած նպատակակետի։ Եթե պորտն արդեն այդ ցանկում է, այս ACL-ը ոչինչ չի նեղացնում, և հին, ավելի լայն թույլտվությունը դեռ գործում է այլ նպատակակետերի համար, ուստի կարդացեք կենդանի ցանկը նախքան պնդելը, թե բացառությունը բացել է պորտը։ Այն նաև շրջելի է, որովհետև երկու տող վերադառնում են իրենց նախկին ձևին։ Մուտքի վերահսկման տեղեկատուն փաստաթղթավորում է այն հերթականությունը և սովորական պահապանները, որոնցից կախված է այս փոփոխությունը։

Որտեղ բացառությունը չպետք է տեղադրվի

Գայթակղությունն այն է, որ պահապանների վերևում թույլտվություն դնես ու ավարտես։ Այդ տեղադրումը բաց է թողնում նաև նույնականացման և տեղական նպատակակետի պաշտպանությունները, որոնք սովորաբար գտնվում են աշխատող կոնֆիգուրացիայի վերին մասի մոտ։ Արդյունքը նեղ բացառություն չէ, այլ անցք՝ վերևում մեկնաբանությամբ։ Ցանկացած նոր թույլտվություն պահեք նույն վերանայված փուլում, ինչ հաճախորդի քաղաքականության մնացած մասը։

Ստուգեք, թե ինչ է հարցմանը դեռ պետք պորտային պահապաններից հետո։ Նույնականացված հաշիվը, թույլատրված հաճախորդի հասցեն և նպատակակետի քաղաքականությունը դեռ գործում են, և բացառությունը դրանցից ոչ մեկը չի փոխում։ Եթե ձեր պրոքսին արդեն թույլ է տալիս հաստատված հաշվին հասնել կամայական նպատակակետերի, ապա պորտային պահապանը երբեք իսկական վերահսկողություն չի եղել։

Մտածեք՝ արդյոք վերջնակետն ընդհանրապես TCP է։ CONNECT բացառությունը կրում է TCP հոսքեր, և UDP օգտագործող OpenVPN պրոֆիլը դրա միջով հասանելի չի դառնա։ Փոխեք պրոֆիլը TCP-ի միայն այն դեպքում, եթե սերվերը այդպես է լսում, և օպերատորն ընդունում է վարքի տարբերությունը։

Ստուգեք սահմանը վերլուծիչով և իրական հարցումով

Վերլուծեք կոնֆիգուրացիան նախքան վերաբեռնումը, և դա անելիս բաց պահեք երկրորդ նստաշրջանը։ Վերաբեռնման պահին շարահյուսական սխալը կարող է պրոքսին թողնել հին կոնֆիգուրացիայի վրա կամ ամբողջությամբ մերժել նորը։ Վերլուծիչը հաղորդում է մերժված տողը, ինչը ավելին է, քան ձեզ կասի հաճախորդի սխալը։

Այնուհետև վերաբեռնեք և ուղարկեք մեկ իրական CONNECT պրոքսիով՝ հաստատված աղբյուրից։ Վերլուծիչի գործարկումը գալիս է առաջինը, որովհետև տպագրական սխալով վերաբեռնումը ձեզ ոչինչ չի սովորեցնում քաղաքականության մասին։

squid -k parse
squid -k reconfigure
curl -v -p -x http://proxy.lab.internal:3128 https://vpn.lab.internal:1194/ --max-time 5

Փորձարկեք երեք դեպք՝ հաստատված աղբյուր և հաշիվ, չհաստատված աղբյուր, և այլ նպատակակետ նույն պորտում։ Երրորդ դեպքն է, որ ապացուցում է բացառության նեղ լինելը, որովհետև այն օգտագործում է պորտը առանց նպատակակետի համապատասխանության։ Կարդացեք մուտքի մատյանը բոլոր երեքի համար՝ հաճախորդի հաղորդագրությանը վստահելու փոխարեն։ Հաջող CONNECT-ը հաստատում է TCP հոսք և ոչ ավելին, ուստի VPN ձեռքսեղմումը մնում է առանձին փորձարկում։

Առնչվող հոդվածներ