E Skript, dat OpenVPN startet an ni verbënnt, ass meeschtens kee Netzwierkproblem: de Client sëtzt un enger Ufuerderung ouni Terminal, fir si ze zeechnen. OpenVPN huet genee zwou ënnerstëtzte Weeër, fir dës Ufuerderung ouni Mënsch ze beäntweren, eng Zougangsdatei hannert auth-user-pass an de Management-Socket, an si sinn net austauschbar. D'Datei kascht eng Direktiv an äntwert op eng Ufuerderung; de Socket äntwert op all Ufuerderung an gëtt allem, wat e Loopback-Port kann opmaachen, e Kontrollkanal ouni Authentifikatioun. Wéi eng an Äi Deployment gehéiert, hänkt dovun of, wéi eng Ufuerderung tatsächlech blockéiert, a wéi ee Geheimnis Dir Iech leeschte kënnt, roueg ze loossen.

Nennt d'Ufuerderung, ier Dir e Mechanismus wielt

Véier Ufuerderunge gesi op engem Terminal d'selwecht aus. D'Kontpaar kënnt aus der PAM- oder auth-user-pass-verify-Konfiguratioun vum Server a gëtt vun auth-user-pass beäntwert. Eng Passphrase fir en private Schlëssel gehéiert zur Schlësseldatei a gëtt iwwer --askpass gelies oder vun Hand getippt. E PKCS#12-Bündel freet no sengem eegene Passwuert. Proxy-Authentifikatioun benotzt d'Auth-Datei, déi --http-proxy hëlt, net d'Kontzougangsdaten.

Wann OpenVPN als Kand vu systemd, PHP oder Node leeft, gëtt et keen Terminal, also blockéiert jiddwereen dovun stëll. De Prozess sëtzt do, de Log stoppt no der Chiffre-Zeil an d'Eenheet leeft um Enn an en Timeout; déi Stëllt ass de Grond, firwat Leit eng Widderhuelungsschleif oder e Sleep dobäisetzen, amplaz nozekucken, wéi eng Ufuerderung nach aussteet. Nëmmen de Management-Socket kann all véier beäntweren. D'Zougangsdatei äntwert op déi éischt an op näischt anescht.

auth-user-pass: eng Datei, eng Ufuerderung

D'Datei hält de Benotzernumm an der éischter Zeil an d'Passwuert an der zweeter, an näischt anescht: keng Anführungszeechen, keng Schlësselnimm, kee Kommentar. Setzt de Modus 600 a maacht den Eigentümer zum Kont, deen openvpn leeft, wat bei engem Service dacks en eegene Benotzer ass an net Ären Login. Eng Datei am Besëtz vun root ënner /root ass den Ënnerscheed tëscht engem Befehl, deen an Ärer Shell funktionéiert, an enger Eenheet, déi beim Start feelt.

Zwee Detailer maachen aus enger korrekter Datei eng Ufuerderung. En Editeur, deen CRLF späichert, léisst e Waggonrécklaf um Passwuert klewen, sou datt de Server e Passwuert refuséiert, dat an der Datei korrekt ausgesäit; préift mat cat -A oder od -c amplaz mam A. An en auth-user-pass ouni Argument am Profil heescht vum Design hier «fro de Benotzer», wat eng zweet Direktiv op der Kommandozeil vläicht net iwwerstëmmt, well de Profil do analyséiert gëtt, wou en läit.

D'Reiefolleg vun den Optiounen ass déi drëtt Fal, an si hänkt vun der Versioun of. E puer OpenVPN 2.4-Builden ignoréieren --auth-user-pass, wann et virun --config steet, sou datt déiselwecht zwou Optiounen an der anerer Reiefolleg verbënnen. Setzt d'Direktiv an de Profil oder op der Kommandozeil hannert --config, a grept de Profil no all Virkommen, ier Dir soss eppes ännert.

auth-nocache gehéiert zu dësem Mechanismus, liwwert awer näischt. Et limitéiert, wéi laang de Client d'Zougangsdaten am Späicher hält, wat no engem Crash hëlleft an iwwerhaapt net, wann d'Datei feelt. Eng Neiverbindung no engem Sessiouns-Timeout op der Serversäit liest d'Datei erëm, sou datt Zougangsdaten, déi beim Start funktionéiert hunn, nach mëttlerweil vum Dag oflafe kënnen.

De Management-Socket: all Ufuerderung, méi Uewerfläch

Start de Client mat engem Lauschterer a sot ausdrécklech, datt Ufuerderungen drop gemellt ginn, mat den Direktiven, déi am OpenVPN-2.6-Handbuch dokumentéiert sinn:

management 127.0.0.1 3030
management-query-passwords

Halt ënner bash d'Verbindung op engem fräie Dateideskriptor a beäntwert no Ufuerderungsnumm amplaz no Positioun, well eng Neiverbindung an enger anerer Reiefolleg froe kann:

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

D'Grenz ass den Transport. De Management-Protokoll ass Kloertext iwwer TCP op Loopback, dofir däerf de Lauschterer net op enger LAN- oder Tunneladress publizéiert ginn, fir datt e Fernsteierung erreecht; eng Fernsteierung heescht eng SSH-Weiderleedung, net eng méi breet Bindung. Den Community-Daemon akzeptéiert och nëmmen ee Management-Client gläichzäiteg, dofir kënnen eng GUI oder e Monitor de Socket net mat Ärem Skript deelen. Déi zweet Verbindung gëtt ofgeleent, net agereiht, an de Feeler gesäit aus wéi e Skript, dat daf ginn ass.

Dee Socket ass och e Kontrollkanal. Ouni Management-Passwuert kann alles, wat sech mat 127.0.0.1:3030 verbënnen kann, de Status liesen, den Tunnel ëmbréngen oder selwer eng Ufuerderung beäntweren. D'Management-Passwuert an d'Zougangsdatei si Geheimnisser vun der selwechter Klass, a béid verdéngen déi selwecht Suergfalt.

Wéi eng zum Deployment passt

Wielt d'Zougangsdatei, wann déi eenzeg Ufuerderung d'Kontpaar ass, de Client als Service mat engem stabile Propriétaire leeft an Dir eng 600-Datei aus Backupe kënnt halen, déi Dir net kontrolléiert. Wielt de Management-Socket, wann eng Schlësselpassphrase oder e PKCS#12-Passwuert am Spill ass, wann de Wrapper de Prozess schonn iwwerwaacht, oder wann Dir de Status an d'Ufuerderunge wëllt kucken, während Dir eng Neiverbindung debuggët.

Zwee Bedéngungen réckelen d'Entscheedung. Wann de Wrapper /bin/sh ass, eng systemd-Eenheet, déi d'Binär direkt opruffe léisst, oder e minimale Container, dann ass de Socket-Klebstoff nëmme fir bash net verfügbar an d'Datei ass déi bëlleg Äntwert. Wann d'Geheimnis dacks rotéiert, ass keng vun den Dateien en gutt Heem dofir: freet e Schlësselrank vun engem klengen Wrapper un a loosst d'Eenheet de Wrapper ruffen, wat d'Rotatioun op enger Plaz hält an d'Passwuert aus der Shell-Historie.

Prozesssubstitutioun steet tëscht béiden an gehéiert zu kengem. Den Eenzeiler hei ënnen funktionéiert, well bash en erweidert, ier openvpn start, net well de Client d'Syntax verstoe géif:

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

Et geet futti ënner /bin/sh, an enger Eenheet, déi d'Shell ëmgeet, an an Image'en ouni bash oder /dev/fd. Hält en fir interaktiv Tester, ni als de Kontrakt, vun deem e Service ofhängeg ass.

Schützt d'Geheimnis, da préift aus dem Log

Béid Mechanismen hannerloossen e Geheimnis, dat den OpenVPN-Prozess liese kann. Setzt d'Passwuert ni op d'Kommandozeil oder an d'Eenheetsdatei, wou ps a systemctl et all lokalem Benotzer weisen; gitt de Wee zu der Datei, net de Wäert doran. Wou Certificaten d'Kontpaar kënnen ersetzen, hëlt dat d'Kategorie vun der Ufuerderung ewech, amplaz se ze verstoppen.

E korrekte Laf weist d'Ufuerderungsserie als ofgeschloss an d'Sessioun, déi «Initialization Sequence Completed» erreecht. Wann de Client bei der selwechter Ufuerderung stoppt, ass d'Vergläichung feelgeschloen: dréckt déi genee Zeilen, déi de Socket geschéckt huet, préift d'Anféierungszeechen an den Ufuerderungsnumm, a verbessert de Muster amplaz e Sleep dobäizesetzen. En Tunnel, deen Erfolleg mellt an näischt iwwerdréit, ass e Routing- oder Push-Problem, kee Zougangsdatenproblem.

Test dann d'Neiverbindung, net nëmmen den éischte Start. Trennt d'Sessioun op der Serversäit oder waart hire Timeout of; de Client freet nach eng Kéier, an do weist eng Datei, déi beim Start korrekt ausgesinn huet, ob se fir de Kont, dee sech nei verbënnt, nach liesbar ass.

Ähnlech Artikelen