Meta skript client-connect joħroġ b’kod li mhux żero, OpenVPN jiċħad il-klijent, u l-operaturi normalment jassumu li l-iskript client-disconnect li jikkorrispondi jpoġġi kollox f’postu. Spiss ma jaħdimx xejn, għax l-ipproċessar tad-disconnect jiddependi fuq dak li rnexxielha tlestiet il-fażi connect. Li tittratta ċ-ċaħda u r-rollback bħala mekkaniżmu wieħed huwa dak li jbiddel login fallut f’regola tal-firewall li nqabdet jew f’rekord orfni. Dawn huma żewġ obbligi separati, u waħda biss minnhom hija awtomatika. Aqra l-passaġġ tal-ħruġ tal-hook stess qabel ma tagħti l-ħtija lis-server talli ħalla stat warajh.

Ħruġ li mhux żero jiċħad il-klijent; ma jġibx lura x-xogħol tiegħek

L-istat tal-ħruġ ta’ client-connect huwa deċiżjoni ta’ ammissjoni. Żero jfisser ammetti, kull ħaġa oħra tfisser iżżarma l-istanza qabel ma tkun stabbilita għal kollox. Xejn f’dak il-kuntratt ma jeżamina dak li l-iskript diġà għamel lid-dinja ta’ barra. Jekk l-iskript żied regola ta’ iptables, kiteb ringiela jew għolla kontatur, dawk il-bidliet jgħaddu miċ-ċaħda.

L-istess asimmetrija tapplika għall-plugins, fejn diversi funzjonijiet connect jistgħu jaħdmu għal istanza waħda. Falliment aktar tard ma jikkanċellax b’mod retroattiv suċċess preċedenti, u l-funzjoni preċedenti m’għandha l-ebda mod kif issir taf li funzjoni oħt falliet.

Iċ-ċaħda hija awtomatika, it-tindif mhuwiex

Il-manwal ta’ OpenVPN 2.6 jorbot l-ipproċessar ta’ client-disconnect mal-fatt li l-ipproċessar connect preċedenti rnexxa. Eċċezzjoni dokumentata tkopri katini kaskata: jekk pass connect diġà rritorna suċċess, il-passi disconnect korrispondenti xorta jaħdmu meta l-istanza tiġi żarmata, anki jekk pass connect aktar tard falla. Dik l-eċċezzjoni hija dejqa u tiddependi minn kemm huma kkonfigurati callbacks, għalhekk ittestjar ta’ skript shell wieħed ma jgħidlek xejn dwar katina.

Iċċekken il-konfigurazzjoni attwali qabel ma tfassal madwarha: liema skript, liema plugin u f’liema ordni jaħdmu. It-tabella hawn taħt telenka dak li tħalli warajha tħejjija nofs lesta.

What the hook did before failingWhat the client seesWhat stays behind
Created a firewall entryA rejection, with no tunnelA rule matching an address nobody owns
Wrote a state rowA rejection, with no tunnelA record of a session that never started
Allocated a tunnel addressA rejection, with no tunnelAn address marked busy until something releases it

Kull ringiela tispiċċa bl-istess mod għall-klijent u b’mod differenti għall-host. Il-klijent ma jistax jgħid liema minnhom seħħet, għalhekk il-hook irid iġib lura dak li għamel qabel ma jirritorna l-istat tal-falliment.

Ikkumpensa fi ħdan l-iskript li falla

Ivvalida kulma tista’ qabel ma tmiss stat kondiviż: l-oqsma taċ-ċertifikat, id-disponibbiltà tal-indirizz, il-grupp li jagħmel parti minnu l-klijent. L-irħas ċaħda hija dik li sseħħ qabel kwalunkwe allokazzjoni. Ladarba t-tħejjija tkopri diversi operazzjonijiet esterni, żomm rekord ta’ liema tlestew u ġibhom lura fl-ordni inversa qabel ma tirritorna l-istat tal-falliment.

Każ konkret: l-iskript joħloq entrata tal-firewall għal kull klijent, imbagħad ifalli milli jikteb ir-ringiela tal-istat li tiddeskriviha. Il-fergħa li tfalli għandha tneħħi l-entrata li għadha kif ħolqot u mbagħad toħroġ b’kod li mhux żero. Li tistenna avveniment disconnect li forsi qatt ma jiġi skedat huwa kif regola tgħix aktar mis-sessjoni li kienet maħsuba għaliha.

Agħmel il-kumpens idempotenti u b’sid

It-tindif irid ikun sigur li jiġi eżegwit darbtejn u preċiż dwar x’jista’ jħassar. Avveniment tard minn attentat preċedenti m’għandux ineħħi l-allokazzjoni ta’ sessjoni aktar ġdida biss għax it-tnejn jaqsmu isem komuni jew indirizz ta’ mina riċiklat. Irreġistra l-handle jew l-id tal-operazzjoni speċifika mar-riżorsa, u ħassar b’dik il-kjavi mhux bl-isem. Tranżazzjonijiet tal-bażi tad-dejta jgħinu biss bil-bidliet tal-bażi tad-dejta stess; regola tal-firewall barra minn dik il-konfini teħtieġ pass ta’ kumpens espliċitu.

Assumi li l-proċess jista’ jmut bejn il-bidla u t-tindif, u żid rikonċiljatur li jqabbel l-istat estern mal-lista tal-klijenti ammessi skont skeda.

Ittestja t-tliet mogħdijiet li verament ivarjaw

Ipprattika tliet każijiet: ċaħda qabel ma jiġi allokat xejn, waħda wara allokazzjoni parzjali, u sessjoni ammessa normali li tispiċċa aktar tard. Dawk it-tlieta jipproduċu linji tal-log differenti u residwi differenti. Ivverifika l-istat estern wara kull waħda, mhux biss il-messaġġ tal-falliment tal-klijent, għax il-falliment tal-klijent huwa r-riżultat mistenni f’żewġ minn tlieta.

Irreġistra l-fażi tal-hook, l-istat tal-ħruġ u x’ġie allokat jew rilaxxat, mingħajr il-kredenzjali. Log tal-hook li jsemmi r-riżorsa li ħoloq huwa dak li jagħmel regola maqbuda tinstab sitt xhur wara.

Artikli relatati