nftables (parte 3) - Comando nft (sintaxe - uma breve explicação)


Neste artido vamos apresentar a sintaxe fundamental do comando nft, o primeiro passo para criar configurações de firewall eficazes e seguras com nftables. Este artigo irá detalhar a estrutura de comando essencial usada para criar os elementos fundamentais de qualquer conjunto de regras: tabelas e cadeias. Vamos explorar a sintaxe básica, definindo cada elemente que faz parte dela. Os dois comandos neste artigo representam um padrão tipico e não optimizado, cujo objectivo final é apenas demonstrar como usar comandos nft para gerir tabelas e cadeias.
 
Tomenos como exemplo, os dois comando abaixo. 
 
O primeiro comando cria um novo container (tabela) chamado "meu_filtro" que irá conter todas regras para a família do protocolo específicado:
  • nft add table: instrução para criar um novo container (tabela). Tabelas são os objectos de nível superior nas nftables e são usadas para armazenar cadeias e regras.
  • <familia_do_protocolo>: Especifica a família de endereços da tabela.
  • <meu_filtro>: nome arbitrário definido pelo utilizador.
O segundo comando cria uma cadeia dentro da tabela meu_filtro, nomeia-a como pacotes_de_entrada e anexa-a ao kernel para que possa processar e filtrar todo o tráfego de rede.
  • nft add chain: instrução para criar uma nova cadeia (chain) dentro de uma tabela. As cadeias são sequências de regras que são avaliadas por ordem.
  • <familia_do_protocolo> <meu_filtro>: especifica a família do protocolo e a tabela "mãe" (meu_filtro) onde esta nova cadeia será criada.
  • <pacotes_de_entrada>: nome arbitrário para a cadeia que se cria.
  • { type <tipo> hook <hook> priority <prioridade> \; policy <pólitica> \; }: esta é a parte mais importante. Define propriedades que tornam esta uma cadeia base e que está directamente ligada à estrutura de rede do kernel.
    • type <tipo>: declara a finalidade da cadeia, que podem ser: filter, nat ou route.
    • hook <hook>: usado para declarar o tipo de hook, que podem ser: all, input, output, postrouting ou prerouting.
    • priority <prioridade>: determina a ordem em que esta cadeia é processada em relação a outras cadeias ligadas ao mesmo ponto. Prioridades tem seus valores, que podem ser textuais ou númericos.
    • \;: necessário para encerrar a lista de propriedades dentro das chaves {} no shell
    • policy <pólitica>: tiplo de plotica aplicada, que podem ser: accept or drop. Quando não se especifica a política, o valor accept é atribuído por padrão.
O segundo comando da imagem acima, cria uma cadeia base. Para criar uma cadeia regular, não defina nenhum parâmetro entre chavetas.

Comentários