Falliment client-connect f’OpenVPN: it-tindif fid-disconnect huwa garantit?
Klijent miċħud ma jġibx lura regola tal-firewall jew rekord miktub. Qabbel il-kuntratt tas-callback mar-rollback li l-hook tiegħek irid jagħmel waħdu.
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 failing | What the client sees | What stays behind |
|---|---|---|
| Created a firewall entry | A rejection, with no tunnel | A rule matching an address nobody owns |
| Wrote a state row | A rejection, with no tunnel | A record of a session that never started |
| Allocated a tunnel address | A rejection, with no tunnel | An 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.