In profyl dat earder starte, mislearret no mei in opsjeflater, en de rigel dy’t de parser oanhellet liket op it skerm folslein ridlik. Dat is de falstrik: in konfiguraasjebestân is in list fan fysike rigels, elk mei ien opsjeskaaiwurd en syn arguminten, en in lange rigel dy’t troch in bewurker ôfbrutsen wurdt liket identyk oan twa rigels oant jo nei de bytes sjogge. Neat oan it netwurk, it sertifikaat of de tunnel is by dizze klasse fan flaters belutsen. Twa rigels dy’t op it skerm identyk lykje, kinne troch ien inkele byte ferskille.

Wurkje de kontrôles hjirûnder yn folchoarder ôf en stop by de earste dy’t mislearret. Elk is goedkeaper as de folgjende, en elk slút in oare ferklearring út.

Ien rigel, ien ynstruksje

De parser lêst in rigel, nimt it earste wurd as de opsje en behannelet de rest as arguminten fan dy opsje. In rigel lykas cert server.crt port 1194 binne dus net twa ynstruksjes efterinoar. It is ien cert-opsje mei trije arguminten, en it tredde is gjin bestânsnamme dy’t de opsje akseptearret. De flater lêze as in ûntbrekkende nije rigel is goed; him lêze as in ûntbrekkende ynstruksje is dat net.

# malformed: one option, three arguments
cert server.crt port 1194

# intended: two options, one argument each
cert server.crt
port 1194

Dy twa korrizjearre rigels binne in fragmint, gjin konfiguraasje. Se besteane om te sjen te jaan wêr’t de grins heart. Elke gewoane ynstruksje yn in profyl folget deselde regel, en in rigel dy’t twa dêrfan ferbynt, produsearret of in argumintflater of in wearde dy’t de opsje net ferwachte.

Bewiisje dat it rigelbrek echt is

Bewurkers brekke ôf foar werjaan. Guon tafoegje ek hurde brekken as jo plakke, en guon net, sadat itselde fisuele resultaat út twa hiel ferskillende bestannen komme kin. Toan de rigeleinen en tel de rigels foardat jo wat feroarje. Mjitten kostet ien opdracht; rieden kostet in jûn.

cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf

Yn de earste útjefte ferskynt elk echt rigelbrek as in $-markearring, sadat in ôfbrutsen mar net splitste rigel gjin markearring toant wêr’t jo skerm ôfbrekt. De twadde opdracht printsje nûmere rigels, wat de fluchste manier is om te fergelykjen wat de parser rapportearret mei wat it bestân befettet.

Ekstra spaasjes meitsje ek gjin ynstruksje. Ynspringing is kosmetysk, en in rigel dy’t mei wite romte begjint is noch altyd deselde inkele opsje. As de flatermelding nei in rigelnûmer wiist, lês dan krekt dy rigel ynstee fan de paragraaf dêr’t er by heart.

Oanhelje in paad, gjin list fan ynstruksjes

Oanheltingstekens besteane foar arguminten mei spaasjes, net foar it groepearjen fan opsjes. In sertifikaatpaad mei in spaasje hat syn eigen oanheltingstekens nedich; twa ynstruksjes dy’t ien pear oanheltingstekens diele, binne noch altyd ien ferkearde rigel.

cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"

Kontrolearje de opsjenammen tagelyk mei de yndieling, want in gearfoege rigel kin in leauwensweardich token produsearje dat nea bestien hat. De poarte-ynstruksje is port; in profyl dat wat oars brûkt foar itselde idee sil mislearje sels nei’t de rigelgrinzen korrizjearre binne. As in namme ûnbekend liket, fergelykje him dan mei de opsjelist foar de ferzje dy’t jo draaie ynstee fan mei in foarbyld fan in forum.

Hâld inline-blokken as blokken

Profyls kinne sertifikaten en kaaien inline drage, en dy blokken binne gegevens ynstee fan konfiguraasje. De PEM-rigels binnen in blok binne gjin opsjes om plat te meitsjen, op ’e nij yn te springen of gear te foegjen, en de blokmarkearrings moatte op har eigen rigels bliuwe.

Behannelje in inline-blok as in ûntrochsichtich gebiet: korrizjearje de opsjerigels deromhinne, lit de ynhâld byte foar byte gewurde, en plak it nea yn in iepenbiere stipe-thread. As in opmaakark it blok oanskreaun hat, restaurearje it dan út jo PKI ynstee fan it mei de hân te meitsjen.

Meitsje de lytste seksje, net it sjabloan

De ferloklike reparaasje is it hiele bestân te ferfangen troch in konfiguraasje út in hânlieding dy’t „wurket”. Dat ruilet ien ferkearde rigel foar in set beliedswizigings dy’t nimmen neisjoen hat: oare DH-parameters, kompresje-ynstellingen, siferkar, dûbele harkers. It oarspronklike probleem is lyts en lokaal, en de ferfanging is dat gjin fan beide.

Kopiearje it profyl nei in beskerme wurkbestân, korrizjearje de rigelgrinzen yn dy kopy, en lit de normale eigner fan ’e tsjinst it lade. Start dan de eksimplaar en lês de earste flater, as dy der is, fan it begjin ôf.

openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log

As de parsefaze slagget, sil de folgjende flater oer in bestân, in sertifikaat of in sifer gean ynstee fan oer wurdskat, en dat is echte foarútgong. Hâld de wurkkopy en in notysje fan ien rigel by oer wat gearfoege is; deselde plakkaai sil wer by immen oars yn itselde team barre.

Relatearre artikelen