Cisco AnyConnect ile gelen vpn istemcisi bir sohbet gibi davranır: bir istem yazdırır, bir satır bekler, sonra bir sonrakini yazdırır. Bu sohbeti bir dosyadan veya borudan besleyin, aynı ikili gözetimsiz çalışır. Teknik bir yönlendirme artı sıralı bir yanıt listesidir ve betiğin güvenilir olup olmadığına yönlendirme değil, listenin kendisi karar verir.

Pratikte bunu iki şey bozar. Ağ geçidi ekstra bir şey sorduğunda istemlerin sırası kayar ve saklanan bir parola tek bir yazım hatasını hesap kilidine dönüştürür. Diziyi, her ağ geçidi değişikliğinden sonra karşılaştırabileceğiniz sürümlenmiş veri olarak ele alın. Yeniden denemek yerine yüksek sesle başarısız olun, çünkü yanlış yazılmış bir parolanın kilitli bir hesaba dönüşme yolu tam olarak döngüdür.

Tek bir dizi, istemcinin sorduğu sırayla

İstemciyi bir kez etkileşimli çalıştırın ve her istemi göründüğü sırayla yazın. Bu döküm yanıt dosyası olur. Dosyayı ikiliye yönlendirdiğinizde ilk satır bağlantı komutunun kendisi olmalıdır, bu yüzden dizi kullanıcı adıyla değil ana makine adıyla başlar.

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

Çıplak 0, ağ geçidi bir liste sunduğunda ilk bağlantı profilini seçer; ağ geçidinizin yazdırdığı dizini kullanın. y bir oturum açma başlığını kabul eder, bu yüzden başlık yoksa o satırı silin ve ağ geçidinizin ek soru sorduğu yere bir satır ekleyin. Sondaki exit, son yanıt tükendiğinde istemcinin temiz biçimde sonlanmasını sağlar.

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

Etkileşimsiz kip burada isteğe bağlı değildir. -s olmadan istemci terminali ele geçirebilir ve yönlendirilen girdiyi yok sayabilir; onunla yanıtlar akıştan okunur ve süreç geri döner. İkilinin yükseltilmiş ayrıcalıklara ihtiyaç duyduğu yerde çağrıyı sudo -n içine sarın, böylece betik parola isteminde takılmak yerine hemen başarısız olur.

Yanıt dosyası nerede sızar

Parola içeren bir dosya bir kimlik bilgisidir, bu yüzden ona bir kimlik bilgisinin izinlerini verin: kip 600, işi çalıştıran hesabın sahipliğinde ve asla paylaşılan ya da eşitlenen bir dizin içinde olmasın. Sonradan düzeltmek yerine kip zaten uygulanmış olarak oluşturun, çünkü dosya yazma ile chmod arasında kısa süre herkes tarafından okunabilir.

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

Diğer yarısı argv. Argüman olarak verilen bir parola, süreçleri listeleyen her yerel kullanıcı tarafından görülür ve kabuk geçmişine de düşer. Bunun yerine onu bir dosya tanıtıcısından veya ortam değişkeninden okuyun ve yükü tırnak içine alın ki kabuk içinde hiçbir şeyi genişletemesin.

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

Tırnaklara dikkat edin. Çift tırnak içinde ! içeren bir parola, istemci onu görmeden önce etkileşimli bir kabuk tarafından genişletilebilir ve hata, protokol sorunu gibi görünen genel bir event-not-found hatası olarak gelir.

Tüneli kanıtlayın, sonra kapatın

Bağlı durumu yalnızca istemcinin bir oturumu olduğuna inandığını kanıtlar. Yalnızca kurumsal ağın içinden yanıt veren bir ana makine seçin ve başka bir şey yapmadan önce bir kez deneyin. Oradaki bir hata yönlendirme veya ilke kusurudur ve oturum açmayı yeniden çalıştırmak bunu değiştirmez.

/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

Bağlantıyı kesmeden önce ve sonra durum çıktısını kontrol edin. Eski bir oturumla bırakılan istemci, betik hâlâ başarı bildirirken sonraki bağlantıyı reddedebilir ve bu arıza kipi yalnızca çıkış kodlarına bakarsanız görünmez. İkinci okumaya tek başına güvenmek yerine iki okumayı karşılaştırın. Kabuk profilindeki takma adlar günlük kullanım için yeterlidir, ancak planlanmış her şey diğer gözetimsiz işler gibi aynı kimlik bilgisi ve kimlik incelemesini hak eder.

Sabit bir liste artık güvenli olmadığında

Bir yanıt dosyası bugünkü istem sırasını kodlar. Değişen bir başlık, zorunlu parola değişikliği veya ikinci faktör meydan okuması onu hesabı kilitleyebilecek bir döngüye dönüştürür, bu yüzden betik yeniden başlamak yerine ilk beklenmeyen yanıtta çıkmalıdır.

İstemcinin yazdırdığını yakalayın, sıfır olmayan bir durum döndürün ve kararı çağırana bırakın. Ağ geçidinin ikinci faktör istediği yerde, dürüst yanıt o profil için gözetimsiz oturum açmanın bulunmadığıdır, dizinin bir satır daha ihtiyacı olduğu değil.

Rotasyon aynı incelemeye aittir. Kimlik bilgisi saklanıyorsa, kimin okuyabileceğine, ne zaman değişeceğine ve ana makine yeniden kurulduğunda onu neyin kaldıracağına karar verin. Kimse parolaya dokunmadığı için bir yıl çalışan bir betik tasarım değil, bir rotasyon ilkesi bekleyen kazadır.

AnyConnect olmayan profiller

İki eski Cisco kimlik bilgisi biçimi bununla karıştırılır. vpnc profili, aslında grup adı olan bir IPSec ID ister, sonra bir grup sırrı, sonra kendi kimlik bilgilerinizi ister ve üçü de ağ geçidini işleten kişiden gelir. Eski Cisco IPsec, AnyConnect'ten farklı bir protokoldür, bu yüzden vpnc yalnızca AnyConnect hizmetine ulaşamaz; openconnect --protocol=anyconnect o iş için açık istemcidir.

.pcf dosyası eski istemci profilini tanımlar. İçindeki ana makine, grup adı ve grup parolası, Cisco IPsec konuşan bir istemcide elle yeniden girilebilir, ancak dosya evrensel bir içe aktarma değildir ve varsayılan olmayan her bağlantı noktası veya tünelleme kipi aktarımda genellikle kaybolur.

Ağ geçidinin gerçekte sunduğuyla başlayın, sonra o protokolü konuşan istemciyi seçin. Başka bir siteden profil kopyalamak, insanların hiçbir zaman sorun olmayan kimlik bilgilerinde hata ayıklamasına yol açan yoldur.

İlgili makaleler