Como a filtragem do iptables na cadeia FORWARD ou INPUT interage com o NAT?

Como a filtragem do iptables na cadeia FORWARD ou INPUT interage com o NAT?

Essepage parece sugerir que, se houver uma regra na PREROUTINGcadeia da nattabela que traduz o destino 1.2.3.4:80para 10.1.1.1:8080, então as regras na INPUTcadeia FORWARDe devem corresponder a 10.1.1.1:8080, não 1.2.3.4:80.

E se alguém quiser implementar uma ordem de operação mais parecida com a descritaaqui? Ou seja, como você realiza a filtragem das características dos pacotes antes do NAT?

Uma possibilidade parece ser usar a PREROUTINGcadeia da rawmesa. O problema é que o conntrack não está disponível raw/PREROUTING(ver nota 1) e, por exemplo, um fragmento UDP não inicial não estará relacionado ao fragmento inicial e produzirá correspondências inesperadas.

Informe-me se descrevi o dilema claramente e se há alguma solução alternativa.

Nota 1: Corrija-me se estiver errado, mas quando tentei usar o conntrack em raw/PREROUTING, todos os pacotes SYN iniciais foram marcados como " INVALID" em vez de " NEW". Também parece que, no fluxograma do Netfilter, "conntrack" vem depois de raw/PREROUTING.

Responder1

Você não precisa de nenhuma raw/PREROUTINGregra. Você pode usar a conntrackcorrespondência para filtrar os pacotes por destino/endereço de origem/número de porta original (antes da tradução). O conntracké um sucessor do statejogo mais antigo. Ele pode verificar vários metadados adicionais, relacionados com conntrack entry(e NAT).

Alguns exemplos:

# allow any port-forwarded packets
iptables -t filter -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT

# check the original destination address of DNATed packets
iptables -t filter -A FORWARD -p tcp --dport 8080 -m conntrack --ctstate DNAT --ctorigdstport 80 --ctorigdst X.X.X.X --ctdir ORIGINAL -j ACCEPT

Para mais detalhes, verifique a saída de iptables -m conntrack --helpe man iptables-extensions.

Responder2

OFluxo de pacotes no Netfilter e na rede geraldescreve as relações entre os diferentes ganchos que veem um pacote. Aqui está uma parte menor:

Fluxo de pacotes no Netfilter e na rede geral

Então, se você quiser interagirimponentementecom pacotesantesnat, a escolha lógica é mangle/PREROUTING: oconexãohook já rastreou o pacote: ele não obterá um estado INVÁLIDO, masnaturalainda não aconteceu.

Basta lembrar que o iptables'naturalvê apenas o primeiro pacote e então todo o resto é tratado diretamente peloconexão, ainda acontecendo no mesmo lugar: entre mangle/PREROUTINGe a decisão de roteamento.

O outro método é descrito no livro de Anton Danilovresponder: consultandoconexãopara verificar o endereço anterior em sua tabela de pesquisa.

informação relacionada