
Essepage parece sugerir que, se houver uma regra na PREROUTING
cadeia da nat
tabela que traduz o destino 1.2.3.4:80
para 10.1.1.1:8080
, então as regras na INPUT
cadeia FORWARD
e 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 PREROUTING
cadeia da raw
mesa. 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/PREROUTING
regra. Você pode usar a conntrack
correspondê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 state
jogo 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 --help
e 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:
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/PREROUTING
e 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.