Faylka aqoonsiga ama socket-ka maamulka ee OpenVPN: kee baa la script gareeyaa
auth-user-pass wuxuu daboolaa su'aasha akoonka; socket-ka maamulku wuxuu daboolaa afarta. Isbarbar dhig soo-gaadhista, kharashka script-ka iyo sida mid kasta ugu guuldareysto adeeg.
Script-ka bilaabaya OpenVPN oo aan waligiis isku xidhin badanaa ma aha dhibaato shabakadeed: macmiilku wuxuu fadhiyaa su'aal aan terminal u lahayn inuu ku sawiro. OpenVPN wuxuu leeyahay siyaabo laba oo taageero leh oo looga jawaabo su'aashaas iyada oo aan qof jirin, fayl aqoonsi oo ka dambeeya auth-user-pass iyo socket-ka maamulka, mana is-beddelan karaan. Faylku wuxuu ku kacaa hal tilmaam oo wuxuu ka jawaabaa hal su'aal; socket-ku wuxuu ka jawaabaa su'aal kasta oo wuxuu siinayaa wax kasta oo furi kara deked loopback kanaal kontorool oo aan la aqoonsan. Kee baa ku habboon dhismahaaga waxay ku xiran tahay su'aasha dhab ahaan xannibaysa, iyo sirta aad ka bixin karto inay degganaato.
U magacow su'aasha ka hor inta aadan dooran hab
Afar su'aalood ayaa isku mid uga muuqda terminal. Lammaanaha akoonku wuxuu ka yimaadaa qaabeynta PAM ama auth-user-pass-verify ee server-ka waxaana ka jawaaba auth-user-pass. Erayga sirta ah ee fure gaar ah wuxuu ka tirsan yahay faylka furaha waxaana lagu akhriyaa --askpass ama gacan ayaa lagu qoraa. Xirmada PKCS#12 waxay weyddiisataa eraygeeda sirta ah. Aqoonsiga proxy wuxuu isticmaalaa faylka auth ee --http-proxy qaato, ma aha aqoonsiga akoonka.
Marka OpenVPN uu u shaqeeyo sidii ilmo systemd, PHP ama Node ma jiro terminal, sidaas darteed mid kasta oo ka mid ah si aamusan ayuu u xannibaa. Nidaamku halkaas ayuu fadhiyaa, log-ku wuxuu joogsadaa ka dib khadka sirta, unuggu ugu dambayntiina wuu dhaqaaqaa waqtigiisa; aamusnaantaas ayaa sababta dadku ku darayaan wareeg dib-u-dayo ama sleep halkii ay eegi lahaayeen su'aasha sugaysa. Kaliya socket-ka maamulka ayaa ka jawaabi kara afarta. Faylka aqoonsigu wuxuu ka jawaabaa tan koowaad oo wax kale ma jawaabo.
auth-user-pass: hal fayl, hal su'aal
Faylku wuxuu magaca isticmaalaha ku hayaa khadka koowaad iyo erayga sirta ah khadka labaad, wax kale ma leh: ma leh xigashooyin, ma leh magacyo fure, ma leh faallo. Deji habka 600 oo ka dhig milkiilaha akoonka socodsiiya openvpn, taas oo adeegga badanaa ay tahay isticmaale gaar ah oo aan ahayn gelitaankaaga. Fayl uu root leeyahay oo ku yaal /root waa farqiqa u dhexeeya amarka ka shaqeeya shell-kaaga iyo unugga ku guuldareysta bilowga.
Laba faahfaahin ayaa fayl sax ah u beddela su'aal. Tafatiraha keydiya CRLF wuxuu erayga sirta ah ku dhejiyaa soo-celin gaari, sidaas darteed server-ku wuu diidayaa eray sir ah oo faylka uga muuqda mid sax ah; ku hubi cat -A ama od -c halkii aad isha ku hubin lahayd. Iyo auth-user-pass oo aan dood lahayn gudaha profile-ka waxay la macno tahay «waydii isticmaalaha» sida naqshadeynta, taas oo tilmaam labaad oo ku yaal khadka amarka laga yaabo in aanay ka adkaan karin, sababtoo ah profile-ka waxaa lagu falanqeeyaa meesha uu ku yaal.
Nidaamka ikhtiyaarrada waa dabin saddexaad, wuxuuna ku xiran yahay nooca. Qaar ka mid ah dhismayaasha OpenVPN 2.4 waxay iska indhatiraan --auth-user-pass marka uu ka hor yimaado --config, sidaas darteed labada ikhtiyaar ee isku mid ah oo nidaam kale ku jira way isku xidhmaan. Dhig tilmaanta gudaha profile-ka, ama ka dib --config khadka amarka, oo ka hor inta aadan beddelin wax kale ku grep profile-ka dhacdo kasta.
auth-nocache wuxuu ka tirsan yahay habkan laakiin wax ma bixiyo. Wuxuu xaddidaa inta ay macmiilku aqoonsiga ku hayo xusuusta, taas oo caawisa ka dib burbur oo gabi ahaan ma caawiso marka faylku maqan yahay. Dib-u-xiriirka ka dib waqtiga fadhiga dhanka server-ka wuxuu dib u akhriyaa faylka, sidaas darteed aqoonsi shaqeeyay bilowga weli wuu dhacmi karaa badhtamaha maalinta.
Socket-ka maamulka: su'aal kasta, dusha badan
Ku bilow macmiilka dhegeyste oo si cad u sheeg in su'aalaha lagu soo wargelin doono, adigoo isticmaalaya tilmaamaha lagu diiwaangeliyay buug-gacmeedka OpenVPN 2.6:
management 127.0.0.1 3030
management-query-passwords
Laga bilaabo bash, ku hay xiriirka sharraxaad fayl dheeraad ah oo ka jawaab magaca su'aasha halkii aad ka jawaabi lahayd booska, sababtoo ah dib-u-xiriirku wuxuu ku weydiin karaa nidaam kale:
exec 3<>/dev/tcp/127.0.0.1/3030
while read -r -u 3 line; do
case "$line" in
*"Need 'Auth' username/password"*)
echo 'username "Auth" alice' >&3
echo 'password "Auth" secret' >&3 ;;
*"Need 'Private Key' password"*)
echo 'password "Private Key" secret' >&3 ;;
esac
done
Xadku waa gaadiidka. Borotokoolka maamulku waa qoraal cad oo TCP dul mariya loopback, sidaas darteed dhegeystaha lama faafin karo cinwaan LAN ama tunnel si kontoroolaha fog uu u gaaro; kontoroolaha fog waxay ka dhigan tahay gudbinta SSH, ma aha xidhid ballaaran. Daemon-ka bulshada wuxuu sidoo kale aqbalaa hal macmiil maamul mar keliya, sidaas darteed GUI ama kormeeraha ma wadaagi karaan socket-ka script-kaaga. Xiriirka labaad waa la diidayaa, lama safo, oo guuldarradu waxay u egtahay script dhego-la'.
Socket-kaas waa kanaal kontorool sidoo kale. Aan lahayn eray sir maamul, wax kasta oo isku xidhi kara 127.0.0.1:3030 wuu akhriyi karaa xaaladda, wuu dili karaa tunnel-ka ama isagu wuu ka jawaabi karaa su'aal. Erayga sirta maamulka iyo faylka aqoonsigu waa sir isku fasal ah, labaduba waxay mudan yihiin taxaddar isku mid ah.
Kee baa ku habboon dhismaha
Dooro faylka aqoonsiga marka su'aasha kaliya ay tahay lammaanaha akoonka, macmiilku u shaqeeyo sidii adeeg milkiile xasilloon leh, oo aad ka hayn karto fayl 600 meel ka baxsan kaydka aadan maamulin. Dooro socket-ka maamulka marka erayga sirta fure ama erayga sirta PKCS#12 uu ku jiro, marka duubistu ay hore u kormeerto nidaamka, ama marka aad u baahan tahay inaad daawato xaaladda iyo su'aalaha inta aad hagaajinayso dib-u-xiriir.
Laba shuruudood ayaa go'aanka dhaqaajiya. Haddii duubistu tahay /bin/sh, unug systemd oo si toos ah u waca binary-ga, ama weel ugu yar, xabagta socket ee bash kaliya lama heli karo oo faylku waa jawaabta ka jaban. Haddii sirta ay inta badan wareegto, midkoodna fayl ma noqon karo guri wanaagsan; weydii giraanta furaha duubin yar oo u ogolow unugga inuu waco duubista, taas oo wareegga ku haysta hal meel iyo erayga sirta ah ka baxsan taariikhda shell-ka.
Beddelka nidaamka wuxuu dhex yaal labada oo midkoodna ma leh. Hal-khadka hoose wuu shaqeeyaa sababtoo ah bash ayaa ballaariya ka hor inta openvpn uusan bilaaban, ma aha sababtoo ah macmiilku wuu fahmaa qaab-dhismeedka:
openvpn --config client.ovpn --auth-user-pass <(printf "%s
%s
" "$USER" "$PASS")
Wuu jabaa hoosta /bin/sh, unug dhaafa shell-ka, iyo sawiro aan lahayn bash ama /dev/fd. U hayso tijaabo is-dhexgal, marnaba ma aha heshiiska adeeggu ku tiirsan yahay.
Ilaali sirta, ka dibna ka xaqiiji log-ka
Labada habba waxay ka tagaan sir ay akhriyi karaan nidaamka OpenVPN. Marnaba ha dhig erayga sirta ah khadka amarka ama faylka unugga, halkaas oo ps iyo systemctl ay u muujiyaan isticmaale kasta oo maxalli ah; gudbi marinka faylka, ma aha qiimaha ku jira. Meesha shahaadooyinku ay beddeli karaan lammaanaha akoonka, taas waxay meesha ka saaraysaa qaybta su'aasha halkii ay qarin lahayd.
Socod sax ah wuxuu muujinayaa taxanaha su'aalaha oo dhammaanaya iyo fadhiga oo gaaraya «Initialization Sequence Completed». Haddii macmiilku ku istaago isla su'aashaas, iswaafajintu waa guuldareysatay: daabac khadadka saxda ah ee socket-ku soo diray, hubi xigashooyinka iyo magaca su'aasha, oo hagaaji qaabka halkii aad ku dari lahayd sleep. Tunnel sheegaya guul oo aan wax qaadin waa dhibaato dariiqa ama push, ma aha aqoonsi.
Ka dib tijaabi dib-u-xiriirka, ma aha kaliya bilowga koowaad. Jooji fadhiga dhanka server-ka ama sug waqtigiisa dhammaadka; macmiilku mar kale wuu weydiinayaa, oo halkaas ayaa fayl bilowga u muuqday mid sax ah uu muujinayaa inuu weli akhrisan karo akoonka dib u xiriiraya.