iptables: VPN istemcileri yalnızca tek bir ana bilgisayara ulaşsın
İhtiyacınız olan kural INPUT'ta değil FORWARD'da. VPN havuzu için tek bir hedefe izin verin, gerisini reddedin, sonra sayaçlar ve geri alma komutuyla kanıtlayın.
İlgisiz görünen iki destek talebi aslında tek bir nedeni paylaşıyor. Birincisinde yönetici sunucunun yalnızca tünelden gelen bağlantıları kabul etmesini istiyor; ikincisinde VPN kullanıcıları tek bir iç ana bilgisayara ulaşmalı ve fazlasına değil. İki politika da FORWARD'a aittir ve ikisi de genellikle INPUT'ta denenir. Sonuç güvenlik duvarı gibi görünür ama yer tutucu gibi davranır.
Hangi zincir sorunuzu yanıtlar
Bir VPN istemcisinin yerel ağdaki bir ana bilgisayara ya da ötesinde internete gönderdiği paketler çekirdek tarafından iletilir ve FORWARD'da değerlendirilir. INPUT ve OUTPUT yalnızca sunucunun kendisinde biten veya oradan başlayan trafiği görür. Bu nedenle tun0 üzerinden gelmeyen her şeyi reddetmek sunucunun kendi dinleyicilerini korur ve önce kurulu akışlara izin verilmezse SSH oturumunuzu da sonlandırır. Bu, istemcilerin nereye gidebileceği konusunda hiçbir şeyi değiştirmez.
Önce soruyu adlandırın: sunucuya kim ulaşabilir veya istemciler nereye gidebilir. Çoğu ağ her iki yanıta da ihtiyaç duyar, farklı zincirlerde.
Önce durum, sonra izin, sonra ret
İzin listesi ancak belirli izin genel retin üzerinde duruyorsa ve dönüş trafiği ikisinin de üzerinde izinliyse çalışır. Kuralları açık konumlara ekleyin, sonra sıranın varsayılması yerine görünmesi için zinciri iptables -S FORWARD ile dökün.
POOL=10.99.0.0/24
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s "$POOL" -d 172.31.20.15 -p tcp -m multiport --dports 443,3389 -j ACCEPT
iptables -I FORWARD 3 -s "$POOL" -j REJECTBunun gerçek trafikle temasında dayanıp dayanmayacağını iki ayrıntı belirler. Durum kuralı olmadan, az önce izin verdiğiniz bağlantılara gelen yanıtlar kendileri ret kuralına göre değerlendirilip düşürülür. Sınırsız bir LOG kuralı ilk taramada küçük bir bölümü doldurabilir, bu yüzden günlüklemeye devam etmeden önce -m limit --limit 10/min ekleyin. REJECT hemen bir hata döndürür, bu da listeyi ayarlarken daha dostçadır; DROP sessizce atar, böylece her hata zaman aşımı gibi görünür. Birini bilerek seçin ve seçimi değişiklik kaydına yazın.
İletme ve NAT zaten çalışıyor olmalı
Filtreleme bir yolun var olduğunu kanıtlayamaz. Önce çekirdeğin hiç ilettiğini doğrulayın ve bu ayarı kabukta tek seferlik bir komut yerine kalıcı yapın. Filtre son katmandır, ilk değil.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEMaskelemenin nereye ait olduğu istemcilerin nereden çıktığına bağlıdır. Tünel üzerinden uzak bir ağa çıkıyorlarsa NAT kuralı WAN arayüzüne değil o arayüze yazılır. Sonra sayaçlara bakın: POSTROUTING sayacı hiç kıpırdamazken FORWARD kabul sayısı artıyorsa dönüş yolu bozuktur ve filtre iyidir. Bu okuma, hiçbir zaman sorun olmayan kuralları yeniden yazmakla geçecek bir öğleden sonrayı kurtarır.
Posta bloğu bir zincir ötede
25 numaralı bağlantı noktasını INPUT'ta engellemek yalnızca VPN sunucusuna adreslenmiş postayı durdurur. Tünelden posta gönderen ele geçirilmiş bir istemci iletilir, bu yüzden blok 465 ve 587'nin yanında FORWARD'da durmalıdır. Bir uygulama postayı meşru şekilde aktarıyorsa hedefini ve bağlantı noktasını o kuralın üstüne koyun.
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTBaşka bir şeyi sıkılaştırmadan önce ret sayacını bir hafta çalıştırın. Tırmanmayı bırakan sayı, az önce kırdığınız meşru akıştır.
Geri okuyun, sonra bir istemciden kanıtlayın
Kural kümesini betiğinizin yazdığı gibi değil, çekirdeğin bildirdiği gibi okuyun. iptables -S FORWARD ile başlayın, sonra iptables -t nat -L POSTROUTING -n -v ile NAT tablosu, sonra incelediğiniz akışın conntrack kaydı. İş sürdükçe bir geri alma komutu veya planlanmış bir temizleme bulundurun. Her çağrı -w gerektirir, aksi halde iki yönetici xtables kilidinde çakışır. Bir değişiklik penceresinde bunların hiçbiri isteğe bağlı değildir.
Havuzun içindeki bir istemciden ve dışındaki bir istemciden test ederek bitirin. Yalnızca yazdığınız makineden çalışan bir kural politika değildir.