Como redirecionar um site usando IPtables?

2

Referi-me aos links a seguir antes de solicitar esta pergunta .

Eu estou fazendo um exemplo para meus alunos no NAT - pré-roteamento. Aqui, estou tentando substituir o ip de destino pelo que eu quero. Por exemplo, quando alguém tentar acessar www.facebook.com, o wwww.google.com será conectado.

Aqui está o que eu tentei fazer.

# host www.facebook.com
www.facebook.com is an alias for star.c10r.facebook.com.
star.c10r.facebook.com has address 31.13.79.65
star.c10r.facebook.com has IPv6 address 2a03:2880:f002:201:face:b00c:0:1
^C[root@shreyas joshis1]#

# host www.google.com
www.google.com has address 74.125.236.81
www.google.com has IPv6 address 2404:6800:4001:802::1014
[root@shreyas joshis1]# 

Agora, aqui está a regra da tabela IP.

# iptables -t nat -I PREROUTING -p tcp --dport 80  -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81
# iptables -t nat -I PREROUTING -p tcp --dport 443  -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81

Agora, comprometa-se com a tabela.

# iptables-save

No entanto, isso não funciona. Uma coisa eu sei que a resolução do DNS pode acontecer com vários IPs baseados na região, etc. Porque esses sites têm balanceador de carga DNS.

O problema é que eu posso bloquear esses IPs. Eu acredito que iptables funciona na camada de rede. Assim, a solicitação HTTP deveria ter chegado a essa camada. Ao atingir essa camada, ela deve ter pré-encaminhado para o outro IP. Por exemplo, sempre que o destino do IP for 31.13.79.65 , altere-o para o IP de destino - 74.125.236.81 .

Assim, após a resolução do DNS, se o navegador solicitar qualquer coisa para o IP 31.13.79.65 , a camada de rede deve alterá-lo para 74.125.236.81 . No entanto, isso não funciona. Alguém pode explicar por quê?

Por favor, tenha em mente que não sou especialista em networking. Eu tentei o meu melhor para colocar o melhor conhecimento que tenho sobre redes.

    
por dexterous_stranger 30.03.2014 / 15:31

3 respostas

3

Isso é o que você precisa fazer:

iptables -t nat -A OUTPUT -p tcp --dport 80  -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81
iptables -t nat -A OUTPUT -p tcp --dport 443  -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81

Você precisa usar a cadeia OUTPUT, já que essa visita é um tráfego de saída.

Este comando iptables assume que este comando é executado na máquina em que você estará demonstrando as regras. Depois que essa regra for aplicada, todo o tráfego para www.facebook.com será redirecionado para o endereço IP do Google.

Para demonstrar isso aos seus alunos, você também terá que criar entradas de host no arquivo /etc/hosts para que www.facebook.com seja sempre resolvido para 31.13.79.65 e não para algum outro endereço IP.

Para tornar a regra permanente, você precisa emitir:

/etc/init.d/iptables save
/etc/init.d/iptables reload

Não é iptables-save , pois apenas imprime as regras, conforme mencionado na resposta anterior.

Para ver esta regra, você deve mencionar especificamente -t nat desde que a regra é criada na tabela NAT:

iptables -t nat -L

    
por 17.12.2014 / 12:48
1

A cadeia PREROUTING é usada para pacotes que chegam pela rede ao host no qual você configurou o iptables. No entanto, se você testar a partir desse host, a cadeia PREROUTING não será usada. Para cobrir esse caso, você pode usar a cadeia OUTPUT.

Além disso, o comando iptables-save não faz o que você acha que faz. Seus dois primeiros comandos iptables modificam as regras ativas diretamente no kernel. Assim que você executar um desses comandos, a regra estará ativa para novas conexões.

O que o comando iptables-save faz é ler as regras no kernel e gravar tudo no stdout. Você pode redirecionar a saída do iptables-save para um arquivo para salvar sua configuração atual para mais tarde. Depois, você poderá ler essas regras em seu kernel usando o comando iptables-restore.

O problema que você menciona com o endereço IP sendo dinâmico pode ser melhor abordado manipulando as respostas do DNS. Se você alterar as respostas de DNS, não precisará usar a regra DNAT. Se você está executando o seu próprio resolvedor, você pode fazê-lo acreditar que é autoritativo para a zona que você quer redirecionar.

No entanto, para um rápido redirecionamento usando o iptables ou atualizando o arquivo hosts é mais fácil.

    
por 30.03.2014 / 16:08
0

Você pode usar a cadeia PREROUTING para rotear qualquer tráfego para o seu IP & porta.

iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111 
    
por 07.06.2016 / 09:36

Tags