Configurando NAT simples com iptables - qual das duas soluções está correta?

0

Eu tenho que configurar as regras do iptables que irão mudar todos os endereços de origem dos pacotes de saída para o endereço IP público do roteador e redirecionar todos os pacotes de entrada com a porta de destino 80 para uma das máquinas onde o servidor web está. Esta é uma atribuição da uni e eu já tenho respostas para isso, mas elas são um pouco inconsistentes. Um conjunto de respostas vem do livro de onde vem essa tarefa (portanto deve estar correto) e a outra vem do professor. Assim, o livro diz que deve ser feito assim (eth0 é interface pública com IP público e eth1 é interface conectada a rede local - uma imagem para melhor referência ):

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source IPX
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-
destination IP1:80

e minha professora acha que essas são as respostas corretas:

iptables -t nat -A POSTROUTING -i eth1 -j SNAT --to-source IPX
iptables -t nat -A PREROUTING -p -o eth1 tcp --dport 80 -j DNAT --to-\ 
destination IP1:80

Como você pode ver, a diferença está nas interfaces escolhidas. Pelo que entendi, as opções -i e -o são para diferenciar entre "subinterfaces de saída e de entrada" em uma única interface.

Assim, a primeira regra na resposta do meu livro diz que todos os pacotes que devem ser enviados pela interface eth0 devem ter seu IP de origem alterado para o IP público do roteador. Meu professor diz que todos os pacotes que chegam na interface local do roteador devem ter seu endereço de origem alterado para IP público dos roteadores.

Na segunda regra, o livro diz que todos os pacotes que entram na "subinterface" de eth0 destinados à porta 80 devem ter seu endereço de destino alterado e meu professor diz que todos os pacotes que saem da eth1 devem ter seu endereço alterado.

Qual conjunto de respostas está correto? Para mim os dois parecem corretos, eles apenas abordam o problema de lados diferentes, mas depois de algumas pesquisas eu descobri que a maioria dos guias na internet segue a abordagem do livro e é possível que meu professor cometa um erro, então eu realmente não sei qual Ninguém está verdadeiramente correto. Eu ficaria muito grato pela resposta rápida, porque eu tenho um teste deste assunto em dois dias.

    
por ard_evon 09.12.2017 / 17:06

1 resposta

2

So, the first rule in my book's answer says that all packets that are meant to be sent via interface eth0 should have it's source IP changed to router's public IP. My teacher says that all packets that arrive on router's local interface should have their source address changed to routers public IP.

Para um roteador simples de duas interfaces, nenhum dos dois está errado.

Mas se o roteador tivesse várias interfaces "internas" (digamos, eth1, eth2, eth3), a solução do livro seria mais correta. A solução do professor iria desnecessariamente SNAT todo o tráfego interno , isto é, pacotes de uma sub-rede interna para outra.

In the second rule, book says that all packets coming on input "subinterface" of eth0 destined for port 80 should have their destination address changed and my teacher says that all packets going out of eth1 should have their address changed.

Se bem me lembro, a interface de saída ainda não está decidida no estágio de pré-roteamento (daí o nome "pré-roteamento"), então você não pode combinar -o . Portanto, a regra do professor nem seria aceita pelo iptables. Mas vou ter que testar ...

Em segundo lugar, novamente, se o roteador tiver várias LANs, você não desejará que o DNAT (encaminhamento de porta) se aplique ao tráfego interno. (Imagine um host na eth2 tentando acessar um servidor HTTP na eth1 - você não desejaria que o roteador o desviasse acidentalmente para outro lugar ...) Portanto, se não houver -i check, deve haver pelo menos uma verificação de endereço de destino -d para evitar isso.

    
por 09.12.2017 / 17:22