Tutorial Nftables

Tutorial Nftables



Este tutorial explica como trabalhar com o firewall Nftables Linux. Este conteúdo é otimizado para usuários experientes e novos em Linux.

Nftables é um componente do kernel Linux que fornece funcionalidades de firewall. É a substituição do Iptables.







Depois de ler este tutorial, você entenderá as regras do Nftables e poderá criar seu firewall. Você não precisa de conhecimento prévio no Iptables.



Todos os exemplos neste tutorial contêm capturas de tela, tornando mais fácil para todos os usuários do Linux, independentemente de seu nível de conhecimento, entendê-los e implementá-los.



Introdução ao Nftables

Antes de começar, crie e abra um arquivo usando um editor de texto como nano ou vi para começar a digitar suas primeiras regras do Nftables com base no exemplo a seguir. Não copie e cole; digite tudo.





nano firewall.nft

O exemplo neste tutorial é bem simples e mostra um firewall restritivo no qual todo o tráfego IPv4 é descartado, exceto loopback e portas específicas.



Na captura de tela anterior, usei a primeira linha para definir minha rede local (192.168.0.0/16) como LinuxHintNet.

definir LinuxHintNet = 192.168.0.0 / 16

Na segunda linha, defino um grupo de portas (80.443 e 22). Chamo esse grupo de AllowPorts porque pretendo permitir o tráfego por meio deles. AllowPorts é um nome arbitrário.

definir AllowPorts   = { 80 , 443 , 53 , 22 }

Então, eu adiciono uma tabela, que é um container ou grupo de chains e regras; ambos são explicados abaixo. As tabelas ajudam as regras e as cadeias a serem organizadas. Chamei a tabela no exemplo de “Restrictive” porque ela contém uma política restritiva e seu nome é arbitrário.

O IP antes do nome da tabela indica que as regras da tabela serão aplicadas apenas ao tráfego IPv4. Você pode usar inet em vez de IP para aplicar regras aos protocolos IPv4 e IPv6. Ou você pode substituir o IP por ip6 apenas para IPv6.

Lembre-se, Restritivo é um nome que defini arbitrariamente. Você pode nomear a tabela como quiser.

No meu caso, aplico regras apenas para IPv4, conforme mostrado abaixo.

adicionar mesa IP Restritivo

Para ambos os protocolos, use o seguinte:

adicionar tabela inet Restritivo

Em seguida, adicionamos a primeira cadeia base, que chamo arbitrariamente de Incoming porque está relacionada ao tráfego de entrada. No entanto, você pode nomeá-lo como quiser.

A seguinte cadeia base descarta todo o tráfego de entrada por padrão:

  • add chain ip Restrictive Incoming: Esta seção adiciona a chain Restrictive Incoming a ser aplicada ao IPv4
  • filtro de tipo: Isso define o tipo de cadeia como um filtro, pois filtrará o tráfego. Outros tipos de cadeia possíveis são rota ou NAT
  • hook input: Refere-se aos pacotes de entrada
  • prioridade 0: A prioridade da cadeia básica define a ordem das cadeias básicas
  • policy drop: A política de descarte, por padrão, descarta todos os pacotes
Adicionar cadeia IP Entrada Restritiva { modelo prioridade de entrada de gancho de filtro 0 ; queda política; }

Como você pode ver na captura de tela a seguir, criei duas outras cadeias de base semelhantes às anteriores, Restrictive Redirect e Restrictive Outgoing. A diferença é o gancho definido para cada um (gancho para frente e saída do gancho). Explicá-los é repetitivo.

Após as três cadeias de base, podemos continuar com as regras do Nftables para permitir o tráfego de loopback.

Eu adiciono as seguintes linhas para tráfego de entrada e saída na interface de loopback.

adicionar regra IP Restrictive Incoming iifname lo counter accept

adicionar regra IP Restrictive Incoming oifname lo counter accept

Agora, adiciono quatro regras aceitando tráfego TCP e UDP de saída e entrada por todas as portas incluídas na variável $AllowPorts definida no início do arquivo.

adicionar regra IP esporte tcp restritivo de entrada $AllowPorts contra aceitar

adicionar regra IP dport tcp de saída restritivo $AllowPorts contra aceitar

adicionar regra IP Esporte udp restritivo de entrada $AllowPorts contra aceitar

adicionar regra IP udp dport de saída restritivo $AllowPorts contra aceitar

Você pode ver o roteiro completo abaixo.

Quando terminar de digitar suas tabelas, cadeias e regras, feche o documento e salve as alterações.

# Nas duas primeiras linhas, defino minha rede local (LinuxHintNet) e um conjunto de portas (80,
#443,22) para habilitar o tráfego através deles nas regras abaixo.
definir LinuxHintNet = 192.168.0.0 / 16
definir AllowPorts   = { 80 , 443 , 53 , 22 }
#Declaro uma nova tabela que conterá chains e regras. Eu chamo essa tabela de 'Restritiva'.
#O 'ip' aplica regras apenas para IPv4. Para IPv6, use apenas 'ip6' e use 'inet' para ambos os protocolos.
adicionar mesa IP Restritivo
# Após criar a tabela, crio três chains, Incoming, Redirect e Outgoing,
#Seus nomes são arbitrários. Todos eles descartam o tráfego de entrada, saída e encaminhamento por padrão.
adicionar cadeia IP Entrada Restritiva { modelo prioridade de entrada de gancho de filtro 0 ; queda política; }
adicionar cadeia IP Redirecionamento restritivo { modelo filtrar a prioridade de encaminhamento do gancho 0 ; queda política; }
adicionar cadeia IP Saída restritiva { modelo prioridade de saída do gancho do filtro 0 ; queda política; }
# Implemento duas regras para permitir o tráfego de loopback.
adicionar regra IP Restrictive Incoming iifname lo counter accept
adicionar regra IP Restrictive Incoming oifname lo counter accept
# Implemento regras para permitir o tráfego pelas portas definidas na variável AllowPorts.
adicionar regra IP Esporte tcp restritivo de entrada $AllowPorts contra aceitar
adicionar regra IP dport tcp de saída restritivo $AllowPorts contra aceitar
adicionar regra IP Esporte udp restritivo de entrada $AllowPorts contra aceitar

adicionar regra IP udp dport de saída restritivo $AllowPorts contra aceitar

Para ativar o firewall, execute o seguinte comando:

sudo nft -f firewall.nft

Você pode verificar suas regras executando o seguinte comando:

sudo conjunto de regras da lista nft

Esse é um firewall restritivo básico.

Conclusão:

Como você pode ver, o Nftables é muito mais amigável que o Iptables, e os usuários podem aprender Nftables mais rápido que o Iptables. Como o Iptables está sendo descontinuado e muitas distribuições estão usando o Nftables como firewall padrão, incluindo o Debian. Usuários experientes do Iptables podem querer ver a ferramenta Iptables-nftables-compat, que traduz Iptables para Nftables. Isso pode ajudá-los a entender as diferenças.

Usuários profissionais como administradores de sistema tendem a continuar trabalhando com o Iptables; evite ignorar Nftables para economizar tempo e melhorar a filtragem. Espero que este artigo tenha sido simples o suficiente para convencê-lo a experimentar o Nftables.