Quando e como usar prioridades de cadeia em nftables

0

Ao configurar uma cadeia em nftables, é necessário fornecer um valor priority . Quase todos os exemplos online definem um piority de 0; às vezes, um valor de 100 é usado com determinados ganchos ( output , postrouting ).

O wiki nftables tem que dizer :

The priority can be used to order the chains or to put them before or after some Netfilter internal operations. For example, a chain on the prerouting hook with the priority -300 will be placed before connection tracking operations.

For reference, here's the list of different priority used in iptables:

  • NF_IP_PRI_CONNTRACK_DEFRAG (-400): priority of defragmentation
  • NF_IP_PRI_RAW (-300): traditional priority of the raw table placed before connection tracking operation
  • NF_IP_PRI_SELINUX_FIRST (-225): SELinux operations
  • NF_IP_PRI_CONNTRACK (-200): Connection tracking operations
  • NF_IP_PRI_MANGLE (-150): mangle operation
  • NF_IP_PRI_NAT_DST (-100): destination NAT
  • NF_IP_PRI_FILTER (0): filtering operation, the filter table
  • NF_IP_PRI_SECURITY (50): Place of security table where secmark can be set for example
  • NF_IP_PRI_NAT_SRC (100): source NAT
  • NF_IP_PRI_SELINUX_LAST (225): SELinux at packet exit
  • NF_IP_PRI_CONNTRACK_HELPER (300): connection tracking at exit

Isso indica que o priority controla a interação com operações internas do Netfilter, mas menciona apenas os valores usados pelo iptables como exemplos.

Em quais casos o priority relevante (isto é, deve ser definido como um valor ≠ 0)? Apenas para várias correntes com o mesmo gancho? Que tal combinar nftables e iptables? Quais operações internas do Netfilter são relevantes para determinar o valor correto de priority ?

    
por F30 26.01.2018 / 15:30

1 resposta

1

iptables e nftables ambos contam com a mesma infraestrutura de netfilters, e usam ganchos em vários lugares . é explicado lá: Netfilter ganchos , ou há este systemtap manpage , que documenta um pouco da manipulação do gancho:

PRIORITY is an integer priority giving the order in which the probe point should be triggered relative to any other netfilter hook functions which trigger on the same packet. Hook functions execute on each packet in order from smallest priority number to largest priority number. [...]

ou também este blog sobre netfilter: Como filtrar pacotes de rede usando Netfilter - Parte 1 Ganchos do Netfilter .

Tudo isso junto diz que vários módulos / funcionalidades podem se registrar em cada um dos cinco ganchos possíveis (para o caso IPv4), e em cada gancho eles serão chamados por ordem da prioridade registrada para este gancho.

Esses ganchos não são apenas para iptables ou nftables. Existem vários outros usuários, como o systemtap acima, ou até mesmo os submodules do netfilter. Por exemplo, com o IPv4 ao usar NAT com iptables ou nftables, nf_conntrack_ipv4 será registre-se em quatro ganchos em várias prioridades por um total de 6 vezes . Este módulo, por sua vez, puxará nf_defrag_ipv4 , que registra em NF_INET_PRE_ROUTING/NF_IP_PRI_CONNTRACK_DEFRAG e NF_INET_LOCAL_OUT/NF_IP_PRI_CONNTRACK_DEFRAG .

Então, sim, a prioridade é relevante apenas dentro do mesmo gancho. Mas nesse mesmo gancho há vários usuários, e eles já têm sua prioridade predefinida (com muitas vezes, mas nem sempre, o mesmo valor reutilizado em diferentes ganchos), então para interagir corretamente em torno deles, uma prioridade compatível deve ser usada. >

Por exemplo, se as regras tiverem que ser feitas cedo em pacotes não desfragmentados, mais tarde (como de costume) com pacotes desfragmentados, apenas registre duas cadeias nftables no reencaminhamento, uma < = -401 (por exemplo, -450 ) , o outro entre -399 e -201 (por exemplo, -300 ). O melhor iptables poderia fazer até recentemente foi -300 , ou seja, ele não podia ver pacotes fragmentados sempre conntrack, assim desfragmentação antecipada estava em uso (desde o kernel 4.15 com opção raw_before_defrag ele irá registrar em -450 em vez disso, mas pode ' t fazer as duas coisas.

Então, agora, sobre as interações entre nftables e iptables: ambos podem ser usados juntos (com exceção do NAT, onde ambos competem pelo conteúdo nat do netfilter: apenas um deve se registrar). Os exemplos de configurações nftables são enviados com as mesmas prioridades do iptables com pequenas diferenças.

Se iptables e nftables forem usados juntos e um deve ser usado antes do outro, porque há interações e ordem de efeito necessárias, diminua ligeiramente ou aumente a prioridade dos nftables, pois iptables 'não podem ser alterados.

Por exemplo, em uma configuração principalmente iptables, usando nftables com um recurso de correspondência específico não disponível no iptables para marcar um pacote e, em seguida, manipular essa marca no iptables, porque ele tem suporte para um destino específico (por exemplo, a fantasia alvo de LED do iptables para piscar um led) não disponível em nftables. Basta registrar um valor de prioridade inferior para o gancho nftables para ter certeza de que foi feito antes. Para uma regra de filtro de entrada usual, seria por exemplo -5 em vez de 0 . Então, novamente, este valor não deve ser menor que -149 ou será executado antes da cadeia de entrada INPUT do iptables, o que talvez não seja o que é pretendido. Esse é o único outro valor baixo que importaria no caso de entrada. Por exemplo, não há NF_IP_PRI_CONNTRACK a considerar, porque conntrack não registra algo com essa prioridade em NF_INET_LOCAL_IN , o SELinux não registra algo neste gancho se algo relacionado a ele é importante, então -225 não tem significado especial aqui.

    
por 09.05.2018 / 02:15