Sunucunuzdaki bir OpenVPN istemcisi LAN erişimini kaybetmeli, diğer tüm tüneller çalışmaya devam etmelidir. Bunu araştırırsanız, en iyi yanıt genellikle daemon'un bunu yapamayacağını söyler, ki bu yalnızca yarısı doğrudur: OpenVPN'de istemci başına güvenlik duvarı yoktur, ancak tüneli sonlandıran ana makine paketleri zaten filtreler. Önemli olan iki karar, engellediğiniz kimlik ve kuralın konumudur. Bu ikisini doğru yapın, değişiklik test edip kaldırabileceğiniz tek bir satır olur.

Kuralı yazmadan önce istemciyi sabitleyin

OpenVPN tünel adreslerini bir havuzdan kiralar, yani 10.8.0.6 bir kişi değil, bir koltuktur. Oturum bittiğinde kira geri döner ve bir sonraki bağlantıya verilebilir, bu da o adrese karşı yazılmış bir kuralın kullanıcıyı değil koltuğu izlediği anlamına gelir. Öyleyse önce gerçekte neyi engellediğinize karar verin: kısa bir deney için adres mi, yoksa dışarıda tutmak istediğiniz biri için sertifika mı.

Adresi sertifikaya bağlamak için client-config-dir tarafından belirtilen dizinde bir dosya oluşturun ve dosyaya sertifikanın common name değerini tam olarak verin. İçine bir yönerge koyun, ifconfig-push 10.8.0.6 255.255.255.0, ve o istemci yeniden bağlanmalarda aynı tünel adresini korur. Bunun etkili olması için iki ayar bulunmalıdır: client-config-dir sunucu yapılandırmasında bildirilmeli ve gönderilen adres sunucunun yönlendirebildiği bir alt ağda olmalıdır. Biri eksikse dosya hata vermeden yok sayılır, bu da sonraki güvenlik duvarı testini yanıltıcı yapar.

Geçici bir engelleme havuz adresi kullanabilir, yeter ki bilet o sırada hangi oturumun onu tuttuğunu kaydetsin.

Sıra, düşürmenin çalışıp çalışmayacağını belirler

Tünel ile LAN arasında yönlendirme yapan bir Linux ağ geçidinde paketler FORWARD zincirinden geçer. Aşağıdaki komutu bir cümle olarak okuyun: FORWARD zincirinin başına ekle, tun0 arayüzünden giren, yalnızca o tek ana bilgisayardan gelen, LAN alt ağına yönelik trafiği eşleştir ve düşür.

iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP

-I, kuralı çalıştıran şeydir. -A ile eklenirse tünel alt ağı için herhangi bir geniş kabulün altına düşer ve hiçbir zaman paket görmez. Konumu iptables -vnL FORWARD --line-numbers ile doğrulayın ve sayaçları da okuyun: en üstte hiçbir şey saymayan bir düşürme, trafiğin başka bir yoldan geldiği anlamına gelir.

Ağ geçidinin kendi LAN adresi başka bir yoldur. Kutunun kendisine gönderilen paketler INPUT zincirine gider, FORWARD zincirine değil, bu yüzden bir istemci LAN ana bilgisayarını kaybedip yine de yönlendiricinin yönetim sayfasını açabilir. Bu önemli olduğunda eşleşen INPUT kuralını ekleyin.

Filtrenin göremedikleri

Filtreleme paket değerlendirilirken olur, bu yüzden kurulmuş bir TCP oturumu kapanana veya sıfırlanana kadar devam edebilir. Engelleme hemen etki etmeli ise, kural eklendikten sonra o kaynak için izlenen akışları conntrack -D -s 10.8.0.6 ile temizleyin. Birkaç saniyelik örtüşme kabul edilebilirse bu seçimi örtük bırakmak yerine kaydedin. Her durumda, sonraki kişi kuralın canlı trafiği mi yoksa yalnızca yeni bağlantıları mı durdurduğunu bilmelidir.

Eşler arası trafik ana makinenin güvenlik duvarına asla dokunmaz. client-to-client etkinleştirildiğinde OpenVPN bu paketleri daemon içinde iletir, böylece ne FORWARD ne de INPUT onları görür. Tek çözüm client-to-client'ı kapatmak veya eşlerin birbirine ulaşabileceğini kabul etmektir; iptables kuralı o trafiği görmez.

IPv6, bellenim ve yeniden başlatma sonrası dayanıklılık

IPv4 kuralı IPv6 hakkında hiçbir şey söylemez. Tünel ve LAN her iki aileyi de taşıyorsa, eşdeğer kural ip6tables içinde veya o ana makinede politikaya sahip nftables kural kümesinde bulunmalıdır. Yönlendirici bellenimi netfilter'ı sıklıkla kendi soyutlamasının arkasına saklar, bu yüzden forumdan kopyalanan sözdizimi ve tablo adları geçerli olmayabilir.

OpenWrt'de belgelenen yol, elle yazılmış bir iptables satırı değil, güvenlik duvarı yapılandırma girdisidir ve elle yazılmış bir satır güvenlik duvarı yeniden yüklendiğinde kaybolabilir. Diğer dağıtımlar kuralları netfilter-persistent, bir önyükleme birimi veya üretici deposu aracılığıyla geri yükler ve bu mekanizmalar birbirinin yerine geçmez. Seçtiğinizi bir yeniden başlatmayla kanıtlayın, çünkü yeniden yükleme farklı bir yolu çalıştırır.

Yol yol doğrulayın, sonra temiz biçimde geri alın

Her yolu ayrı ayrı test edin, çünkü başarılı bir kontrol diğerlerini gizler. Engellenen istemci tünel üzerinden internete ulaşmaya devam etmeli ama bir LAN ana bilgisayarına karşı başarısız olmalı, ikinci istemci aynı ana bilgisayara ulaşmalı, ağ geçidi adresi ve eş yolu ise her biri kendi gözlemini gerektirir. Sonuçları kuralın yanına yazın ki sonraki değişikliğin bir temeli olsun. Aşağıdaki tablo bilette saklanmaya değer kümedir.

YolKural ile beklenenBaşarısız olduğunda
Engellenen istemci bir LAN ana bilgisayarınaYanıt yokKural bir kabulün altında, ya da kaynak eşleşmiyor
Engellenen istemci internetetun0 üzerinden çalışırKural çok geniş, hedef eşleşmesi yok
İkinci istemci aynı LAN ana bilgisayarınaÇalışırKural amaçlanan ana bilgisayardan fazlasıyla eşleşti
Engellenen istemci ağ geçidinin LAN adresineYalnızca eşleşen INPUT kuralıyla engellenirINPUT kuralı eksik
Engellenen istemci bir eşin tünel adresineHâlâ çalışırclient-to-client etkin ve güvenlik duvarı kapsamı dışında

Geri alma bir flush değil, belirtime göre silmedir: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP tam olarak o girdiyi kaldırır ve zincirin geri kalanını bozulmadan bırakır. Aynı satırı önyüklemede kuralları geri yükleyen dosyadan da kaldırın, yeniden yükleyin ve istemcinin yeniden LAN ana bilgisayarına ulaştığını doğrulayın. FORWARD zincirini flush etmek yazmadığınız kuralları da geri alır, bu da geri almayı ikinci bir olaya dönüştürür.

Bileti kapatmadan önce üç şeyi doğrulayın: sabitlenen adres sertifikayla eşleşiyor, kural kabullerin üzerinde ve sayaç sıfır değil, ve kalıcılık dosyası test ettiğiniz kuralın aynısını içeriyor. Bunlardan biri eksikse, engelleme bir shell oturumundaki yanılsamadır.

İlgili makaleler