nftables neden OpenVPN'in istemciler arası trafiğini göremez
Eşler arası trafik VPN sürecinin içinde teslim edilir, bu yüzden iletme sayaçları hiç hareket etmez. Onu saymak, çekirdek yolu ile süreç yolu arasında seçim yapmak demektir.
Tek bir sunucudaki iki istemci dosya alışverişi yapar, aktarım başarılı olur ve tünele yönelttiğiniz her iletme kuralı sıfır paket bildirir. Kurallar bozuk değildir ve zincir yanlış yerde değildir. Eşler arası iletme açıkken paket sunucu sürecinin içinde teslim edilir ve ana makine yığını hiçbir zaman yönlendirici olmaz, dolayısıyla çekirdek güvenlik duvarının sayacağı bir şey kalmaz. Bu ayrımı anlamak, kısayolu koruyup korumayacağınıza veya yolu çekirdek üzerinden yeniden kurup kurmayacağınıza karar verir.
Bir paketi sunucudan geçirerek izleyin
Yönlendirilen bir tünelde arka plan süreci her istemcinin şifresi çözülmüş paketini tünel aygıtına verir. Oradan ana makine paketi yönlendirir, iletme kancası çalışır ve tünel aygıtıyla eşleşen bir kural trafiği sayabilir veya düşürebilir. Çoğu güvenlik duvarı örneğinin varsaydığı yol budur.
| Forwarding path | Who decides | What the host firewall sees |
|---|---|---|
| Kernel routing between clients | Host routing table and forward rules | Every inner packet, with interface names |
| Peer forwarding inside the server process | The VPN daemon's own peer table | Only the outer encrypted transport |
Kısayol ana makineyi ortadan kaldırır. Bir oturumun şifresi çözülmüş paketi arka plan sürecinin içinde başka bir oturuma verilir ve iç paket hiçbir zaman tünel aygıtında yayımlanmaz ve ana makine onu yönlendirmez. Kapsüllenmiş trafik yine de fiziksel arayüzü geçer, bu yüzden dış yakalama meşgul görünürken iç kurallar sessiz kalır. Tünel aygıtında alınan yakalama hiçbir şey göstermez, bu da aktarımı orada izlemeyi bekleyen herkesi şaşırtır. Bu asimetri, kısayolu arka plan sürecinin dışından tanımanın en hızlı yoludur.
Hangi yolun işlediğini belirleyen sayaç testi
Geçerli olması gereken kurala bir sayaç takın, o kuralın engellemesi gereken iki istemci arasında bir aktarım çalıştırın ve ardından sayacı okuyun.
sudo nft list ruleset
sudo nft add rule inet filter forward iifname "tun0" oifname "tun0" counter accept
sudo nft list chain inet filter forward
Aktarım başarılı olur ve sayaç sıfırda kalırsa, çekirdek bu paketleri hiç işlemedi ve hiçbir kural düzenlemesi bunu değiştirmez. Aynı testi sunucunun kendi üzerindeki bir hizmete karşı yineleyin, çünkü o akış gerçekten ana makine yığınından geçer ve sayacı hareket eder. İki sonucu karşılaştırmak yanıtı veren şeydir.
İki ayrıntı yanlış okumayı önler. Zincir etiketine yazılan bir arayüz adı tek başına hiçbir şeyi filtrelemez, çünkü eşleşme kuralların içindeki arayüz alanlarında gerçekleşir. Ve köprülenmiş katman 2 tasarımı yine farklı davranır: orada istemciler tek bir yayın alanını paylaşır, bu yüzden eş keşfi beklenir, yönlendirme hatası değildir.
Anahtar bir erişim listesi değildir
Bir öğleden sonraya mal olan kısım burasıdır. Eşler arası iletme tek bir açık ya da kapalı ayarıdır ve açık olduğu sürece arka plan süreci tek iletme noktasıdır. Ana makinenin güvenlik duvarı kimin kime ulaşabileceğini ifade edemez ve istemci başına dosyalar anahtarı bir ilke matrisine dönüştürmez.
Eş başına kurallara ihtiyacınız varsa, seçim kısayoldan vazgeçmek ile denetim aracı olarak ana makinenin güvenlik duvarından vazgeçmek arasındadır. Onu kapatmak çekirdek iletmesini geri getirir; bu da sunucuda IP iletmesinin açık olmasını ve istediğiniz akışlar için açık kuralları gerektirir. Açık bırakmak, ilkenin arka plan sürecinin yapılandırmasında yaşaması anlamına gelir; bu da pratikte tüm eşler ya da hiçbir eş demektir.
Kendi adres havuzları ve bağlantı noktaları olan ayrı sunucu süreçleri uygulanabilir orta yoldur. Her süreç tam olarak bir erişim kararı taşır, bu yüzden iki grup ilke matrisi olmadan farklı kurallara sahip olabilir. Ana makine istendiğinde havuzlar arasında yönlendirme yapabilir ve o zaman güvenlik duvarı bu akışları görür çünkü ana makineyi geçerler. Bedel ek bağlantı noktaları, ek sertifikalar ve grup başına bir profildir.
İletme noktasını seçmek
Güvenlik duvarı ilke motoru olduğunda, akış başına günlükleme gerektiğinde veya muhasebe önemli olduğunda çekirdek iletmesini seçin. Bedel, ana makine yığını üzerinden geçen işlem hacmi ve bakımı yapılacak daha fazla kuraldır. Yarar, sayaçlardan akış dışa aktarıcılarına kadar mevcut her aracın trafiği yeniden betimlemesidir. Küçük bir sunucuda bu bedel görünmez; yoğun bir aktarıcıda değildir.
Eşler arası trafik ya tamamen izinli ya da tamamen yasak olduğunda ve sunucu buna göre boyutlandırıldığında süreç içi iletmeyi seçin. Bedel, sayaçların, kuyruk disiplinlerinin ve bağlantı izlemenin artık iç akışları betimlememesidir; bu yalnızca sonradan kimse onlara güvenmeyecekse kabul edilebilir.
Ne seçerseniz seçin, onu güvenlik duvarı kurallarının yanına yazın. Eşler arası trafiğe izin veriyor gibi görünen ama aslında arka plan sürecinin karar verdiği bir kural kümesi, başarısız bir aktarımı ayıklayacak bir sonraki kişiyi yanıltır. Yalnızca kuralları okuyan herkes çekirdeğin kapı olduğunu varsayar.
Kuralları değiştirmeden önce neyi denetlemeli
Sunucunun gerçekten yüklediği yapılandırmayı okuyun, düzenlediğinizi hatırladığınız dosyayı değil, ve eş seçeneğinin bulunup bulunmadığını doğrulayın. Değiştirdiyseniz, hizmetin diskteki bir dosyayı yalnızca yeniden yazmadığından, yeniden yüklendiğinden emin olun.
Ardından kuralın en azından eşleştiğini kanıtlamak için istemciden sunucuya bir akışla testi yineleyin ve gönderilen yolları denetleyin, çünkü eksik bir yol istemci tarafından tam olarak bir güvenlik duvarı engeli gibi görünür. Kural sırasını ancak hangi iletme noktasının kararı elinde tuttuğunu bildikten sonra değiştirin.