AnyConnect na Linuxu: sigurno skriptiranje slijeda prijave
AnyConnect vpn binarna datoteka čita odgovore sa stdin, i to je dovoljno za ponovljivu prijavu. Izgradi slijed, zaštiti datoteku, provjeri i zaustavi se.
vpn klijent koji dolazi uz Cisco AnyConnect ponaša se poput razgovora: ispiše upit, pričeka redak, a zatim ispiše sljedeći. Ako taj razgovor dovedete iz datoteke ili cijevi, ista binarna datoteka radi bez nadzora. Tehnika je jedno preusmjeravanje i uređen popis odgovora, a o pouzdanosti skripte odlučuje popis, a ne preusmjeravanje.
U praksi to kvare dvije stvari. Redoslijed upita se pomakne kad gateway zatraži nešto dodatno, a spremljena zaporka pretvori jednu tipfeleru u zaključavanje računa. Tretirajte slijed kao verzionirane podatke koje možete usporediti nakon svake promjene gatewaya. Padajte glasno umjesto ponovnog pokušaja, jer petlja je upravo način na koji pogrešno upisana zaporka postaje zaključan račun.
Jedan slijed, redom kojim klijent traži
Pokrenite klijent jednom interaktivno i zapišite svaki upit redom kojim se pojavljuje. Taj zapis postaje datoteka odgovora. Kad datoteku preusmjerite u binarnu datoteku, prvi redak mora biti sama naredba za povezivanje, zato slijed počinje imenom hosta, a ne korisničkim imenom.
connect vpn.example.com
0
<username>
<password>
y
exit
Goli 0 odabire prvi profil veze kad gateway ponudi popis; upotrijebite indeks koji ispiše vaš gateway. y prihvaća banner za prijavu, pa izbrišite taj redak ako bannera nema i umetnite ga gdje vaš gateway postavlja dodatno pitanje. exit na kraju omogućuje klijentu čisto zatvaranje kad je posljednji odgovor potrošen.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
Neinteraktivni način ovdje nije opcionalan. Bez -s klijent može preuzeti terminal i ignorirati preusmjereni unos; s njim se odgovori čitaju iz toka i proces se vraća. Gdje binarna datoteka traži povišene ovlasti, zamotajte poziv u sudo -n kako bi skripta odmah pala umjesto da se blokira na upitu za zaporku.
Gdje datoteka odgovora curi
Datoteka sa zaporkom je vjerodajnica, pa joj dajte ovlasti vjerodajnice: način 600, u vlasništvu računa koji izvodi posao i nikada unutar dijeljenog ili sinkroniziranog direktorija. Stvorite je s već primijenjenim načinom umjesto da je popravljate naknadno, jer je datoteka nakratko čitljiva svima između upisa i chmoda.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
Druga polovica je argv. Zaporka predana kao argument vidljiva je svakom lokalnom korisniku koji izlistava procese, a završi i u povijesti ljuske. Čitajte je iz opisnika datoteke ili varijable okoline umjesto toga i stavite teret u navodnike kako ljuska ne bi mogla ništa unutar njega proširiti.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Pazite na navodnike. Unutar dvostrukih navodnika zaporku koja sadrži ! može proširiti interaktivna ljuska prije nego što je klijent uopće vidi, a pogreška dolazi kao općenita event-not-found pogreška koja izgleda kao problem protokola.
Dokažite tunel, pa ga zatvorite
Stanje povezanosti dokazuje samo da klijent vjeruje da ima sesiju. Odaberite host koji odgovara samo iz korporativne mreže i provjerite ga jednom prije bilo čega drugoga. Neuspjeh ondje je greška usmjeravanja ili politike i ponovno pokretanje prijave to neće promijeniti.
/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
Provjerite izlaz stanja prije i nakon prekida veze. Klijent ostavljen sa zastarjelom sesijom može odbiti sljedeću vezu dok skripta još javlja uspjeh, a taj način neuspjeha nevidljiv je ako gledate samo izlazne kodove. Usporedite oba čitanja umjesto da vjerujete drugome samome. Alijasi u profilu ljuske dovoljni su za svakodnevnu upotrebu, dok sve zakazano zaslužuje isti pregled vjerodajnica i identiteta kao i svaki drugi posao bez nadzora.
Kad fiksni popis prestane biti siguran
Datoteka odgovora kodira današnji redoslijed upita. Promijenjeni banner, prisilna promjena zaporke ili izazov drugog faktora pretvaraju je u petlju koja može zaključati račun, zato skripta mora izaći na prvi neočekivani odgovor umjesto da se ponovno pokrene.
Zabilježite što je klijent ispisao, vratite status različit od nule i prepustite odluku pozivatelju. Gdje gateway zahtijeva drugi faktor, iskren odgovor je da prijava bez nadzora nije dostupna za taj profil, a ne da slijedu treba još jedan redak.
Rotacija pripada istom pregledu. Ako se vjerodajnica pohranjuje, odlučite tko je može čitati, kada se mijenja i što je uklanja kad se host ponovno izgradi. Skripta koja radi godinu dana jer nitko nije dirao zaporku nije dizajn, nego nesreća koja čeka politiku rotacije.
Profili koji nisu AnyConnect
Dva starija Cisco stila vjerodajnica brkaju se s ovim. Profil vpnc traži IPSec ID, što je zapravo naziv grupe, zatim tajnu grupe, pa vaše vlastite vjerodajnice, a sve tri dolaze od onoga koji upravlja gatewayem. Naslijeđeni Cisco IPsec drugi je protokol od AnyConnecta, pa vpnc ne može dosegnuti uslugu samo za AnyConnect; openconnect --protocol=anyconnect je otvoreni klijent za taj posao.
Datoteka .pcf opisuje profil starijeg klijenta. Host, naziv grupe i grupna zaporka u njoj mogu se ručno ponovno unijeti u klijentu koji govori Cisco IPsec, iako datoteka nije univerzalni uvoz i svaki nestandardni port ili način tuneliranja obično nestane pri prijenosu.
Počnite od onoga što gateway doista nudi, pa odaberite klijent koji govori taj protokol. Kopiranje profila s drugog lokaliteta način je na koji ljudi završe s otklanjanjem pogrešaka na vjerodajnicama koje nikada nisu bile problem.