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 seusconnmark
correspondência eCONNMARK
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 associadoconnsecmark
que se destina a interagir com os módulos de segurança do Linux, como < href="https://lwn.net/Articles/184786/"> SELinux .