Uygulama VPN açıkken çalışmamalıdır: bunu ne zorunlu kılar
Tünel ayaktayken bir uygulamayı durdurmak kill switch değildir. Mod değişikliğinin kime ait olduğuna, yeniden başlatmayı neyin engellediğine ve systemd’nin neyi yapıp neyi yapamayacağına karar verin.
Kill switch’ler ve örtüşme yasağı kuralları zıt yönleri gösterir; bu da sıradan VPN ayarlarının ikincisini hiçbir zaman ifade etmemesini açıklar. Kill switch düşmüş bir tünele tepki verir, oysa bu gereksinim ayakta olan bir tünele tepki verir ve uygulamayı resmin dışında tutar. Tek bir tasarım kararı çoğunu çözer: uygulama durdurulacak mı, başlatılması mı engellenecek, yoksa yalnızca ağ erişimi mi elinden alınacak. Bir güvenlik duvarı kuralına veya süreç öldüren bir döngüye uzanmadan önce o katmanı seçin, çünkü gözlemle uygulanan bir kural her başlatmada bir pencere sızdırır.
Efsane: kill switch programların başlamasını engeller
Kill switch’ler trafik denetimidir ve bu konuda dürüsttürler: tünel durumuna göre paketlere izin verir veya onları reddeder. Hiçbiri bir programı başlatmayı reddetmez ve hiçbiri hangi yürütülebilir dosyanın soket açtığını incelemez. Masaüstü kısayolu, zamanlanmış görev ve arka plan yardımcısı, uygulamanın adını bilen herhangi bir şeyden geçmeden ağa ulaşır. Bu iki mekanizma arasındaki mesafe, karışıklığın çoğunun yaşadığı yerdir.
Bir programın başlayıp başlayamayacağına gerçekten karar veren düzen uygulama denetimidir. Windows’ta bu AppLocker ya da WDAC anlamına gelir; yönetilen macOS’ta ise cihaz profili tarafından uygulanan bir izin listesi anlamına gelir. İkisi de tünelden bağımsızdır, bu yüzden iki gereksinim aynı bilete birleştirilir ve sonra ikisi de karşılanmaz.
Araca isim vermeden önce moda isim verin
Kuralı üç durumlu bir durum makinesi olarak yazın: olağan kullanım, VPN çalışma oturumu ve çıkış. Yasak örtüşme orta duruma aittir, istemci yazılımına değil.
Durumu değiştiren kişi sırayla üç eyleme sahiptir: uygulamanın işini bitirmek, normal kapanmasını istemek ve tünel yükselmeden önce örneğin gittiğini doğrulamak. Sıra diğer uçta da önemlidir, çünkü önce bağlanıp sonra programı durduran bir VPN örtüşmeye zaten izin vermiştir. Gereksinim bağlantı kurulumunu kapsıyorsa, bağlı göstergesini beklemek çok geçtir.
İki yönlü çatışma gerçekte ne yapar
Gerçekten systemd tarafından yönetilen iki hizmet için Conflicts= simetriktir: birini başlatmak diğerini durdurur. Birim başvurusu bu davranışı belgeler ve biri durmayı bitirmek zorundayken diğeri başlamadan önce açık bir sıra ayrıca ister. Bu sıra girdileri olmadan durma ve başlama yarışır ve sonuç zamanlamaya bağlıdır.
Bu bir engelleme listesi değildir. Bağımlılığı ters bağlayın, o zaman uygulamayı başlatmak bunun yerine VPN’i durdurur; bu, bir tünel öngörülebilir bir anda kendiliğinden bağlantıyı kestiğinde şüphelenilmesi gereken arızadır. Masaüstü uygulaması bir systemd birimi değildir ve bir NetworkManager bağlantısı da birim değildir, bu yüzden bu desen yalnızca kendi sardığınız hizmetler için çalışır.
İlk başlatmayı değil, geçişleri test edin
Dört geçiş gereksinimin dayanıp dayanmadığına karar verir: uygulama çalışırken oturuma girmek, oturum ortasında onu yeniden başlatmak, başarısız VPN başlangıcı ve kasıtlı bağlantı kesme. Her birini test edin ve sonucu birim dosyalarının yanında saklayın. Aşağıdaki komutlar mevcut ilişkiyi okur ve ardından en çok önem taşıyan geçişi çalıştırır.
systemctl show work-vpn.service -p Conflicts -p After
systemctl start work-vpn.service
systemctl is-active office-sync.service
nmcli connection show --active
Üçüncü komut uygulamayı etkin değil bırakmalı ve dördüncü komut bir oturum sürerken yalnızca tünel bağlantısını listelemelidir. Farklı bir sonuç, geçişin hiç uygulanmadığı anlamına gelir.
Oturum sırasında yeniden başlatma, sarmalayıcı tabanlı bir tasarımı açığa çıkaran durumdur, çünkü masaüstünden başlatılan bir kısayol hiçbir zaman bir başlatma betiğine danışmaz. Bu atlatma önemliyse, zorlama uygulama denetimine aittir, VPN istemcisine değil. Oturumun sonunu da belgeleyin ve girişte durdurulan her süreci yeniden açmak yerine kasıtlı bir devamı tercih edin. Her geçişin sonucunu birim dosyalarını tutan aynı nota kaydedin.