Qual é a diferença entre PREROUTING e FORWARD no iptables?

15

Estou tentando entender como esse sistema funciona e tenho problemas para entender a diferença entre usar o NAT PREROUTING ou filtrar para a frente. Pelo que entendi, o PREROUTE pode enviar o pacote para outro servidor, evitando o filtro. Se o NAT puder lidar com isso via PREROUTE, qual é o objetivo de ter uma regra FORWARD no filtro?

GheorGhe
fonte

Respostas:

23

Tabela NAT :

Esta tabela deve ser usada apenas para NAT (Network Address Translation) em pacotes diferentes. Em outras palavras, ele deve ser usado apenas para converter o campo de origem ou destino do pacote.

Tabela de filtro :

A tabela de filtros é usada principalmente para filtrar pacotes. Podemos combinar pacotes e filtrá-los da maneira que quisermos. Este é o local em que realmente agimos contra pacotes e observamos o que eles contêm e os DROP ou / ACCEPT, dependendo do seu conteúdo. É claro que também podemos fazer filtragem prévia; no entanto, essa tabela específica é o local para o qual a filtragem foi projetada.

No cruzamento de tabelas e cadeias , podemos ver que a cadeia FORWARD do filtro é atravessada apenas por pacotes encaminhados (pacotes que vêm da rede E saem para a rede), ou seja, seu computador está agindo como um roteador, enquanto a cadeia PREROUTING do nat é atravessada por ambos os encaminhados. pacotes e pacotes cujo destino é o host local.

Você deve usar o PREROUTING do nat apenas para alterar o endereço de destino dos pacotes e o FORWARD do filtro apenas para a filtragem (descarte / aceitação de pacotes).

Se colocarmos um pacote na primeira decisão de roteamento que não é destinada à própria máquina local, ele será roteado pela cadeia FORWARD. Se, por outro lado, o pacote for destinado a um endereço IP que a máquina local esteja ouvindo, enviaremos o pacote pela cadeia INPUT e para a máquina local. insira a descrição da imagem aqui Pacotes podem ser destinados à máquina local, mas o endereço de destino pode ser alterado dentro da cadeia PREROUTING executando NAT. Como isso ocorre antes da primeira decisão de roteamento, o pacote será analisado após essa alteração. Por esse motivo, o roteamento pode ser alterado antes que a decisão de roteamento seja feita. Observe que todos os pacotes passarão por um ou outro caminho nesta imagem. Se você DNAT um pacote de volta para a mesma rede de onde veio, ele continuará percorrendo o restante das cadeias até voltar à rede.

Eric Carvalho
fonte
5

PREROUTING : Essa cadeia é usada para tomar decisões relacionadas ao roteamento antes de ( PRE ) enviar quaisquer pacotes. Lembre-se sempre de que, na tabela PREROUTING/POSTROUTINGie, NATos ACCEPT/DROP/REJECTdestinos etc da FILTERtabela padrão não funcionarão. A NATtabela é usada apenas para tomar decisões de roteamento. Você deve usar PREROUTINGao tomar qualquer decisão de roteamento, ou seja, as decisões que devem ser tomadas antes que o pacote comece a atravessar a rede. Aqui está um exemplo, estamos redirecionando qualquer tráfego que acabou de chegar ao servidor na porta 80 para a porta 8080:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

FORWARD : Como o nome sugere, a FORWARDcadeia de FILTERtabelas é usada para encaminhar os pacotes de uma origem para um destino, aqui a origem e o destino são dois hosts diferentes. Portanto, como você pode imaginar, as FORWARDregras são basicamente usadas em servidores nos quais um host está enviando / recebendo tráfego de outro host via servidor. Quando o pacote é gerado a partir do servidor, a cadeia é, OUTPUTou seja, o tráfego está saindo de si, enquanto INPUTcadeia significa que os pacotes são destinados apenas ao próprio servidor. Aqui está um exemplo de FORWARDcadeia em que qualquer TCPtráfego recebido na porta 80 na interface eth0destinada ao host 192.168.0.4será aceito e encaminhado para 192.168.0.4:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
heemail
fonte
Seu uso de "hosts" parece estranho. Qual tabela é usada quando depende principalmente das interfaces locais em que um pacote chegou e se destina a sair.
precisa saber é o seguinte
qual parte parece estranha? eu usei a noção de anfitriões para indicar as partes que enviam e recebem ..
heemayl
Eu estou falando sobre o parágrafo FRENTE: que a tabela é usada quando um pacote que entra através de uma interface é destinado a outra interface (em oposição ao local de host)
guntbert
ah ... ok ... entendi ... sim, eu devo usar a interface .... apenas use hosts para facilitar a imagem ... vou mudar isso quando estiver na frente do meu computador.
precisa saber é
@ Guntbert: acabei de acertar minha cabeça. não leu seu último comentário com atenção suficiente. Eu acho que você está enganado no contexto de duas interfaces diferentes para a FORWARDcadeia. Quando os pacotes estão sendo transferidos de um host de uma LAN para outro host de uma LAN, os pacotes passam por apenas uma única interface e a cadeia usada ocorre, FORWARDembora aqui o servidor (médio) não atue como um roteador em sentido estrito. ao contrário, pode ser pensado como um interruptor.
precisa saber é