VPN güvenlik duvarı kancası aynı kuralı neden iki kez ekler
Yeniden bağlanma kancanızı tekrar çalıştırabilir, bu yüzden istenen duruma göre tasarlayın: sahip olunan zincirler, eklemeden önce test, tek serileştirilmiş değişiklik ve dar bir sökme.
Kanca ilk seferde çalışır ve üç yeniden bağlanmadan sonra zincir aynı kuralın üç kopyasını tutar. Hiçbir şey yüksek sesle başarısız olmadı; betik her çalıştığında ona söyleneni yaptı. Bir VPN kancası birden çok kez çalışabilen bir yapılandırma işlemidir, bu yüzden bir sahibe, istenen duruma ve serileştirilmiş bir değişikliğe ihtiyaç duyar. Bu sırayı izleyin ve kopyalar durur.
Herhangi birini yazmadan önce kurallara bir sahip verin
Tek bir kural yazmadan önce bu entegrasyonun hangi zincire veya tabloya ait olduğuna karar verin. Kancanın oluşturup boşalttığı özel bir zincir, sahipliğin en açık biçimidir, çünkü temizlik o zinciri başkasının politikasına dokunmadan kaldırabilir. Kuralları paylaşılan bir zincire eklemek zorundaysanız, sonraki bir aramanın tam olarak sizinkileri bulması için yorumla etiketleyin. Sökme işlemini güvenli kılan sahipliktir ve sökme, sessizce başarısız olan kısımdır.
iptables -N VPN_HOOK 2>/dev/null || true
iptables -C INPUT -j VPN_HOOK 2>/dev/null || iptables -I INPUT -j VPN_HOOK
iptables -S VPN_HOOK
Burada yorum süs değildir. Kuralınızı kaldırmakla tesadüfen benzer görünen bir kuralı kaldırmak arasındaki farktır ve kaydedilen kural kümesinde varlığını sürdürür. Yorumu bir kez bir değişkene yazın ve ekleyen, test eden ya da silen her komutta aynı dizgiyi kullanın.
Tekrar eklemek yerine istenen durumu test edin
Tünel ayaktayken neyin var olması gerektiğini yazın: hangi arayüzler, hangi kaynak ve hedef, hangi protokol ve hangi bağlantı noktası. Ardından her kuralı bir test ve ardından ekleme olarak ifade edin, böylece ikinci çalıştırma kuralı bulur ve hiçbir şey yapmaz. Kontrol komutu kural varken sıfırla çıkar ve betiğin ihtiyaç duyduğu sinyal tam olarak budur. iptables başvurusu burada kullanılan kontrol, ekleme ve araya sokma biçimlerini belgeler.
iptables -C VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT ||
iptables -A VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT
Konum konusunda dikkatli olun. Bir kuralı denetleyip başa eklemek daha önce önce gelen kasıtlı bir reddin önüne bir izni taşıyabilir, bu yüzden ikinci çalıştırma hiçbir şey eklemediği halde davranışı değiştirir. Kendi zincirinizin içinde sona ekleyin ve sıralamayı o zincire sıçramanın konumuyla kontrol edin. Zincir içindeki sıra önemliyse zinciri kural kural yamalamak yerine bilinen bir listeden yeniden oluşturun.
Gereken kural sabit bir test olarak ifade edilemiyorsa durun. Bu genellikle istenen durumun hâlâ belirsiz olduğu anlamına gelir.
Kalacağını ummak yerine değişikliği serileştirin
İki kanca çağrısı üst üste binebilir ve ikisi de diğeri eklemeden önce eksik bir kural görebilir. xtables'ın bekleme seçeneği bir komutu kilidi beklemesine yol açar, ancak iki komut arasında denetle-sonra-ekle dizisini atomik yapmaz. Tüm işlemi kendi kilidinizle serileştirin veya bildirilen bir topluluğu tek bir işlem olarak uygulayan bir yönetici kullanın. nftables ikincisini yapabilir ve bu, kullanılabilir olduğu ana makinelerde onu tercih etmenin bir nedenidir.
flock /run/vpn-hook.lock /usr/local/sbin/vpn-firewall-apply
nft -f /etc/nftables/vpn-hook.nft
Hangi mekanizmayı seçerseniz seçin, kritik bölümü kısa tutun ve yeniden girilebilir yapın: yarı yolda başarısız olan bir kanca yeniden çalıştırılmaya güvenli olmalıdır. Sonucu günlüğe kaydedin ki tekrarlanan çalıştırma kural sayısından çıkarılmak yerine günlükte görünsün. İki farklı denetleyici kancayı çağırabiliyorsa önce bunu düzeltin; hiçbir kilit iki sahibi onarmaz.
Yalnızca size ait olanı sökün
Sökme, bir değiştirme bağlantısını emekliye ayırdığı bağlantıdan ayırt etmeli ve asla düzgün bir temizlik almayan bir olayı atlatmalıdır. Ekleme için kullandığınız aynı tanımlayıcılarla silin ve temizliği basitleştirmek için paylaşılan bir zinciri asla boşaltmayın. Sert bir duruştan sonra, alt kancanın çalıştığını varsaymak yerine bir sonraki başlangıçta bir uzlaştırma geçişi çalıştırın.
iptables -D VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT
iptables -F VPN_HOOK
ip -brief link show type tun
Arayüzün ömrü de tasarımın parçasıdır. Yeniden bağlanma farklı adlı bir aygıt oluşturabilir, bu yüzden ikinci tünelin adını sabit kodlayan kural geçerli görünürken eskir. Bağlantının kendisinin açığa çıkardığı kimliği tercih edin ve her çalıştırmada yeniden okuyun. Üç olayı ayrı ayrı test edin: yinelenen bağlantı, değiştirme bağlantısı ve kapatma. İzin verilen trafik üçünü de yineleme olmadan atlatmalı ve ilgisiz hizmetler dokunulmadan kalmalıdır.
Yürüyüş, kancanın bir sahibi, eklediği her kural için bir testi, tek bir serileştirilmiş yolu ve yalnızca kendi durumunu kaldıran bir sökmesi olduğunda sona erer. İki kez çalıştırılması güvenli bir kanca, bir kez akıllı olan bir kancadan daha değerlidir.