Redirecionar os https recebidos para o ip local com iptables

3

Eu tenho um roteador com uma interface de rede (eth0, ip público) e um alias para eth0: 0, ip local 192.168.1.1.

Eu quero redirecionar todo o tráfego de entrada de https (443) para outro servidor. Eu tentei com

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443 e funciona. Todo o tráfego que chega à porta ssl do meu ip público é redirecionado para 192.168.1.2.

Mas o principal problema é este; agora todo o tráfego de https do meu lan local para a internet também é redirecionado para esse ip local, por exemplo. link e 192.168.1.2 respostas. Como devo corrigir minha configuração para que ela funcione?

    
por AnttiQ 15.08.2013 / 10:23

1 resposta

1

Basta filtrar com base no endereço de destino:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -d $PUBLIC_IP -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443

Se o IP público for dinâmico, você precisará adicionar ganchos ao script do cliente DHCP para atualizar essa regra quando o endereço IP for alterado. Você também pode usar conjuntos de IPs para alterar o endereço IP para verificar sem alterar sua regra.

Outra solução menos perfeita é usar o módulo addrtype . Este módulo faz uma verificação na tabela de roteamento para determinar que tipo de entrada de roteamento o endereço possui. o tipo LOCAL pode ser usado para verificar se esse IP é do host.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -m addrtype --dst-type LOCAL  -m conntrack --ctstate NEW -j DNAT --to-destination 192.168.1.2:443

Observe que esta solução também redireciona conexões para 192.168.1.1 e 127.0.0.1 ou qualquer endereço IP que seu host tenha. Você pode excluir endereços de destino adicionando uma correspondência simples de ! -d 192.168.1.1 à regra.

    
por 15.08.2013 / 11:07