Encaminhamento do tráfego HTTP para outro endereço IP com o iptables

6

Queremos encaminhar todo o tráfego HTTP para outro endereço IP em uma máquina Linux de armazenamento do Amazon EC2 (com base no CentOS). Eu sei como fazer isso com regras de proxy e apache, mas eu estava supondo que o iptables seria uma solução muito mais rápida (talvez não!)

Comandos

sudo iptables -P INPUT ACCEPT
sudo iptables -F
sudo iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 80 -j DNAT --to 208.68.208.81:80
sudo iptables -A FORWARD -p tcp -d 208.68.208.81 --dport 80 -j ACCEPT

iptables -t nat -L -v -n

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 to:208.68.208.81:80

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 11 packets, 820 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 11 packets, 820 bytes)
 pkts bytes target     prot opt in     out     source               destination

iptables -L -v -n

Chain INPUT (policy ACCEPT 202 packets, 15705 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            208.68.208.81       tcp dpt:80

Chain OUTPUT (policy ACCEPT 145 packets, 13747 bytes)
 pkts bytes target     prot opt in     out     source               destination

link em um navegador da Web funciona, mas quando eu tento o endereço IP da máquina do EC2 com essa configuração, recebo um tempo limite. Eu vejo alguns pacotes aparecerem com watch -d iptables -t nat -L -v -n

Ajuda!

Atualização: adicionado -i eth0 à regra PREROUTING

    
por Lightbeard 02.05.2012 / 21:27

3 respostas

4

Existem três problemas potenciais que vejo (contary para a outra resposta eu não vejo nada que possa causar um "loop", mesmo na versão não editada da sua pergunta).

    O
  1. encaminhamento de IP deve estar ativado.
  2. Depois de ser colocado e colocado de volta na rede, o pacote pode ser vítima da filtragem de endereços de origem, pois se parece muito com um pacote falsificado.
  3. As respostas aos pacotes que passam por um NAT devem passar pelo mesmo NAT para que a tradução reversa possa ser executada. Caso contrário, o cliente obterá uma resposta com o IP / porta de origem incorreto, o que provavelmente será descartado (se ainda não tiver sido eliminado pela filtragem de caminho inverso).

Você pode trabalhar nos pontos 2 e 3 usando uma regra SNAT ou MASQURADE além do DNAT, mas se fizer isso, você perderá o IP de origem original do tráfego. Isso tornará o controle do abuso muito difícil.

Outra solução para os pontos 2 e 3 seria configurar uma VPN entre os dois servidores. Em seguida, use DNAT para encaminhar o tráfego pela VPN e pelo roteamento baseado em IP de origem para trazer as respostas de volta ao NAT.

    
por 08.08.2016 / 19:51
1

Você pode usar o rinetd para simplesmente encaminhar seu tráfego ip.

    
por 02.05.2012 / 23:47
1

Você criou um loop. Certifique-se de adicionar a interface in à regra PREROUTING (por exemplo, -i eth1 ou qualquer outra coisa).

Você também pode precisar de uma regra como esta:

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 

  45M 3723M MASQUERADE  all  --  *     WAN_IF  0.0.0.0/0            0.0.0.0/0  

Caso contrário, os pacotes irão diretamente da máquina para a qual foram redirecionados para o cliente, o que não os espera do host.

    
por 02.05.2012 / 22:07