Bir gereksinim belgesindeki tek satır — „bu uygulama VPN’i kullanabilir, başka hiçbir şeyi değil“ — hiçbir tek anahtarın sağlamadığı iki mekanizmayı sessizce ister. Trafiğin amaçlanan tünelden geçen bir yola ihtiyacı vardır ve doğrudan çıkacak trafik reddedilmelidir. Birini iyi yapıp diğerini hiç yapmayan araçlar yaygındır, bu yüzden yalnızca bir şeyin engelleyip engelleyemeyeceğini soran bir karşılaştırma sorunun yarısını kendinden emin biçimde yanıtlar. Önce sınırı yazın, sonra onun iki yarısını da kapsayan bileşenleri seçin.

Tek bir cümlenin içinde saklı iki gereksinim

Yönlendirme, bir bağlantıyı tünele veya vekile koyan kısımdır. Ret, aynı bağlantının başka herhangi bir yoldan çıkmasını engelleyen kısımdır. Bunları farklı bileşenler uygular, farklı biçimlerde başarısız olurlar ve bir ürün birinde mükemmel olup diğeri hakkında hiçbir şey söylemeyebilir:

ApproachSteers trafficRefuses direct egressKnows the app identity
Per-app VPN profileYes, for the apps it namesOnly if a filter or firewall also blocksYes, within its own rules
Application proxy settingPartly, for requests that honour itNoNo
Content filterNoYesYes, if the filter is written that way
Local PF rulesetNoYes, by address and portNot reliably

Tabloyu sıralama değil denetim listesi olarak okuyun. Hiçbir satır iki orta sütunu birden doldurmaz ve bunları kapsayan satırlar işbirliği yapan iki bileşendir: biri yolu, diğeri reddi elinde tutar. Kimlik sütunu başka bir nedenle önemlidir, çünkü uygulamayı adlandıramayan bir kural o uygulama hakkında kural uygulayamaz. Ne dağıtırsanız dağıtın üçüne de yanıt vermelidir, yoksa gereksinim belgesindeki sınır makinedeki sınır değildir.

Yalnızca yönlendirme bir çıkış bırakır

Uygulama vekil ayarı, retsiz yönlendirmenin en açık örneğidir. Sistem vekiline saygı duyan bir uygulamanın isteklerini yönlendirebilir ve başka hiçbir şeyi kapsamaz: bir yardımcı süreç, bir güncelleyici, bir arka plan hizmeti veya farklı bir protokol o ayarı hiç okumadan kendi yoluna gidebilir. Bu nedenle tek bir panelde SOCKS uç noktası seçmek uygulama için doğrudan çıkış yasağı politikası oluşturmaz. Gereksinim uygulamanın bütünüyle ilgiliyse, kuralın gerçekte hangi bileşenleri tanımladığını sorun.

Uygulama başına VPN profili vekilden daha iyi yönlendirir, çünkü hangi uygulamaların tünele gireceğine platform karar verir her uygulamanın kendi karar vermesi yerine. Yine de hiçbir şeyi reddetmez: profil bir yol sağlar ve ona uymayan trafik olağan yolu izler. Tam da o boşluk ikinci bir bileşenin yerini kazandığı noktadır ve tek anahtar gibi görünen ürünlerin genellikle iki olmasının nedeni budur.

Yalnızca ret uygulamayı bozar

Apple belgeleri içerik filtreleri hakkında ağ yığınından geçerken trafik üzerinde izin-veya-engelle kararını açıklar. Bu karar bir tünel değildir ve vekil bağlantısı da değildir, çünkü bir şeyin sürüp süremeyeceğine karar verir, nereye gittiğine değil. Tek başına bir filtre reddi kusursuz uygular ve uygulamayı kullanılamaz bırakır, temiz günlüklerle ve hiçbir açıklama olmadan. Bir filtre kararı bir bağlantıyı durdurabilir ama tüneli asla sağlamaz, bu yüzden onu yönlendirmeyle eşleştirmek tasarım kararıdır, isteğe bağlı bir ek değil.

Yerel olarak yönetilen bir PF kural kümesi o yelpazenin diğer ucunda durur. Bir yöneticinin sahip olduğu makinede meşru bir destek kararıdır ve otomatik olarak dağıtılabilir bir ürünün temeli değildir, çünkü kural kümesine sahip olan kişi onun diğer güvenlik duvarı kullanıcılarıyla etkileşimlerine, yükseltme yoluna ve kural yanlış olduğunda kurtarılmasına da sahiptir. Bir ürüne PF eklemek bu sahiplik sorusunu ortadan kaldırmaz; onu tanımlar.

Dağıtım, kuralın yarın da var olup olmayacağına karar verir

Bir Network Extension’ın Apple platformlarında nasıl dağıtıldığı, önünüzdeki sağlayıcı türüne, paketlemeye ve işletim sistemi sürümüne bağlıdır. macOS’ta bir uygulama uzantısı kullanıcı bağlamında çalışır ve o kullanıcı oturumu kapattığında sona erer, sistem uzantısının ise oturuma bağlı olmayan küresel bir bağlamı vardır. Koruma bir oturum kapatmayı atlatmak zorundaysa, bu fark dipnot değil tasarımın tamamıdır. Davranışı vaat etmeden önce dağıtım yolunu doğrulayın, çünkü aynı kod hangi uzantı türünün gönderildiğine göre farklı yere iner.

Kaynak kullanılabilirliği uygulamadan ayrı bir konudur. Bir depoyu okumak bir şeyin nasıl uygulandığını söyler, kurulu ikili dosyanın bu makinede ne yapmaya izinli olduğunu değil. İmzalama, kurulum ve yetkilendirme hâlâ geçerlidir ve eski bir çekirdek uzantısı veya kitaplık enjeksiyonu hilesi etrafında kurulmuş yönergeler başka bir platformu ve başka bir risk duruşunu anlatır, bir zamanlar ne kadar iyi çalışmış olursa olsun.

Uygulamayı adlandıran bir kabul durumu

Uygulamanın kendi başına yaptığı tek bir eylemi seçin, ulaşması gereken adresi ve bu adresin IPv4 mi IPv6 mı olduğunu not edin, sonra aynı eylemi onaylanmış tünelsiz durumda yineleyin. İkinci çalıştırma ilan edilen reddi üretmelidir, sessiz bir doğrudan yeniden denemeyi değil. İnsanların belirtmeden bıraktığı yarı budur ve reddin var olduğunu kanıtlayan tek yarıdır. Önce tünel varken çalıştırın, böylece iki sonuç arasındaki fark yalnızca eksik tünelden gelebilsin.

Ardından gereksinimin adlandırdığı geçişleri dolaşın: uygulamanın yeniden başlatılması, bir yardımcı sürecin tetiklenmesi, tünelin yeniden bağlanması, makinenin ağ değiştirmesi ve geçerli olduğu yerlerde oturum kapatma veya yeniden başlatma. Tarayıcıdaki genel IP sayfası başka bir uygulamanın soketlerinin testi değildir, bu yüzden bunun yerini tutamaz. Desteklenen hiçbir dağıtım uygulamanın gerçek davranışını kapsamıyorsa, açık bir ağ geçidi olan ve alternatif çıkışı bulunmayan yetkili yalıtılmış ortam, kendi yönetim maliyeti olan bir sınırlama kararıdır, onay kutusunun yerine geçmez.

Dört madde yazarak bitirin: uygulama hangi bileşenlerden oluşur, yönlendirmeyi kim elinde tutar, reddi kim elinde tutar ve kuralın hâlâ geçerli olması gereken durumlar. Genel bir depo seçim ölçütlerinden biri olabilir ama dördünden biri değildir ve belirli bir aracın ağ gereksinimini karşılayıp karşılamadığına o maddeler karar verir.

İlgili makaleler