Cisco AnyConnectin mukana tuleva vpn-asiakas käyttäytyy kuin keskustelu: se tulostaa kehotteen, odottaa riviä ja tulostaa sitten seuraavan. Syötä tuo keskustelu tiedostosta tai putkesta, niin sama binääri toimii ilman valvontaa. Tekniikka on yksi uudelleenohjaus ja järjestetty vastauslista, ja lista, ei uudelleenohjaus, ratkaisee, onko skripti luotettava.

Kaksi asiaa rikkoo sen käytännössä. Kehotteiden järjestys muuttuu, kun yhdyskäytävä kysyy jotain ylimääräistä, ja tallennettu salasana muuttaa yhden kirjoitusvirheen tilin lukitukseksi. Kohtele jaksoa versioituna datana, jonka voit vertailla jokaisen yhdyskäytävän muutoksen jälkeen. Epäonnistu äänekkäästi sen sijaan että yrittäisit uudelleen, sillä silmukka on juuri se tapa, jolla väärin kirjoitettu salasana muuttuu lukituksi tiliksi.

Yksi jakso siinä järjestyksessä, jossa asiakas kysyy

Aja asiakas kerran interaktiivisesti ja kirjoita jokainen kehote muistiin siinä järjestyksessä kuin se ilmestyy. Tuosta transkriptistä tulee vastaustiedosto. Kun ohjaat tiedoston binääriin, ensimmäisen rivin on oltava itse yhteyskäsky, siksi jakso alkaa isäntänimellä eikä käyttäjänimellä.

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

Pelkkä 0 valitsee ensimmäisen yhteysprofiilin, kun yhdyskäytävä tarjoaa listan; käytä sitä indeksiä, jonka yhdyskäytäväsi tulostaa. y hyväksyy kirjautumisbannerin, joten poista tuo rivi, jos banneria ei ole, ja lisää rivi sinne, missä yhdyskäytäväsi kysyy lisäkysymyksen. Lopussa oleva exit on se, mikä antaa asiakkaan lopettaa siististi, kun viimeinen vastaus on kulutettu.

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

Ei-interaktiivinen tila ei ole tässä valinnainen. Ilman -s asiakas voi ottaa päätelaitteen haltuunsa ja jättää uudelleenohjatun syötteen huomiotta; sen kanssa vastaukset luetaan virrasta ja prosessi palaa. Missä binääri tarvitsee korotetut oikeudet, kääri kutsu sudo -n-komentoon, jotta skripti epäonnistuu heti sen sijaan että jumittuisi salasanakehotteeseen.

Missä vastaustiedosto vuotaa

Salasanan sisältävä tiedosto on tunnistetieto, joten anna sille sellaisen oikeudet: tila 600, työn suorittavan tilin omistuksessa, eikä koskaan jaetussa tai synkronoidussa hakemistossa. Luo se tilassa, joka on jo asetettu, sen sijaan että korjaisit sen jälkeenpäin, sillä tiedosto on hetken kaikkien luettavissa kirjoituksen ja chmodin välillä.

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

Toinen puoli on argv. Argumenttina välitetty salasana näkyy jokaiselle paikalliselle käyttäjälle, joka listaa prosesseja, ja se päätyy myös komentotulkin historiaan. Lue se sen sijaan tiedostokuvaajasta tai ympäristömuuttujasta ja laita hyötykuorma lainausmerkkeihin, jotta komentotulkki ei voi laajentaa mitään sen sisällä.

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

Varo lainausmerkkejä. Kaksoislainausmerkkien sisällä komentotulkki voi laajentaa salasanan, joka sisältää !, ennen kuin asiakas edes näkee sen, ja virhe saapuu yleisenä event-not-found-virheenä, joka näyttää protokollaongelmalta.

Todista tunneli ja sulje se sitten

Yhdistetty tila todistaa vain, että asiakas uskoo omaavansa istunnon. Valitse isäntä, joka vastaa vain yritysverkon sisältä, ja testaa se kerran ennen kuin teet mitään muuta. Epäonnistuminen siinä on reititys- tai käytäntövika, eikä kirjautumisen uudelleenajo muuta sitä.

/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

Tarkista tilan tuloste ennen yhteyden katkaisua ja sen jälkeen. Vanhentuneen istunnon kanssa jätetty asiakas voi hylätä seuraavan yhteyden, kun skripti yhä raportoi onnistumisesta, ja tämä vikatila on näkymätön, jos katsot vain poistumiskoodeja. Vertaa kahta lukemaa sen sijaan että luottaisit toiseen yksinään. Komentotulkin profiilin aliakset riittävät päivittäiseen käyttöön, kun taas kaikki ajastettu ansaitsee saman tunnistetietojen ja identiteetin tarkastuksen kuin mikä tahansa muu valvomaton työ.

Kun kiinteä lista lakkaa olemasta turvallinen

Vastaustiedosto koodaa tämänhetkisen kehotteiden järjestyksen. Muuttunut banneri, pakotettu salasanan vaihto tai toisen tekijän haaste muuttavat sen silmukaksi, joka voi lukita tilin, siksi skriptin on poistuttava ensimmäisestä odottamattomasta vastauksesta sen sijaan että se käynnistyisi uudelleen.

Tallenna se, mitä asiakas tulosti, palauta nollasta poikkeava tila ja jätä päätös kutsujalle. Siellä missä yhdyskäytävä vaatii toisen tekijän, rehellinen vastaus on, että valvomaton kirjautuminen ei ole saatavilla sille profiilille, ei se, että jakso tarvitsee vielä yhden rivin.

Rotaatio kuuluu samaan tarkastukseen. Jos tunnistetieto tallennetaan, päätä kuka voi lukea sen, milloin se vaihtuu ja mikä poistaa sen, kun isäntä rakennetaan uudelleen. Skripti, joka toimii vuoden, koska kukaan ei koskenut salasanaan, ei ole suunnittelu vaan onnettomuus, joka odottaa rotaatiokäytäntöä.

Profiilit, jotka eivät ole AnyConnect

Kaksi vanhempaa Cisco-tunnistetietotyyliä sekoitetaan tähän. Profiili vpnc kysyy IPSec ID:tä, joka on oikeasti ryhmän nimi, sitten ryhmäsalaisuutta, sitten omia tunnistetietojasi, ja kaikki kolme tulevat siltä, joka ylläpitää yhdyskäytävää. Vanha Cisco IPsec on eri protokolla kuin AnyConnect, joten vpnc ei tavoita vain-AnyConnect-palvelua; openconnect --protocol=anyconnect on avoin asiakasohjelma tuohon työhön.

Tiedosto .pcf kuvaa vanhemman asiakasprofiilin. Sen sisältämä isäntä, ryhmän nimi ja ryhmäsalasana voidaan syöttää uudelleen käsin asiakkaaseen, joka puhuu Cisco IPseciä, vaikka tiedosto ei ole yleinen tuonti ja mikä tahansa ei-oletusportti tai tunnelointitila yleensä katoaa siirrossa.

Aloita siitä, mitä yhdyskäytävä todella tarjoaa, ja valitse sitten asiakas, joka puhuu tuota protokollaa. Profiilin kopioiminen toiselta sivustolta on se tapa, jolla ihmiset päätyvät selvittämään tunnistetietoja, jotka eivät koskaan olleet ongelma.

Aiheeseen liittyvät artikkelit