Yalnızca belirli arayüzlerde belirli giden trafiğe izin ver


15

Benim garip bir sorunum var. İki ağ arabirimine sahip bir sunucum var eth0ve eth1. Her biri farklı bir ağa bağlı. Her ağın bir internet ağ geçidi vardır. Sunucunun çeşitli giden bağlantıları vardır: http (sunucudaki bazı komut dosyaları web sitelerini kazımak), nfs istemcisi, samba istemcisi, dns istemcisi ve bir e-posta alıcısı.

İçine girmeyeceğim nedenlerden dolayı, bu giden istemcileri ikiye bölmem gerekiyor, bu yüzden giden http, nfs, samba ve dns trafiği sadece eth0her şey yolunda iken isteniyor eth1.

Birkaç Google aramasını okudum ve iptablesihtiyacım olan şey gibi görünüyor ama gerçekten bir ipucum yok. Yalnızca gelen güvenlik duvarı kurallarını yönetmeye alışkınım ufw.

Birisi bana birkaç örnek kuralla başlayabilir ve sistemin önyüklemede bu kuralları benimsemesini nasıl sağlayacağını söyleyebilir mi? İdeal benim SSH bağlantısı beni kilitlemeden (I yapabilirsiniz fiziksel erişim elde, ama yerine olur değil).

Düzenle Tüm giden trafiği bir hesaptan bir arayüzle sınırlamak mümkünse istemcileri iki kullanıcıya bölebilirim. kağıt daha kolay gibi görünüyor.

Yanıtlar:


12

Ayrı bir yönlendirme tablosu ve bu tabloyu kullanarak işaretli paketleri yönlendirmek için bir ilke ve iptables / netfilter belirli paketleri işaretlemek için bir politika kurar.

Tablo oluşturun: echo 1 known >> /etc/iproute2/rt_tables

Bir yönlendirme kuralı oluşturun ( ipkomut iproute2'den alınmıştır ): ip rule add from all fwmark 1 table known

"Bilinen" adlı bir tablo oluşturduk ve 1'e eşit işaretli herhangi bir paketin "bilinen" tabloya göre yönlendirildiğini söyleyen bir yönlendirme kuralı oluşturduk. Sadece bilinen diye adlandırdım çünkü bilinen protokollerin listesi için - ne istersen onu adlandırabilirsin. Şimdi bilinen tabloyu doğru yolu izleyecek şekilde ayarladık.

ip route add default dev eth0 table known

İptables kuralları oluşturun:

iptables -t mangle -I PREROUTING -p tcp --dport 111 -j MARK --set-mark 1
iptables -t mangle -I PREROUTING -p tcp --dport 2049 -j MARK --set-mark 1

Örnek, NFS bağlantı noktalarındaki paketleri (111, 2049) 1 ile işaretler. Bu kuralı 'mangle' iptable'a ekliyoruz. Bu, yönlendirme tablolarından farklıdır ve değiştirilemez; mangle tablosu özel olarak paketleri NAT dışında herhangi bir şekilde değiştirmek içindir.

Şimdi, diğer her şeyi diğer arayüz üzerinden yönlendirmek için, standart yönlendirme tablosuna bir rota ekliyoruz.

ip route add default dev eth1

Bunu gerçekten anlamak için, LARTC howto'nun 4. ve 11. bölümlerini okuyun .


Aslında bu korktuğumdan çok daha basit. Linux ağ yığını gerçekten güzel bir canavar, değil mi ?! Bunu hızlı bir test yaptım ve her şey beklendiği gibi çalışıyor. Her arabirimi izliyorum iftopve her biri doğru trafiği gösteriyor. Çok teşekkür ederim.
Oli

Iptables veya iproute2'nin yapılandırmalarını nasıl sakladığını bilmiyorum. Her önyüklemede bu kuralları kaldırmak zorunda mıyım?
Oli

@Oli Yeniden başlattığınızda temizlenirler. Kuralları iptables-saveve ile kaydedebilir ve geri yükleyebilirsiniz iptables-restore. NetworkManager kullanıyorsanız, işlemi otomatikleştirmek için dağıtım programı komut dosyaları oluşturabilirsiniz. Ne yazık ki, resmi NM sayfasının özellik hakkında belgeleri yoktur, ancak Ubuntu ve Arch Linux belgeleri her ikisinden de bahsetmektedir.
Shawn J. Goff

5

"En kolay " yol, tek programlara belirli bir arabirimi (veya arabirimin ipini kullanmaları talimatı) vermektir. Örneğin:

ping -I eth1 8.8.8.8

ping'e eth1'i kaynak arabirimi olarak kullanma talimatı verirken

wget --bind-address 10.0.0.1 http://www.google.it/

wget'e bir IP adresi olan arayüzü düşünmeyi söyler10.0.0.1 .

Dürüst olmak gerekirse , ihtiyacınız olan tüm programlarla mümkün olup olmadığını bilmiyorum , ancak yazmanız gereken kuralları iptablesve iprouteprogramları kısaltmaya başlıyor .

Başlangıç olarak size okumalısınız bu öğretici üzerinde birden internet bağlantıları . İyi bir okuma da biridir binlerce expecially üzerinde iptables öğreticiler outbound filtering, process/ pid filteringve port filtering.


4

Bunun için uygun yol, giden paketler için kullanmak istediğiniz arabirime () bağlanmaktır. Çünkü daha sonra , giden arayüzlerine göre paketlerin nasıl yönlendirileceğini kontrol etmek için ip routeve ip rulekomutlarıyla yollar ayarlayabilirsiniz . Örneğim için aşağıdaki ağı kabul edeceğim:

  • eth0:
    • Adres: 192.168.0.2/24
    • Varsayılan Ağ Geçidi: 192.168.0.1
  • eth1:
    • Adres: 192.168.1.2/24
    • Varsayılan Ağ Geçidi: 192.168.1.1

Biri alternatif olarak adlandırılan eth0 için giden trafik için ve ana olarak adlandırılan eth1 için bir tablo olmak üzere iki yönlendirme tablosu oluşturacağım. Yönlendirme tablosu ana her zaman vardır ve routeve ip routekomutları tarafından kullanılan normal tablodur . Çoğu insan asla başka masalarla uğraşmaz. Alternate adlı tablo oluşturmak için şu satırı ekleyeceğiz /etc/iproute2/rt_tables:

10    alternate

Main tablosunun varsayılan önceliği 254'tür. Yönlendirme tablosunun geçerli olduğu kurallar ip rulekomut tarafından kontrol edilir . Varsayılan olarak, bu komut aşağıdaki gibi görünmesi gereken mevcut kuralların bir listesini yazdırır:

0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

Bu temelde, tabloda localkendi IP adresim gibi yerel yollar için çekirdek tarafından tutulan özel bir tablo olan bir yol arayacağını söylüyor . Daha sonra tablo ana ve tablo varsayılanını deneyecek. Tablo varsayılanı normalde boştur, bu nedenle anada eşleşme yoksa, barındırılacak yol yoktur. İlk olarak, tabloyu eth0 kuralları ile değiştirelim.

sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1

Normalde alternatetablonun tabloya benzemesini istersiniz main. Tek fark, yönlendirmenin farklı olması gerektiğidir. Tüm NFS, HTTP vb. Trafiğin, eth1 üzerindeki ağa yönelik olsa bile, eth0'daki varsayılan ağ geçidinden geçmesini istiyorsanız, yukarıdaki ikinci satırı eklemek istemeyebilirsiniz. Sonraki adım, bu alternatif yönlendirme tablosunun ne zaman kullanılacağı için bir kural eklemektir:

sudo ip rule add from 192.168.0.0/24 pref 10 table alternate

Bu kural, 192.168.0 ağındaki bir adresten gelen trafiğin alternatenormal maintablo yerine yönlendirme tablosunu kullanacağını söylüyor . Son adım, kullanması gereken tüm istemcilerin eth0bağlandığından emin olmaktır . İle wget, örneğin, set --bind-address=192.168.0.2, NFS için belirlenenclientaddr=192.168.0.2bağlama seçeneği. Perl ile LibWWW kullanıyorsanız, bağlandığı yerel arayüzü kontrol etmek için LWP :: UserAgent içindeki localaddr seçeneğini ayarlayabilirsiniz. Bağlama ve derleme kaynağını denetleyemediğiniz bir istemciniz varsa, bir seçenek değildir, adresini değiştirmek için bir iptables kuralı kullanabilirsiniz, ancak bu daha çok bir hack'tir ve çalışmayabilir. Nat tablosunun veya mangle tablosunun PREROUTING zincirinde ayarlanmış bir SNAT kuralına ihtiyacınız olacaktır. Bunun çalışması için yine de yukarıda verilen değiştirilmiş yönlendirme tablolarına ihtiyacınız olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.