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

7

Estou tentando entender como esse sistema funciona e tenho problemas para entender a diferença entre usar NAT PREROUTING ou filtrar FORWARD. 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 propósito de ter uma regra FORWARD no filtro?

    
por GheorGhe 29.01.2015 / 13:06

2 respostas

13

Tabela NAT :

  

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

Tabela de filtros :

  

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

Em Atravessamento de tabelas e correntes , podemos ver que a cadeia FORWARD do filtro é atravessada somente por pacotes encaminhados (pacotes que vêm da rede e saem pela rede), isto é, seu computador está agindo como um roteador, enquanto a cadeia PREROUTING do nat é atravessada por pacotes encaminhados e pacotes cujo destino é o host local.

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

  

Se obtivermos um pacote na primeira decisão de roteamento que não é destinada à própria máquina local, ele será roteado pela cadeia FORWARD. Se o pacote for, por outro lado, destinado a um endereço IP que a máquina local esteja escutando, enviaremos o pacote através da cadeia INPUT e para a máquina local.      Os pacotes podem ser destinados à máquina local, mas o endereço de destino pode ser alterado dentro da cadeia PREROUTING fazendo NAT. Como isso ocorre antes da primeira decisão de roteamento, o pacote será considerado após essa alteração. Por causa disso, o roteamento pode ser alterado antes que a decisão de roteamento seja feita. Observe que todos os pacotes estarão passando por um ou outro caminho nesta imagem. Se você DNAT um pacote de volta para a mesma rede que veio, ainda vai viajar através do resto das cadeias até que seja novamente na rede.

    
por Eric Carvalho 29.01.2015 / 13:37
3

PREROUTING : Esta cadeia é usada para fazer quaisquer decisões relacionadas ao roteamento antes de ( PRE ) enviar quaisquer pacotes. Lembre-se sempre de que, em PREROUTING/POSTROUTING , ou seja, NAT table, os destinos ACCEPT/DROP/REJECT etc da tabela FILTER padrão não funcionarão. A tabela NAT é usada apenas para tomar decisões de roteamento. Você deve usar PREROUTING ao tomar qualquer decisão de roteamento, ou seja, as decisões que precisam 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 cadeia FORWARD da tabela FILTER é usada para encaminhar os pacotes de uma origem para um destino, aqui a origem e o destino são dois hosts diferentes. Então, como você pode imaginar, FORWARD regras são basicamente usadas em servidores onde um host está enviando / recebendo tráfego de outro host através do servidor. Quando o pacote é gerado a partir do servidor, a cadeia é OUTPUT , ou seja, o tráfego está saindo de si mesmo, enquanto INPUT chain significa que os pacotes são destinados apenas ao próprio servidor. Aqui está um exemplo de FORWARD chain onde qualquer TCP de tráfego recebido na porta 80 na interface eth0 significada para o host 192.168.0.4 será aceito e encaminhado para 192.168.0.4 :

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
    
por heemayl 29.01.2015 / 13:32