AnyConnect Linux жүйесінде: кіру реттілігін қауіпсіз скрипттеу
Cisco AnyConnect vpn бинарлық файлы жауаптарды stdin-нен оқиды, ал бұл қайталанатын кіруге жеткілікті. Реттілікті құр, файлды қорға, тексер және тоқта.
Cisco AnyConnect-пен келетін vpn клиенті сұхбат сияқты әрекет етеді: сұрау басып шығарады, жол күтеді, содан кейін келесісін басып шығарады. Сол сұхбатты файлдан немесе құбырдан берсеңіз, сол бинарлық файл қадағалаусыз жұмыс істейді. Тәсіл бір қайта бағыттау және реттелген жауаптар тізімі, ал скрипт сенімді ме, жоқ па — оны қайта бағыттау емес, тізім шешеді.
Іс жүзінде мұны екі нәрсе бұзады. Қақпа қосымша бірдеңе сұрағанда сұраулар реті жылжиды, ал сақталған құпиясөз бір теру қатесін тіркелгінің құлыпталуына айналдырады. Реттілікті қақпаның кез келген өзгерісінен кейін салыстыруға болатын нұсқаланған дерек ретінде қарастырыңыз. Қайталаудың орнына дауыстап сәтсіздікке ұшыраңыз, өйткені цикл — қате терілген құпиясөздің құлыпталған тіркелгіге айналуының дәл жолы.
Бір реттілік, клиент сұрайтын ретпен
Клиентті бір рет интерактивті іске қосып, әрбір сұрауды пайда болу ретімен жазып алыңыз. Сол жазба жауаптар файлына айналады. Файлды бинарлыққа қайта бағыттағанда бірінші жол қосылу пәрменінің өзі болуы керек, сондықтан реттілік пайдаланушы атымен емес, хост атымен басталады.
connect vpn.example.com
0
<username>
<password>
y
exit
Жалаң 0 қақпа тізім ұсынғанда бірінші қосылу профилін таңдайды; қақпаңыз басып шығаратын индексті пайдаланыңыз. y кіру баннерін қабылдайды, сондықтан баннер болмаса сол жолды жойып, қақпаңыз қосымша сұрақ қоятын жерге бір жол кірістіріңіз. Соңындағы exit — соңғы жауап таусылғанда клиентке таза аяқталуға мүмкіндік беретін нәрсе.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
Интерактивті емес режим мұнда міндетті. -s жоқ кезде клиент терминалды басып алып, қайта бағытталған енгізуді елемеуі мүмкін; онымен жауаптар ағыннан оқылады және процесс қайтады. Бинарлыққа жоғары артықшылықтар қажет жерде шақыруды sudo -n ішіне ораңыз, сонда скрипт құпиясөз сұрауында бұғатталмай, бірден сәтсіздікке ұшырайды.
Жауаптар файлы қайдан ағып кетеді
Құпиясөз бар файл — тіркелгі деректері, сондықтан оған соның құқықтарын беріңіз: режим 600, жұмысты орындайтын тіркелгіге тиесілі және ешқашан ортақ немесе синхрондалған бумада болмауы керек. Кейін түзетудің орнына режимді әлдеқашан қолданып жасаңыз, өйткені файл жазу мен chmod арасында аз уақыт барлығына оқылады.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
Екінші жартысы — argv. Аргумент ретінде берілген құпиясөз процестерді тізімдейтін әрбір жергілікті пайдаланушыға көрінеді және shell тарихына да түседі. Оның орнына оны файл дескрипторынан немесе орта айнымалысынан оқып, жүктемені тырнақшаға алыңыз, сонда shell ішінде ештеңе кеңейте алмайды.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Тырнақшаларға назар аударыңыз. Қос тырнақшаның ішінде ! бар құпиясөзді интерактивті shell клиент оны көрмей тұрып кеңейтуі мүмкін, ал сәтсіздік протокол мәселесіне ұқсайтын жалпы event-not-found қатесі ретінде келеді.
Туннельді дәлелде, содан кейін жаб
Қосылған күй тек клиенттің сессиясы бар деп сенетінін дәлелдейді. Тек корпоративтік желі ішінен жауап беретін хост таңдап, басқа нәрсе істеуден бұрын оны бір рет тексеріңіз. Ондағы сәтсіздік — маршруттау немесе саясат ақауы, ал кіруді қайта іске қосу оны өзгертпейді.
/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
Ажырату алдында және кейін күй шығысын тексеріңіз. Ескірген сессиямен қалдырылған клиент келесі қосылудан бас тартуы мүмкін, ал скрипт әлі сәттілік туралы хабарлайды, және бұл ақау режимі тек шығу кодтарына қарасаңыз көрінбейді. Екінші оқылымға жалғыз сенудің орнына екі оқылымды салыстырыңыз. Shell профиліндегі бүркеншік аттар күнделікті қолдануға жеткілікті, ал кез келген жоспарланған нәрсе кез келген басқа қадағалаусыз жұмыс сияқты тіркелгі деректері мен жеке басты қарауды талап етеді.
Тұрақты тізім қауіпсіз болудан қалғанда
Жауаптар файлы бүгінгі сұраулар ретін кодтайды. Өзгерген баннер, мәжбүрлі құпиясөз ауыстыру немесе екінші фактор сынағы оны тіркелгіні құлыптай алатын циклге айналдырады, сондықтан скрипт қайта іске қосудың орнына бірінші күтпеген жауапта шығуы керек.
Клиент басып шығарғанды ұстан, нөлге тең емес мәртебе қайтар және шешімді шақырушыға қалдыр. Қақпа екінші факторды талап ететін жерде, шынайы жауап — бұл профиль үшін қадағалаусыз кіру қолжетімсіз, ал реттілікке тағы бір жол керек дегендік емес.
Айналдыру да сол қарауға жатады. Егер тіркелгі деректері сақталса, оны кім оқи алатынын, қашан өзгеретінін және хост қайта құрылғанда оны не жоятынын шешіңіз. Біреу құпиясөзге тимегендіктен бір жыл жұмыс істейтін скрипт — дизайн емес, айналдыру саясатын күтіп тұрған апат.
AnyConnect емес профильдер
Cisco-ның екі ескі тіркелгі деректері стилі осымен шатастырылады. vpnc профилі IPSec ID сұрайды, ол шын мәнінде топ атауы, содан кейін топ құпиясы, содан кейін өз тіркелгі деректеріңіз, және үшеуі де қақпаны басқаратын адамнан келеді. Ескі Cisco IPsec — AnyConnect-тен өзге протокол, сондықтан vpnc тек AnyConnect қызметіне жете алмайды; openconnect --protocol=anyconnect — сол жұмысқа арналған ашық клиент.
.pcf файлы ескі клиент профилін сипаттайды. Ондағы хост, топ атауы және топ құпиясөзі Cisco IPsec сөйлейтін клиентте қолмен қайта енгізілуі мүмкін, бірақ файл әмбебап импорт емес және кез келген стандартты емес порт немесе туннельдеу режимі әдетте тасымалдауда жоғалады.
Қақпа шын мәнінде ұсынатыннан бастаңыз, содан кейін сол протоколды сөйлейтін клиентті таңдаңыз. Профильді басқа сайттан көшіру — адамдардың ешқашан мәселе болмаған тіркелгі деректерін жөндеуге келіп қалатын жолы.