Como a opção --set-mark funciona no Netfilter (IPTABLES)?

0

No Netfilter, você tem a opção --set-mark para pacotes que passam pela tabela mangle .

A maioria dos tutoriais e exemplos na Internet diz que isso apenas adiciona uma marca ao pacote, mas não há detalhes adicionais sobre qual marca é definida e onde ela reside no pacote:

iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 1

Minha pergunta é:

  • Que tipo de marca está definido e exatamente onde no pacote esta marca reside?
por ivanleoncz 05.09.2018 / 18:33

1 resposta

1

A marca é um valor inteiro de 32 bits anexado a um pacote de rede. Algumas partes de rede que interagem com ele (veja abaixo) podem fazer operações bit a bit neste valor, ele pode então ser interpretado entre um único valor de 32 bits até uma coleção de 32 flags, ou uma mistura de flags e valores menores, dependendo de como escolhe organizar seu uso ( tc não pode fazer isso). É claro que essa marca existe somente enquanto for manipulada pelo kernel do Linux . É puramente virtual e interno, pois não pode existir no fio. Dependendo de onde é usado, pode ser chamado de firewall mark, fwmark ou simplesmente marcar.

Cada pacote de rede processado pelo kernel é tratado por uma estrutura chamada sk_buff , definida em linux/include/linux/skbuff.h . Essa estrutura inclui vários meta-dados relacionados ao pacote quando aplicável, como informações de IPsec, se alguma entrada relacionada de conntrack, uma vez pesquisada, ... e também sua marca .

Várias partes da pilha de rede podem ler essa marca, mudar o comportamento com base em seu valor ou (re) escrevê-lo, por exemplo:

  • tc ,
  • a pilha de roteamento pode ter regras especiais definidas com ip rule ( por exemplo, ip rule add fwmark 1 lookup 42 ), para alterar suas decisões de roteamento com este fwmark (por exemplo, para usar uma tabela de roteamento enviando esses pacotes para uma outra interface diferente do padrão),
  • é claro iptables ,
  • seu candidato a sucessor nftables ,

e alguns outros lugares ...

O principal objetivo dessa marca é fazer com que todas essas partes da rede interajam entre si, usando-a como um tipo de mensagem. O fluxo de pacotes no Netfilter e na rede geral pode ajudar a ver em que ordenar que esses elementos recebam o manuseio do pacote e, portanto, sua marca.

Existem outras marcas relacionadas ao lado de fwmark:

  • connmark , que não é armazenado com Sk_buff de um pacote, mas em um pacote de rastreamento de entrada conntrack flui . Seu connmark pode ser usado pelo iptables com seus connmark correspondência e CONNMARK alvo, com um exemplo de uso: < href="https://home.regit.org/netfilter-en/netfilter-connmark/"> Netfilter Connmark para Linux e além! . Ele permite que a decisão tomada com base em um único pacote seja memorizada e aplicada a todos os pacotes da mesma conexão.
  • secmark e também o seu associado connsecmark que se destina a interagir com os módulos de segurança do Linux, como < href="https://lwn.net/Articles/184786/"> SELinux .
por 06.09.2018 / 00:46