É possível redirecionar / rejeitar o tráfego TCP para um destino externo, baseado em regras?

2

Eu nem tenho certeza se isso é possível ... Além disso, por favor, perdoe minha ignorância sobre o assunto.

O que estou procurando é "algo" que me permita redirecionar todo o tráfego TCP que chega ao host A para o host B, mas com base em algumas regras.

Diga que o host A (o intermediário) recebe uma solicitação (digamos, uma solicitação HTTP simples) de um host com o domínio X. Nesse caso, ele deixa passar e é tratado pelo próprio host A.

Agora, vamos supor que o host A receba outra solicitação HTTP de um host com o domínio Y, mas, desta vez, devido a algumas regras personalizáveis, o host A redireciona todo o tráfego para o host B e o host B pode manipulá-lo como se veio diretamente do domínio Y. E, neste ponto, o host B e o host com o domínio Y são capazes de se comunicar livremente (é claro, host A).

NOTA: Todos esses hosts estão na Internet, não dentro de uma LAN.

Por favor, deixe-me saber se a explicação não está clara o suficiente.

    
por xfx 20.10.2013 / 02:53

7 respostas

2

Você pode usar haproxy configurando um front-end com vários back-ends com base em suas regras:

frontend my_front
    mode http
    bind <ip_address>:80
    option forwardfor
    use_backend backend1 if <condition>
    use_backend backend2 if <condition>

backend backend1
    mode http
    server server1 localhost:8000

backend backend2
    mode http
    server server2 remote_server:8000

Você pode ler mais sobre isso no site da haproxy: link

    
por 28.10.2013 / 16:19
5

O que você está descrevendo em um TCP Proxy . Se você estivesse apenas procurando redirecionar Conexões HTTP, precisaria apenas de um Proxy HTTP .

Um Proxy TCP comumente usado é rinetd .

Em debian-administration.org :

The rinetd package contains a simple tool which may be configured to listen for connections upon a machine, and silently redirect them to a new destination. In short it acts as a simple to configure TCP proxy.

Não importa se você está na Internet ou dentro de uma LAN, desde que possa rotear para o novo IP e nenhum firewall atrapalhe.

    
por 22.10.2013 / 21:19
1

Talvez você possa usar o socat?

socat TCP-LISTEN:80,fork TCP:my.newservername.com:80
    
por 23.10.2013 / 23:20
0

A maioria das soluções de firewall de hardware / software pode fazer esse trabalho para você com base no IP de origem.

Se você quiser tomar decisões com base no domínio de origem do que seguir os firewalls de hardware, certamente pode fazer isso: série DLINK DFL (pelo menos modelos seniores), CheckPoint, Cisco ASA.

As pessoas também dizem que o software FW Comodo pode fazer isso ( link ). Mas não tenho certeza.

Tenha em conta que qualquer solução de software que não seja do Windows que você tenha sorte em encontrar também pode ser implementada como VM no Windows 2008R2.

    
por 25.10.2013 / 10:17
0

What I'm looking for is for "something" that would allow me to redirect all TCP traffic arriving to host A to host B, but based on some rules.

iptables é o melhor (apesar dos inimigos)

Say host A (the intermediary) receives a request (say a simple HTTP request) from a host with domain X. In that case, it lets it pass through and it's handled by host A itself.

para fazer essa declaração fazer sentido, estou supondo que você quer dizer host A executando http no tcp / 80. existe outro host entre a internet e o host A e você roteia -s 0.0.0.0/0 para hospedar A: 80. se você quer dizer que o host A é ao vivo na internet, não faça isso, até que você conheça bem o iptables: P

Now, let's suppose that host A receives another HTTP request from a host with domain Y, but this time, due to some customizable rules, host A redirects all the traffic to host B, and host B is able to handle it as if came directly from domain Y. And, at this point, both host B and the host with domain Y are able to freely communicate (of course, thought host A).

ok, então agora eu não acho que você está falando sobre a camada 3/4 aqui, mas a camada 7 reescreve ... tente .htacess no apache ou até melhor nginx (existe alguma outra escolha?)

NOTE: All these hosts are on the Internet, not inside a LAN.

d00d leia o que eu disse acima. aprenda iptables rápido. proteja-se.

Please, let me know if the explanation is not clear enough.

a explicação não é clara o suficiente. tente g00gle primeiro.

    
por 27.10.2013 / 01:02
0

Se o que você procura é uma solução geral de nível TCP, você deve aceitar A resposta de Ecolitan como correta e premia a recompensa. Vejo que você demonstrou algum interesse em redirecionar outros serviços.

Se você está interessado apenas em HTTP, ou o rinetd não fará tudo que você precisa, então a resposta do nandoP sobre o uso do .htaccess está no caminho certo (uma solução, pelo menos), mas você precisa saber um pouco mais . Como alternativa, você pode usar um software de proxy dedicado, como verniz ou lula. Se você estiver familiarizado com o Apache, pode ficar com isso.

Um apacherule redirecionaria, por exemplo, o link para link e, a menos que você faça algo a respeito, hostB verá a solicitação chegando como sendo para esse domínio. Dependendo do seu site, você provavelmente precisará consertar as coisas no hostB, a fim de que ele não comece a enviar páginas com URLs que se refiram ao hostb.example.com.

Se você tiver uma versão mais antiga do apache, talvez seja necessário corrigir o cabeçalho do host no hostB, mas, a partir do Apache 2.0.31, há uma diretiva ProxyPreserveHost (consulte docs para o mod_proxy) que você pode colocar no hostA.

Já faz um tempo que eu precisava disso, e acabei de descobrir sobre o ProxyPreserveHost. Parece que você precisa de algo assim em hostA (não testado):

<VirtualHost *:80>
  Servername www.example.com

  RewriteEngine on
  ProxyPreserveHost on

  RewriteCond %{REMOTE_ADDR}       ^123\.45\.67\.[0-9]*$
  RewriteRule    ^(.*)$  http://hostb.example.com/$1  [P]

  ...

</VirtualHost>

Seria possível adicionar vários domínios a este serverconfig, mas provavelmente é melhor configurar como acima separadamente para cada domínio.

Se o RewriteCond não corresponder, ele processará outras regras na configuração do virtualhost.

    
por 28.10.2013 / 14:57
0

Eu encontrei a seguinte funcionalidade interna do Windows funcionou perfeitamente para as minhas necessidades, melhor do que TCPTunnel ou até FPipe:

link

Por exemplo, para abrir o túnel de redirecionamento, use o seguinte: netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport

E para fechar / pará-lo, use o seguinte: netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport

    
por 06.01.2015 / 05:57