![iptables: Como “substituir” um redirecionamento de porta?](https://rvso.com/image/1452245/iptables%3A%20Como%20%E2%80%9Csubstituir%E2%80%9D%20um%20redirecionamento%20de%20porta%3F.png)
Minha configuração é a seguinte:
Eu tenho um servidor Linux com duas interfaces eth0
e eth1
. eth1
tem uma conexão com a Internet através da minha LAN normal. eth0
está 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 eth0
sejam 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 eth0
com 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 eth0
para 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 PREROUTING
tabela antes que ela chegue à DNAT
linha:
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 à DNAT
regra.
(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 DNAT
e :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.