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

0

Preciso configurar regras do iptables que alterem todos os endereços de origem dos pacotes de saída para o endereço IP público do roteador e redirecionam todos os pacotes de entrada com a porta de destino 80 para uma das máquinas em que o servidor da web está. Esta é uma tarefa da uni e eu já tenho respostas para isso, mas elas são um tanto inconsistentes. Um conjunto de respostas vem do livro de onde essa tarefa vem (por isso deve estar realmente correta) e o outro vem do professor. Portanto, o livro diz que isso deve ser feito dessa maneira (eth0 é uma interface pública com IP público e eth1 é uma interface conectada à rede local - uma imagem para uma 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 meu professor acha que estas 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 -ie -osão para diferenciar entre "subinterfaces" de saída e entrada em uma única interface.

Portanto, a primeira regra na resposta do meu livro diz que todos os pacotes que devem ser enviados via 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 chegam na "subinterface" de entrada de eth0 destinada à porta 80 devem ter seu endereço de destino alterado e meu professor diz que todos os pacotes que saem de eth1 devem ter seu endereço alterado.

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

ard_evon
fonte

Respostas:

2

Portanto, a primeira regra na resposta do meu livro diz que todos os pacotes que devem ser enviados via 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.

Para um roteador simples de duas interfaces, nenhum deles 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 SNAT desnecessariamente todo o tráfego interno , ou seja, pacotes de uma sub-rede interna para outra.

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

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

Em segundo lugar, novamente, se o roteador tivesse várias LANs, você não desejaria que o DNAT (encaminhamento de porta) se aplicasse ao tráfego interno. (Imagine um host no eth2 tentando acessar um servidor HTTP no eth1 - você não gostaria que o roteador o desviasse acidentalmente para outro lugar ...) Portanto, se não houver -iverificação, deve haver pelo menos uma -dverificação de endereço de destino para evitar isso. .

gravidade
fonte