Skript li jibda OpenVPN u qatt ma jikkonnettja normalment mhix problema tan-netwerk: il-klijent qiegħed fejn hemm talba mingħajr terminal fejn jista' jpinġiha. OpenVPN għandu eżattament żewġ modi appoġġjati biex iwieġeb dik it-talba mingħajr bniedem, fajl tal-kredenzjali wara auth-user-pass u s-socket tal-ġestjoni, u mhumiex interkambjabbli. Il-fajl jiswa direttiva waħda u jwieġeb talba waħda; is-socket iwieġeb kull talba u jagħti lil kull ħaġa li tista' tiftaħ port loopback kanal ta' kontroll mhux awtentikat. Liema waħda tappartjeni lill-varar tiegħek jiddependi minn liema talba qiegħda tfixkel tassew, u minn liema sigriet tista' taffordja li tħallih fil-kwiet.

Semmi t-talba qabel ma tagħżel mekkaniżmu

Erba' talbiet jidhru l-istess fuq terminal. Il-par ta' kont jiġi mis-setting PAM jew auth-user-pass-verify tas-server u jwieġbu auth-user-pass. Il-frażi ta' sigrieta ta' ċavetta privata tappartjeni lill-fajl taċ-ċavetta u tinqara permezz ta' --askpass jew tittajpja bl-idejn. Pakkett PKCS#12 jitlob password tiegħu stess. L-awtentikazzjoni tal-proxy tuża l-fajl auth li jieħu --http-proxy, mhux il-kredenzjali tal-kont.

Meta OpenVPN jaħdem bħala wild ta' systemd, PHP jew Node m'hemmx terminal, allura kull waħda minn dawn timblokka bil-kwiet. Il-proċess joqgħod hemm, il-log jieqaf wara l-linja taċ-ċifrar u l-unit fl-aħħar tispiċċa fi timeout; dik is-skiet hija r-raġuni għaliex in-nies iżidu ċiklu ta' erġa' pprova jew sleep minflok ma jħarsu lejn liema talba hija pendenti. Is-socket tal-ġestjoni biss jista' jwieġeb l-erbgħa. Il-fajl tal-kredenzjali jwieġeb l-ewwel waħda u xejn aktar.

auth-user-pass: fajl wieħed, talba waħda

Il-fajl iżomm l-isem tal-utent fl-ewwel linja u l-password fit-tieni, u xejn aktar: l-ebda kwotazzjonijiet, l-ebda ismijiet ta' ċwievet, l-ebda kumment. Issettja l-mod 600 u agħmel sid il-kont li jmexxi openvpn, li għal servizz spiss huwa utent iddedikat u mhux il-login tiegħek. Fajl proprjetà ta' root taħt /root hija d-differenza bejn kmand li jaħdem fil-shell tiegħek u unit li tfalli waqt il-boot.

Żewġ dettalji jbiddlu fajl korrett f'talba. Editur li jissalva CRLF iħalli ritorn tal-karrettun imwaħħal mal-password, allura s-server jiċħad password li fil-fajl tidher korretta; iċċekkja b'cat -A jew od -c minflok bl-għajn. U auth-user-pass bla argument ġewwa l-profil ifisser «staqsi lill-utent» skont id-disinn, li direttiva oħra fil-linja tal-kmand forsi ma tistax tegħleb, għax il-profil jiġi analizzat fejn jinsab.

L-ordni tal-għażliet hija t-tielet nassa, u tiddependi mill-verżjoni. Xi builds ta' OpenVPN 2.4 jinjoraw --auth-user-pass meta jkun qabel --config, allura l-istess żewġ għażliet fl-ordni l-oħra jikkonnettjaw. Poġġi d-direttiva fil-profil, jew wara --config fil-linja tal-kmand, u grep il-profil għal kull okkorrenza qabel ma tbiddel xi ħaġa oħra.

auth-nocache jappartjeni għal dan il-mekkaniżmu imma ma jfornix xejn. Jimmilita kemm idum il-klijent iżomm il-kredenzjali fil-memorja, li jgħin wara crash u xejn meta l-fajl ikun nieqes. Erġa' konnessjoni wara timeout tas-sessjoni fuq in-naħa tas-server terġa' taqra l-fajl, allura kredenzjali li ħadmet fil-boot xorta tista' tiskadi f'nofs il-jum.

Is-socket tal-ġestjoni: kull talba, aktar wiċċ

Ibda l-klijent b'listener u ddikjara b'mod espliċitu li t-talbiet jiġu rrappurtati fuqu, bl-użu tad-direttivi dokumentati fil-manwal ta' OpenVPN 2.6:

management 127.0.0.1 3030
management-query-passwords

Mill-bash, żomm il-konnessjoni fuq deskrittur tal-fajl żejjed u wieġeb bl-isem tat-talba mhux bil-pożizzjoni, għax erġa' konnessjoni tista' tistaqsi b'ordni differenti:

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

Il-konfini huwa t-trasport. Il-protokoll tal-ġestjoni huwa test ċar fuq TCP fuq loopback, allura l-listener m'għandux jiġi ppubblikat fuq indirizz LAN jew tunnel biex kontrollur remot jilħaqha; kontrollur remot ifisser trasferiment SSH, mhux rabta usa'. Id-daemon tal-komunità jaċċetta wkoll klijent wieħed tal-ġestjoni kull darba, allura GUI jew monitor ma jistgħux jaqsmu s-socket mal-iskript tiegħek. It-tieni konnessjoni tiġi miċħuda, mhux imqiegħda fil-kju, u l-falliment jidher bħal skript li sar trux.

Dak is-socket huwa wkoll kanal ta' kontroll. Mingħajr password tal-ġestjoni, kull ħaġa li tista' tikkonnettja ma' 127.0.0.1:3030 tista' taqra status, toqtol it-tunnel jew twieġeb talba hi stess. Il-password tal-ġestjoni u l-fajl tal-kredenzjali huma sigrieti tal-istess klassi, u t-tnejn jixirqilhom l-istess ħarsien.

Liema waħda taqbel mal-varar

Agħżel il-fajl tal-kredenzjali meta l-unika talba hija l-par ta' kont, il-klijent jaħdem bħala servizz b'sid stabbli, u tista' żżomm fajl 600 barra minn backups li ma tikkontrollax. Agħżel is-socket tal-ġestjoni meta jkun hemm frażi ta' sigrieta ta' ċavetta jew password PKCS#12, meta l-wrapper diġà jissorvelja l-proċess, jew meta jkollok bżonn tosserva status u talbiet waqt li tiddenebbugja erġa' konnessjoni.

Żewġ kundizzjonijiet iċaqalqu d-deċiżjoni. Jekk il-wrapper huwa /bin/sh, unit systemd li ssejjaħ il-binarju direttament, jew kontenitur minimu, il-kolla tas-socket għall-bash biss mhijiex disponibbli u l-fajl huwa t-tweġiba irħas. Jekk is-sigriet idur ta' spiss, l-ebda fajl mhu dar tajba għalih: staqsi ċirku taċ-ċwievet minn wrapper żgħir u ħalli l-unit issejjaħ il-wrapper, li jżomm ir-rotazzjoni f'post wieħed u l-password barra mill-istorja tas-shell.

Is-sostituzzjoni tal-proċess tinsab bejn it-tnejn u ma tappartjeni lil ħadd. Il-linja waħda hawn taħt taħdem għax bash jestendiha qabel ma jibda openvpn, mhux għax il-klijent jifhem is-sintassi:

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

Tinkiser taħt /bin/sh, f'unit li tgħaddi minn ġenb is-shell, u f'immaġini bla bash jew /dev/fd. Żommha għal testijiet interattivi, qatt bħala l-kuntratt li servizz jiddependi fuqu.

Ipproteġi s-sigriet, imbagħad ivverifika mil-log

Iż-żewġ mekkaniżmi jħallu sigriet li l-proċess OpenVPN jista' jaqra. Qatt tqiegħed il-password fuq il-linja tal-kmand jew fil-fajl tal-unit, fejn ps u systemctl juruha lil kull utent lokali; għaddi l-mogħdija lejn il-fajl, mhux il-valur fih. Fejn iċ-ċertifikati jistgħu jissostitwixxu l-par ta' kont, dan ineħħi l-kategorija tat-talba minflok jaħbiha.

Ġirja tajba turi s-sekwenza tat-talbiet titlesta u s-sessjoni tasal għal «Initialization Sequence Completed». Jekk il-klijent jieqaf fl-istess talba, it-tqabbil falla: ipprintja l-linji eżatti li bagħat is-socket, iċċekkja l-kwotazzjonijiet u l-isem tat-talba, u sewwi l-mudell minflok ma żżid sleep. Tunnel li jirrapporta suċċess u ma jġorr xejn hija problema ta' routing jew push, mhux ta' kredenzjali.

Imbagħad ipprova erġa' konnessjoni, mhux biss l-ewwel tluq. Aqta' s-sessjoni fuq in-naħa tas-server jew stenna t-timeout tagħha; il-klijent jerġa' jistaqsi, u hemmhekk fajl li deher korrett fil-boot juri jekk għadux jinqara mill-kont li jerġa' jikkonnettja.

Artikli relatati