iptables port tabanlı yönlendirme


2

Başarısız günlerce bu Googling oldum. Sunucumdan zaman zaman bir VPN'e bağlanıyorum ve Debian sunucumu VPN üzerinden 80 ve 443 numaralı portları ve eth0 arabirimi üzerinden diğer tüm portları kullanacak şekilde yapılandırmaya çalışıyorum.

Bunu yapmak için herhangi bir yardım çok takdir edilmektedir.

Yanıtlar:


1

İlk önce bu kılavuza bakın: http://lartc.org/howto/lartc.rpdb.multiple-links.html (ve / veya birden fazla varsayılan rota kullanmak için diğer kılavuzlar)

Bu durumda, çözümün sunucunuz için iki ağ arabirimini (varsayılan eth0 ve örneğin eth0: 1, ağınızdan farklı bir ip ile) yapılandırdığını ve ardından tüm trafiğin vpn'ye gideceği şekilde yolları yapılandırdığını düşünüyorum. ve ikincil arayüzden kaynaklanan trafik vpn'nin dışında kalır. Sonra ssh ile -b seçeneği ile ikincil arabirime bağlayın.

VEYA birden fazla yolu ayarlayın, böylece ikincil arayüzden gelen trafik vpn'ye gider, ardından ikincil ip adresine bağlı (sadece) bir www proxy sunucusu kurun. Ardından bu proxy sunucuyu tarayıcılarda kullanın.

VEYA (sadece) wget kullanıyorsanız, yukarıdakileri yapın ve ikincil arayüze bağlanmak için --bind-address seçeneğini kullanın.

VEYA daha az genel bir çözüm, diğer cevabın 20 Aralık'ta açıklandığı gibi, birden çok yönlendirme tablosuyla uğraşmadan bağlandığınız sunucular için ip için özel bir rota yapılandırabilirsiniz. Bunun gibi:

route add -host [the host you're connecting to] gateway [your gateway address]

İşte gerçek bir dünya örneği. Bir vpn bağlantısı kurdum, vpn adresi 23.21.xxx.yyy ve yerel dış adresim 91.157.xxx.yyy ve yerel iç ağ geçidi adresim 192.168.0.1.

root@dell64:~# curl -s ipchicken.com|egrep '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+.*<br>'|sed 's/[0-9][0-9]*[.][0-9][0-9]* .*/xxx.yyy/'
        23.21.xxx.yyy
root@dell64:~# route add -host ipchicken.com gateway 192.168.0.1
root@dell64:~# curl -s ipchicken.com|egrep '[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+.*<br>'|sed 's/[0-9][0-9]*[.][0-9][0-9]* .*/xxx.yyy/'
        91.157.xxx.yyy

(ipchicken.com web sitesi sadece harici ip adresinizi gösterir ve grep yalnızca harici ip adresinin bulunduğu satırı filtreler ve sed, son parçaları xxx.yyy ile değiştirir)


route linux'a itiraz edildi demek istiyorsun ip route add [host connecting to] via [your gateway address]
BatchyX

Eh, rota da çalışır. Yukarıdakiler kelimenin tam anlamıyla benim terminalimden kopyalanmıştı.
Viljo Viitanen

0

"Kullanmak" derken, istek almak ve sitelere hizmet vermek istiyorsan, bunu yapmak için Apache'yi (veya web sunucunuzu) yapılandırmanız gerekir. Listen vpnIP:80 ve Listen vpnIP:443. Bu yüzden diğer IP'lerde çalışmaz.

Ek olarak iptables kullanarak, eth0 için 80 ve 443 numaralı DROP portlarını kullanabilirsiniz ve sadece VPN arayüzüne izin verin (aşağıda tun0 kullandım);

-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j DROP
-A INPUT -i tun0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i tun0 -p tcp -m tcp --dport 443 -j ACCEPT

"Kullanmak" derken, giden bağlantıyı (internette gezinmek) kastediyorsanız, bunun bir yolu sunucuya (veya VPN içinde bir yere) bir proxy (kalamar gibi) yüklemek ve tüm trafiği VPN varsayılan ağ geçidini göndermek üzere proxy'yi yapılandırmaktır. 80 ve 443 numaralı bağlantı noktalarını proxy bağlantı noktasına (kalamar için 3128) yeniden yönlendirmek için iptables NAT tablosunu kullanabilirsiniz:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:3128
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 80 -j REDIRECT --to-port 3128

varsayarsak:

tun0 = vpn interface
192.168.1.2 = IP of your server on tun0 (vpn)

Ve aynı şeyi 443 numaralı bağlantı noktası için de yapın.

Muhtemelen bazı testler ve ayarlamalar yapılması gerekir, ancak bu şekilde giderse genel davranış budur.


Cevabınız için teşekkür ederim, ama bir HTTP sunucusuna ev sahipliği yapmayacağım. Sadece 80 ve 443 numaralı bağlantı noktalarının VPN'den geçmesini istiyorum. Örneğin, Firefox kullanırken trafiğin VPN'den geçmesini istiyorum. Diğer tüm bağlantı noktaları eth0 aracılığıyla. Diğer bir seçenek ise VPN'den geçen bazı portları dışlamaktır. Hangisinin iptable kuralları oluşturması daha kolay olacağından emin değil.
Arya

Sorun, iptables'da giden trafiği engellerseniz, yönlendiriciye başka bir rotaya göndermesi gerekir, aksi takdirde çalışmaz.
laurent

(Basıldığında çok erken girin ...) Bunu yapmanın bir yolu, VPN ağ geçidine giden varsayılan rotanızı tanımlamaktır, ancak diğer şeylerin eth0'a gitmesini istiyorsanız, diğer bağlantı noktalarındaki harici sunuculara erişmeniz gerekiyorsa bu işe yaramaz DNS gibi. En iyi seçeneğiniz sunucunuzda bir proxy kullanmak ve 80 ve 443 numaralı bağlantı noktalarını proxy bağlantı noktasına yönlendirmek ve proxy'yi VPN kullanacak şekilde yapılandırmak için iptables kullanmak olduğunu düşünüyorum. Proxy portuna yönlendirilen iptables dahil cevabı güncelleyeceğim.
laurent

22 numaralı bağlantı noktasının VPN'den geçmesini engellemeye ne dersiniz? yapmak bu kadar basit mi?
Arya

Yalnızca birkaç ana bilgisayara veya ağa ssh yapmak için 22 numaralı bağlantı noktasını kullanırsanız, LOT'u daha kolay hale getirin, bunlar için statik yollar tanımlayabilir ve vpn için varsayılan rotayı yapılandırabilirsiniz. Ancak, bağlantı noktalarına göre yönlendirmek mümkün olmadığından, yalnızca IP olan, yönlendireceğiniz IP'leri (veya ağları) önceden bilmeniz gerekir.
laurent
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.