Linux-da AnyConnect: giriş ardıcıllığını təhlükəsiz skriptləmək
AnyConnect vpn ikili faylı cavabları stdin-dən oxuyur və bu, təkrarlana bilən giriş üçün kifayətdir. Ardıcıllığı qur, faylı qoru, yoxla və dayan.
Cisco AnyConnect ilə gələn vpn müştərisi söhbət kimi davranır: bir sual çap edir, bir sətir gözləyir, sonra növbəti sualı çap edir. Bu söhbəti fayldan və ya borudan versəniz, eyni ikili fayl nəzarətsiz işləyir. Texnika bir yönləndirmə və sifarişli cavab siyahısıdır və skriptin etibarlı olub-olmadığını yönləndirmə deyil, məhz siyahı həll edir.
Praktikada iki şey bunu pozur. Şlüz əlavə bir şey soruşduqda sualların sırası dəyişir və saxlanılan parol bir yazı səhvini hesabın bloklanmasına çevirir. Ardıcıllığa hər hansı şlüz dəyişikliyindən sonra diff edə biləcəyiniz versiyalanmış data kimi baxın. Yenidən cəhd etmək əvəzinə uca səslə uğursuz olun, çünki səhv yazılmış parolun kilidli hesaba çevrilməsi məhz dövrə ilə olur.
Bir ardıcıllıq, müştərinin soruşduğu sıra ilə
Müştərini bir dəfə interaktiv işə salın və hər sualı göründüyü sıra ilə yazın. Bu transkript cavab faylına çevrilir. Faylı ikili fayla yönləndirdikdə birinci sətir bağlantı əmrinin özü olmalıdır, buna görə ardıcıllıq istifadəçi adı ilə deyil, host adı ilə başlayır.
connect vpn.example.com
0
<username>
<password>
y
exit
Tək 0 şlüz siyahı təqdim etdikdə birinci bağlantı profilini seçir; şlüzünüzün çap etdiyi indeksi istifadə edin. y giriş bannerini qəbul edir, ona görə banner yoxdursa o sətri silin və şlüzünüz əlavə sual verdiyi yerə bir sətir əlavə edin. Sondakı exit son cavab istehlak edildikdən sonra müştərinin təmiz şəkildə dayanmasına imkan verir.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
Qeyri-interaktiv rejim burada məcburidir. -s olmadan müştəri terminalı ələ keçirə və yönləndirilmiş girişi görməzliyə sala bilər; onunla cavablar axından oxunur və proses qayıdır. İkili fayl yüksəldilmiş imtiyaz tələb etdikdə çağırışı sudo -n ilə əhatə edin ki, skript parol sorğusunda bloklanmaq əvəzinə dərhal uğursuz olsun.
Cavab faylı haradan sızır
Parol saxlayan fayl bir etimadnamədir, ona etimadnamənin icazələrini verin: rejim 600, işi icra edən hesaba məxsus və heç vaxt paylaşılan və ya sinxronlaşdırılan qovluqda olmasın. Sonradan düzəltmək əvəzinə rejim artıq tətbiq olunmuş şəkildə yaradın, çünki fayl yazma ilə chmod arasında qısa müddət hamıya oxunaqlı olur.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
Digər yarısı argv-dir. Arqument kimi ötürülən parol prosesləri sadalayan hər yerli istifadəçiyə görünür və həmçinin shell tarixçəsinə düşür. Onu bunun əvəzinə fayl deskriptorundan və ya mühit dəyişənindən oxuyun və yükü quote edin ki, shell onun içində heç nə genişləndirə bilməsin.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Quote-laşdırmaya diqqət yetirin. İkiqat dırnaq içində ! olan parolu interaktiv shell müştəri onu görəndən əvvəl genişləndirə bilər və xəta protokol problemi kimi görünən ümumi event-not-found xətası kimi gəlir.
Tuneli sübut edin, sonra bağlayın
Bağlı vəziyyət yalnız müştərinin sessiyası olduğuna inandığını sübut edir. Yalnız korporativ şəbəkənin içindən cavab verən bir host seçin və başqa heç nə etməzdən əvvəl onu bir dəfə yoxlayın. Oradakı uğursuzluq marşrutlaşdırma və ya siyasət xətasıdır və girişi yenidən işə salmaq onu dəyişməyəcək.
/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
Vəziyyət çıxışını ayrılmadan əvvəl və sonra yoxlayın. Köhnə sessiya ilə qalan müştəri növbəti bağlantını rədd edə bilər, halbuki skript hələ də uğur bildirir və yalnız çıxış kodlarına baxsanız bu uğursuzluq rejimi görünməzdir. İkinci oxunuşa tək etibar etmək əvəzinə iki oxunuşu müqayisə edin. Shell profilindəki alias-lar gündəlik istifadə üçün kifayətdir, lakin cədvəllənmiş hər şey hər hansı digər nəzarətsiz iş kimi eyni etimadnamə və kimlik baxışına layiqdir.
Sabit siyahı nə vaxt təhlükəsiz olmaqdan çıxır
Cavab faylı bugünkü sual sırasını kodlayır. Dəyişən banner, məcburi parol dəyişikliyi və ya ikinci faktor çağırışı onu hesabı bloklaya bilən dövrəyə çevirir, buna görə skript yenidən başlamaq əvəzinə ilk gözlənilməz cavabda çıxmalıdır.
Müştərinin çap etdiyini tutun, sıfırdan fərqli status qaytarın və qərarı çağırana buraxın. Şlüz ikinci faktor tələb etdikdə dürüst cavab budur ki, həmin profil üçün nəzarətsiz giriş mövcud deyil, ardıcıllığın daha bir sətrə ehtiyacı olduğu deyil.
Rotasiya eyni baxışa aiddir. Etimadnamə saxlanılırsa, onu kimin oxuya biləcəyini, nə vaxt dəyişəcəyini və host yenidən qurulduqda onu nəyin siləcəyini qərarlaşdırın. Heç kim parola toxunmadığı üçün bir il işləyən skript dizayn deyil, rotasiya siyasətini gözləyən bir qəzadır.
AnyConnect olmayan profillər
İki köhnə Cisco etimadnamə üslubu bununla qarışdırılır. vpnc profili IPSec ID istəyir, bu əslində qrup adıdır, sonra qrup sirri, sonra öz etimadnamələriniz və hər üçü şlüzü idarə edəndən gəlir. Legacy Cisco IPsec AnyConnect-dən fərqli protokoldur, buna görə vpnc yalnız AnyConnect xidmətinə çata bilməz; openconnect --protocol=anyconnect bu iş üçün açıq müştəridir.
.pcf faylı köhnə müştəri profilini təsvir edir. İçindəki host, qrup adı və qrup parolu Cisco IPsec danışan müştəridə əl ilə yenidən daxil edilə bilər, baxmayaraq ki, fayl universal idxal deyil və qeyri-standart port və ya tunel rejimi adətən köçürmədə itir.
Şlüzün həqiqətən təqdim etdiyindən başlayın, sonra o protokolu danışan müştəri seçin. Başqa saytdan profil kopyalamaq insanların heç vaxt problem olmayan etimadnamələri sazlamağa başlamasının yoludur.