Die vpn-kliënt wat saam met Cisco AnyConnect kom, werk soos ’n gesprek: dit druk ’n opdraglyn, wag vir ’n reël en druk dan die volgende een. Voer daardie gesprek vanaf ’n lêer of ’n pyp in en dieselfde binêre program loop sonder toesig. Die tegniek is een herleiding plus ’n geordende lys antwoorde, en dit is die lys, nie die herleiding nie, wat besluit of die skrip betroubaar is.

Twee dinge breek dit in die praktyk. Die volgorde van die opdragte verskuif wanneer ’n gateway iets ekstra vra, en ’n gestoorde wagwoord maak van een tikfout ’n rekeninguitsluiting. Behandel die reeks as weergawebeheerde data wat jy ná enige gateway-verandering kan diff. Misluk hardop eerder as om te herprobeer, want ’n lus is presies hoe ’n verkeerd getikte wagwoord ’n geslote rekening word.

Een reeks, in die volgorde wat die kliënt vra

Voer die kliënt een keer interaktief uit en skryf elke opdrag neer in die volgorde waarin dit verskyn. Daardie transkripsie word die antwoordlêer. Wanneer jy die lêer in die binêre program herlei, moet die eerste reël die verbindingsopdrag self wees, en daarom begin die reeks met ’n gasheernaam eerder as ’n gebruikersnaam.

connect vpn.example.com
0
<username>
<password>
y
exit

Die kaal 0 kies die eerste verbindingsprofiel wanneer die gateway ’n lys bied; gebruik watter indeks jou gateway ook al druk. Die y aanvaar ’n aanmeldingsbanier, so skrap daardie reël as daar geen banier is nie en voeg een in waar jou gateway ’n bykomende vraag vra. Die exit aan die einde is wat die kliënt netjies laat termineer wanneer die laaste antwoord verbruik is.

/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Nie-interaktiewe modus is hier nie opsioneel nie. Sonder -s kan die kliënt die terminale oorneem en herleide invoer ignoreer; daarmee word die antwoorde uit die stroom gelees en die proses keer terug. Waar die binêre program verhoogde voorregte nodig het, draai die aanroep in sudo -n sodat die skrip dadelik misluk eerder as om op ’n wagwoordopdrag te blokkeer.

Waar die antwoordlêer lek

’n Lêer wat ’n wagwoord bevat, is ’n geloofsbrief, so gee dit die regte van een: modus 600, besit deur die rekening wat die taak uitvoer, en nooit in ’n gedeelde of gesinkroniseerde gids nie. Skep dit met die modus reeds toegepas eerder as om dit agterna reg te maak, want ’n lêer is kortstondig wêreldleesbaar tussen die skryf en die chmod.

install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config

Die ander helfte is argv. ’n Wagwoord wat as argument deurgegee word, is sigbaar vir elke plaaslike gebruiker wat prosesse lys, en dit beland ook in die shell-geskiedenis. Lees dit eerder uit ’n lêedeskriptor of ’n omgewingsveranderlike, en quote die vrag sodat die shell niks daarbinne kan uitbrei nie.

printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
  | sudo -n /opt/cisco/anyconnect/bin/vpn -s

Let op die quoting. Binne dubbele aanhalingstekens kan ’n wagwoord met ! deur ’n interaktiewe shell uitgebrei word voordat die kliënt dit ooit sien, en die fout kom as ’n generiese event-not-found-fout wat soos ’n protokolprobleem lyk.

Bewys die tonnel, sluit dit dan

’n Verbinde toestand bewys net dat die kliënt glo hy het ’n sessie. Kies ’n gasheer wat net van binne die korporatiewe netwerk antwoord en toets dit een keer voordat jy enigiets anders doen. ’n Fout daar is ’n roeterings- of beleidsfout, en om die aanmelding weer te hardloop sal dit nie verander nie.

/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect

Kontroleer die toestand-uitset voor en ná die ontkoppeling. ’n Kliënt wat met ’n verouderde sessie gelaat word, kan die volgende verbinding weier terwyl die skrip steeds sukses rapporteer, en daardie foutmodus is onsigbaar as jy net na afloopkodes kyk. Vergelyk die twee lesings eerder as om die tweede een op sy eie te vertrou. Aliase in ’n shell-profiel is genoeg vir daaglikse gebruik, terwyl enigiets geskeduleer dieselfde geloofsbrief- en identiteitshersiening verdien as enige ander onbewaakte taak.

Wanneer ’n vaste lys nie meer veilig is nie

’n Antwoordlêer kodeer vandag se opdragvolgorde. ’n Veranderde banier, ’n gedwonge wagwoordverandering of ’n tweefaktor-uitdaging verander dit in ’n lus wat die rekening kan sluit, en daarom moet die skrip by die eerste onverwagte antwoord uitgaan eerder as om te herbegin.

Vang wat die kliënt gedruk het, gee ’n nie-nul status terug en laat die oproeper besluit. Waar die gateway ’n tweede faktor eis, is die eerlike antwoord dat ’n onbewaakte aanmelding nie vir daardie profiel beskikbaar is nie, nie dat die reeks nog een reël nodig het nie.

Rotasie hoort in dieselfde hersiening. As die geloofsbrief gestoor word, besluit wie dit kan lees, wanneer dit verander en wat dit verwyder wanneer die gasheer herbou word. ’n Skrip wat ’n jaar lank werk omdat niemand die wagwoord aangeraak het nie, is nie ’n ontwerp nie; dit is ’n ongeluk wat op ’n rotasiebeleid wag.

Profiele wat nie AnyConnect is nie

Twee ouer Cisco-geloofsbriefstyle word met hierdie een verwar. ’n vpnc-profiel vra vir ’n IPSec ID, wat eintlik die groepsnaam is, dan ’n groepgeheim, dan jou eie geloofsbriewe, en al drie kom van wie die gateway bestuur. Legacy Cisco IPsec is ’n ander protokol as AnyConnect, so vpnc kan nie ’n AnyConnect-only diens bereik nie; openconnect --protocol=anyconnect is die oop kliënt vir daardie werk.

’n .pcf-lêer beskryf die ouer kliëntprofiel. Die gasheer, die groepsnaam en die groepwagwoord daarin kan met die hand weer ingevoer word in ’n kliënt wat Cisco IPsec praat, hoewel die lêer geen universele invoer is nie en enige nie-standaard poort of tonnelmodus gewoonlik in die oordrag verdwyn.

Begin by wat die gateway werklik bied, kies dan die kliënt wat daardie protokol praat. Om ’n profiel van ’n ander site te kopieer is hoe mense uiteindelik geloofsbriewe ontfout wat nooit die probleem was nie.

Verwante artikels