iptables: Como “substituir” um redirecionamento de porta?

iptables: Como “substituir” um redirecionamento de porta?

Minha configuração é a seguinte:

Eu tenho um servidor Linux com duas interfaces eth0e eth1. eth1tem uma conexão com a Internet através da minha LAN normal. eth0está servindo DHCP e a própria interface tem um endereço IP de 10.0.0.1.

Eu quero realizar o seguinte:

Quero que os pacotes na porta 80 originados de máquinas conectadas eth0sejam redirecionados para a porta 80 na própria máquina de roteamento e que os pacotes de resposta sejam redirecionados de volta, é claro. Isso por si só é bastante simples, mas tenho mais um requisito. Gostaria que os clientes eth0com determinados endereços IP pudessem ficar isentos disso e tivessem os pacotes da porta 80 roteados como normalmente seriam. Como posso fazer isso? Até agora, fiz o seguinte para redirecionar todos os pacotes da porta 80 eth0para a máquina local. Está funcionando, mas não sei como fazer meu segundo requisito.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -i eth0

iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1

Responder1

Você precisa apenas sair da PREROUTINGtabela antes que ela chegue à DNATlinha:

iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN

Isso deve inserir ( -I) uma nova regra para sair ( -j RETURN) da tabela de roteamento para qualquer pacote do IP isento ( -s <exempt ip>) como a primeira regra, para que seja atingido antes de chegar à DNATregra.

(Você também pode precisar fazer algo semelhante POSTROUTING, não tenho certeza.)


A outra opção é criar um conjunto de IPs ( man ipset) para os IPs que você deseja isentar e, em seguida, adicionar uma correspondência invertida às suas regras DNATe :SNAT

ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0

Isso é mais fácil de gerenciar porque você pode facilmente adicionar ou remover IPs isentos do ipset sem modificar o iptables.

informação relacionada