Script inayoanzisha OpenVPN na haijaunganishi kamwe kwa kawaida si tatizo la mtandao: mteja amekaa kwenye kidokezo bila terminal ya kukichora. OpenVPN ina njia mbili hasa zinazoungwa mkono za kujibu kidokezo hicho bila mtu, faili ya tambulishi nyuma ya auth-user-pass na soketi ya usimamizi, na hazibadilishani. Faili inagharimu agizo moja na inajibu kidokezo kimoja; soketi inajibu kila kidokezo na inampa kila kitu kinachoweza kufungua mlango wa loopback kituo cha udhibiti kisichothibitishwa. Ipi inafaa usambazaji wako inategemea ni kidokezo kipi kinachozuia kwa kweli, na ni siri ipi unayoweza kumudu kuiacha itulie.

Taja kidokezo kabla ya kuchagua utaratibu

Vidokezo vinne vinaonekana sawa kwenye terminal. Jozi ya akaunti inatoka kwenye mpangilio wa PAM au auth-user-pass-verify wa seva na hujibiwa na auth-user-pass. Kaulisiri ya ufunguo wa faragha ni ya faili ya ufunguo na husomwa kwa --askpass au kuandikwa kwa mkono. Kifurushi cha PKCS#12 kinaomba nenosiri lake. Uthibitishaji wa proksi hutumia faili ya auth ambayo --http-proxy inachukua, si tambulishi za akaunti.

OpenVPN inapotumika kama mtoto wa systemd, PHP au Node hakuna terminal, kwa hiyo yoyote kati ya haya huzuia kimya. Mchakato unakaa hapo, kumbukumbu inasimama baada ya mstari wa usimbaji na kitengo hatimaye kinapitwa na muda; ukimya huo ndio sababu watu huongeza mzunguko wa kujaribu tena au sleep badala ya kuangalia ni kidokezo kipi kinasubiri. Soketi ya usimamizi pekee inaweza kujibu vyote vinne. Faili ya tambulishi hujibu cha kwanza na hakuna kingine.

auth-user-pass: faili moja, kidokezo kimoja

Faili inashikilia jina la mtumiaji kwenye mstari wa kwanza na nenosiri kwenye wa pili, na hakuna kingine: hakuna alama za nukuu, hakuna majina ya funguo, hakuna maoni. Weka hali 600 na ufanye mmiliki kuwa akaunti inayoendesha openvpn, ambayo kwa huduma mara nyingi ni mtumiaji maalum na si kuingia kwako. Faili inayomilikiwa na root chini ya /root ni tofauti kati ya amri inayofanya kazi kwenye shell yako na kitengo kinachoshindikana wakati wa kuwasha.

Maelezo mawili hubadilisha faili sahihi kuwa kidokezo. Kihariri kinachohifadhi CRLF huacha kurudi kwa gari likiwa limeunganishwa na nenosiri, kwa hiyo seva hukataa nenosiri ambalo kwenye faili linaonekana sahihi; angalia kwa cat -A au od -c badala ya kwa jicho. Na auth-user-pass isiyo na hoja ndani ya wasifu inamaanisha «muulize mtumiaji» kwa muundo, jambo ambalo agizo la pili kwenye mstari wa amri huenda haliwezi kulishinda, kwa sababu wasifu huchanganuliwa mahali ulipo.

Mpangilio wa chaguo ni mtego wa tatu, na unategemea toleo. Baadhi ya miundo ya OpenVPN 2.4 hupuuza --auth-user-pass inapotokea kabla ya --config, kwa hiyo chaguo hizo mbili kwa mpangilio mwingine huungana. Weka agizo ndani ya wasifu, au baada ya --config kwenye mstari wa amri, na grep wasifu kwa kila tukio kabla ya kubadilisha kitu kingine.

auth-nocache ni ya utaratibu huu lakini haitoi kitu. Inapunguza muda ambao mteja hushikilia tambulishi kwenye kumbukumbu, jambo linalosaidia baada ya kuanguka na halisaidii kabisa faili inapokosekana. Kuunganisha tena baada ya muda wa kikao kuelekea seva husoma faili tena, kwa hiyo tambulishi zilizofanya kazi wakati wa kuwasha zinaweza bado kuisha katikati ya siku.

Soketi ya usimamizi: kila kidokezo, uso zaidi

Anzisha mteja na kisikilizaji na tamka wazi kwamba vidokezo vitaripotiwa juu yake, ukitumia maagizo yaliyoandikwa kwenye mwongozo wa OpenVPN 2.6:

management 127.0.0.1 3030
management-query-passwords

Kutoka bash shikilia muunganisho kwenye kifafanuzi cha faili cha ziada na jibu kwa jina la kidokezo badala ya mahali, kwa sababu kuunganisha tena kunaweza kuuliza kwa mpangilio mwingine:

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

Ukuta ni usafirishaji. Itifaki ya usimamizi ni maandishi wazi juu ya TCP kwenye loopback, kwa hiyo kisikilizaji hakipaswi kuchapishwa kwenye anwani ya LAN au handaki ili kidhibiti cha mbali kifikie; kidhibiti cha mbali kinamaanisha uhamishaji wa SSH, si kifungo kipana. Daemon ya jamii pia hukubali mteja mmoja wa usimamizi kwa mara moja, kwa hiyo GUI au kifuatiliaji hakiwezi kushiriki soketi na script yako. Muunganisho wa pili hukataliwa, haupangwi kwenye foleni, na hitilafu inaonekana kama script iliyokuwa kiziwi.

Soketi hiyo pia ni kituo cha udhibiti. Bila nenosiri la usimamizi, kitu chochote kinachoweza kuunganisha na 127.0.0.1:3030 kinaweza kusoma hali, kuua handaki au kujibu kidokezo yenyewe. Nenosiri la usimamizi na faili ya tambulishi ni siri za tabaka moja, na zote zinastahili uangalifu sawa.

Ipi inafaa usambazaji

Chagua faili ya tambulishi wakati kidokezo pekee ni jozi ya akaunti, mteja anaendesha kama huduma na mmiliki thabiti, na unaweza kushikilia faili ya 600 nje ya nakala ambazo huzidhibiti. Chagua soketi ya usimamizi wakati kaulisiri ya ufunguo au nenosiri la PKCS#12 linahusika, wakati kifuniko tayari kinasimamia mchakato, au wakati unahitaji kutazama hali na vidokezo unapotatua kuunganisha tena.

Masharti mawili huhamisha uamuzi. Ikiwa kifuniko ni /bin/sh, kitengo cha systemd kinachotuma binary moja kwa moja, au kontena ndogo, gundi ya soketi ya bash pekee haipatikani na faili ni jibu la bei nafuu. Ikiwa siri huzunguka mara nyingi, hakuna faili iliyo nyumbani nzuri kwayo: uliza pete ya funguo kutoka kifuniko kidogo na acha kitengo kiite kifuniko, jambo linaloweka mzunguko sehemu moja na nenosiri nje ya historia ya shell.

Uingizwaji wa mchakato unasimama kati ya hizo mbili na si mali ya yoyote. Mstari mmoja hapa chini unafanya kazi kwa sababu bash huipanua kabla openvpn kuanza, si kwa sababu mteja anaelewa sintaksia:

openvpn --config client.ovpn --auth-user-pass <(printf "%s
%s
" "$USER" "$PASS")

Inavunjika chini ya /bin/sh, kwenye kitengo kinachopita pembeni ya shell, na kwenye picha zisizo na bash au /dev/fd. Ihifadhi kwa majaribio ya mwingiliano, kamwe si kama mkataba ambao huduma inautegemea.

Linda siri, kisha thibitisha kutoka kwenye kumbukumbu

Utaratibu wote wawili huacha siri inayosomeka na mchakato wa OpenVPN. Kamwe usiweke nenosiri kwenye mstari wa amri au kwenye faili ya kitengo, ambapo ps na systemctl huionyesha kwa kila mtumiaji wa ndani; pitisha njia ya faili, si thamani iliyo ndani. Pale ambapo vyeti vinaweza kuchukua nafasi ya jozi ya akaunti, hilo huondoa tabaka la kidokezo badala ya kulificha.

Uendeshaji sahihi unaonyesha mfululizo wa vidokezo ukikamilika na kikao kufikia «Initialization Sequence Completed». Ikiwa mteja atasimama kwenye kidokezo kilekile, ulinganishaji umeshindikana: chapisha mistari halisi ambayo soketi ilituma, angalia nukuu na jina la kidokezo, na rekebisha muundo badala ya kuongeza sleep. Handaki inayoripoti mafanikio na haibebi kitu ni tatizo la uelekezaji au push, si la tambulishi.

Kisha jaribu kuunganisha tena, si mwanzo wa kwanza tu. Achilia kikao cha upande wa seva au subiri muda wake uishe; mteja huuliza tena, na hapo faili iliyoonekana sahihi wakati wa kuwasha inaonyesha ikiwa bado inasomeka kwa akaunti inayounganisha tena.

Makala zinazohusiana