iptables: Como “substituir” um redirecionamento de porta?

1

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:

Eu quero ter pacotes na porta 80 originados de máquinas conectadas a eth0 para serem redirecionadas para a porta 80 na própria máquina de roteamento, e os pacotes de resposta, é claro, serão redirecionados de volta. Isso por si só é bastante simples, mas eu tenho mais um requisito. Eu gostaria que os clientes em eth0 com determinados endereços IP pudessem ser isentos disso, e ter 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 de 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

    
por AppleDash 29.05.2015 / 22:28

1 resposta

0

Você precisa apenas sair da tabela PREROUTING antes de chegar à linha DNAT :

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 de qualquer pacote do IP isento ( -s <exempt ip> ) como a primeira regra, para que seja atingido antes de chegar ao DNAT rule.

(Você também pode precisar fazer algo semelhante em 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 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.

    
por 29.05.2015 / 22:41