OpenConnect нь вэб нэвтрэлт ба VPN туннель гэсэн хоёр тусдаа солилцоог нэг богино настай утгаар холбодог. Эхний солилцоо нь энгийн HTTPS: нэвтрэх мэдээлэл, SAML аялал эсвэл токен гарц руу явж, хариулт нь баталгаажуулалтын күүк авчирдаг. Хоёр дахь солилцоо нь тэр күүкийг мөн адил гарцад вэб үе аль хэдийн болсны нотолгоо болгон танилцуулж, зөвхөн тэр үед туннель босдог.

Нэвтрэх үеэр туннелийн талаар юу ч хэлэлцдэггүй. Үүнийг ойлгох нь чухал, учир нь ихэнх скриптийн алдаа күүкийг хадгалах нууц үг эсвэл урсгалыг хамгаалах түлхүүр гэж үздэг боловч бодитдоо энэ нь тодорхой гарцын сессэд зориулсан тээвэрлэгч тасалбар юм.

Клиент ба гарц юуг дараалан солилцдог вэ

Баталгаажуулалтын үе нь энгийн хамгаалагдсан вэбсайт шиг харагдана. OpenConnect хэрэглэгчийн нэвтрэх мэдээллийг илгээх эсвэл гарцын дахин чиглүүлэлтийг дагаж таних мэдээллийн нийлүүлэгч рүү очдог бөгөөд гарц нь баталгаажуулалтын күүкийг агуулсан баримт бичгээр хариулдаг. AnyConnect протоколд энэ утга дараагийн хүсэлтүүдэд күүкийн толгойд явдаг, ихэвчлэн webvpn гэх мэт нэрээр, гарын авлага үүнийг сессийг урагшлуулах нэвтрэх мэдээлэл гэж үздэг.

Хоёр дахь үе нь тэр күүкийг хавсаргасан гарцын VPN төгсгөлийн цэг рүү чиглэсэн CONNECT хүсэлт юм. Гарц үүнийг шалгаж, хаяг олгож, клиент TLS дээр CSTP эхлүүлнэ, сесс үүссэний дараа DTLS нь сонголтоор илүү хурдан өгөгдлийн зам болно. Зөвхөн энэ үед туннелийн параметр, маршрут, DNS тохиргоо, сессийн урсгалын түлхүүрүүд тогтоогдоно. Күүк клиентийг хаалгаар нэвтрүүлсэн; энэ нь юу ч шифрлээгүй.

Энэ дараалал нь openconnect --authenticate яагаад байгааг тайлбарлана. Үүнийг ажиллуулахад вэб үеийг гүйцэтгэж, COOKIE, HOST, CONNECT_URL, FINGERPRINT зэрэг бүрхүүлийн хувьсагчдын жижиг блокыг хэвлэж, ямар ч туннель барихаас өмнө гарна. Дараа нь бүрхүүл скрипт тэдгээр утгаар жинхэнэ холболтыг эхлүүлж болох бөгөөд энэ нь толгойгүй эсвэл хоёр контейнертэй байршуулалтад хэрэгтэй яг тэр хуваарилалт юм.

Күүк бол сессийн тээгч, түлхүүр биш

Утгыг вэб аппликейшн дахь сессийн ID шиг харьцаарай. Амьдралынхаа турш үүнийг эзэмшсэн хэн ч гарцаас тухайн сессэд эрхтэй туннелийг шаардаж болох тул нууцлал нь чухал. Гэхдээ хуулбарлах нь урсгалыг ил болгодоггүй, учир нь туннелийн нууцлал нь TLS гар барилт ба түүнээс үүссэн түлхүүрүүдээс ирдэг, күүкийн мөрөөс биш.

Энэ нь бас байнгын зөвшөөрөл биш. Сесс хэр удаан амьдрахыг гарц ба таних мэдээллийн нийлүүлэгч шийддэг бөгөөд нэвтэрсэн хуудсыг хараахан харуулж буй хөтөч нь туннелийн сесс хүчинтэй хэвээр байгаа эсэхийг юу ч хэлэхгүй. Хугацаа дууссаны дараа дахин холбогдох нь вэб үеийг давтаж шинэ күүк үүсгэхийг хэлнэ, мөн энэ нь дахин баталгаажуулалтын утга учир бөгөөд инженерийн аргаар зайлсхийх ёстой төвөг биш.

Күүкийг бусад нэвтрэх мэдээллийн бүх нийтийн орлуулагч гэж бүү үзээрэй. SAML мэдэгдэл, хөтчийн нууц үг, өөр үйлчилгээний олгосон күүк нь өөр өөр үзэгчтэй өөр өөр объектууд бөгөөд нэгийг нөгөөгийн талбарт наах нь ихэвчлэн гарц дээр бүтэлгүйтдэг эсвэл бүр дор нь буруу итгэлцийн хил хязгаарын эсрэг амжилт олдог.

Хуулбарыг орхихгүйгээр күүкийг дамжуулах

Linux дээр хамгийн аюулгүй механик шилжүүлэлт бол стандарт оролт юм. --cookie-on-stdin утгыг stdin-ээс уншдаг тул күүк процессын аргументын жагсаалтад хэзээ ч харагдахгүй, тэнд аливаа локал хэрэглэгч үүнийг ps ашиглан уншиж болно. Нэг процесс дээр баталгаажуулж, нөгөө дээр туннелийг тэжээдэг дамжуулах хоолой утгыг файл эсвэл орчны хувьсагчид биш, хоолойд хадгалдаг.

Аргумент ба орчны хувьсагчид өөр өөр шалтгаанаар сул байдаг. Аргумент нь клиентийн бүх амьдралын турш процессын хүснэгтэд харагдаж, ихэвчлэн бүрхүүлийн түүхэнд ордог. Орчны хувьсагч нь хүү процессуудад өвлөгдөж, нэгжийн файлд үүнийг тохируулдаг systemd нэгж нууцыг уншиж болох тохиргоонд хадгалдаг. Хэрэв файл заавал хэрэгтэй бол үйлчилгээний бүртгэлд хязгаарлаж, сесс дуусахад устгаарай.

Давуу эрхийн хил хязгаарыг ч санаатайгаар хадгалаарай. Таних мэдээллийн нийлүүлэгчтэй ярьдаг, магадгүй хөтөч нээдэг процесс нь тухайн нэвтрэлтийг эзэмшдэг хэрэглэгчийн хувьд ажиллах ёстой. Маршрут, DNS, туннелийн төхөөрөмжийг тохируулдаг процесс илүү их давуу эрх шаардаж магадгүй. root-ийн эзэмшлийн туннельд күүкийг нь хүргэхийн тулд бүх хөтчийг root болгон ажиллуулах нь буруу солилцоо бөгөөд орчин үеийн OpenConnect тохиргоо утгыг энэ хилээр илэрхийлэн дамжуулж чадна.

Лог бичих нь ч мөн адил сэжигтэй хандах ёстой. Дэлгэрэнгүй клиентийн гаралт, туслах скрипт, гарцын оношилгоо нь хүсэлтийн материалыг давтаж болох бөгөөд лог бүрийн түвшин күүкийг далдладаггүй. Хэрэгтэй хамгийн бага алдааны бичлэгийг авч, нийтлэг сувгаас гадуур байлгаж, тасалбарт хавсаргахаас өмнө далдласан дээжийг шалгаарай.

Хоёр дахь үеийн шалгалт ба хугацаа дуусах

Хоёр дахь үе серверийг шалгах ёстой хэвээр. --authenticate-ийн хэвлэдэг FINGERPRINT нь pin-sha256: хэлбэрийн сертификатын бэхэлгээ бөгөөд үүнийг --servercert-ээр туннелийн дуудлагад дамжуулах нь шалгалтыг таны баталгаажуулсан гарцад тогтоосон хэвээр байлгана. Скриптийг хялбарчлахын тулд сертификатын шалгалтыг унтраах нь күүкийг зориулсан хостод дамжуулж байгаа цорын ганц нотолгоог арилгана.

Гарц күүкийг татгалзвал шийдэл нь илүү урт кэш биш, харин баталгаажуулалтын шинэ тойрог юм. Күүкийг зөвхөн холболтын амьдралын турш хадгалж, гарах үед түр файлуудыг устгаж, сесс ил болсон эсвэл төхөөрөмж алдагдсан үед таних мэдээллийн нийлүүлэгч эсвэл гарцын сесс устгах процессыг ашиглаарай. Кэшлэсэн күүк нь MFA-аас чөлөөлөх зүйл биш.

Үүнийг автоматжуулахын өмнө дөрвөн зүйлийг шалгаарай: туннель зөв бүртгэлээр ажиллаж байна, күүк stdin-ээр ирж байна, сертификатын хурууны хээ бэхлэгдсэн, туннель хаагдахад сесс хаягдана. Эдгээрийн аль нэг нь дутуу бол автоматжуулалт гарын урсгалыг дахин бүтээхийн оронд күүкид итгэх итгэлийг өргөжүүлсэн байна.

Холбоотой нийтлэлүүд