iptables vs nftables: Qual é a diferença?
Por muito tempo, o iptables tem sido a ferramenta favorita dos administradores de sistemas. Mas nftables são recomendados atualmente. Leia para descobrir o porquê.
Todo administrador Linux certamente trabalhou com iptables, o firewall Linux de longa data que nos serviu bem por muitos anos. Mas você pode ainda não estar familiarizado com o nftables, um recém-chegado que pretende nos oferecer algumas atualizações muito necessárias e, em última análise, substituir os antigos iptables.
Por que nftables em vez de iptables?
O nftables é desenvolvido pela Netfilter, a mesma organização que atualmente mantém o iptables. Foi criado como uma solução para os problemas do iptables, nomeadamente escalabilidade e desempenho.
Além de uma nova sintaxe e algumas atualizações, você descobrirá que ele funciona de maneira muito semelhante ao seu antecessor.
Outra justificativa para um novo utilitário é que a estrutura do iptables se tornou um pouco complicada com iptables, ip6tables, arptables e ebtables, todos fornecendo funções diferentes, mas semelhantes.
Por exemplo, é simplesmente ineficiente criar regras IPv4 em iptables e regras IPv6 em ip6tables e manter as duas sincronizadas. O Nftables pretende substituir tudo isso e ser uma solução centralizada.
Embora o nftables tenha sido incluído no kernel do Linux desde 2014, recentemente ele ganhou mais força à medida que sua adoção se tornou mais difundida. A mudança é lenta no mundo Linux, e utilitários desatualizados geralmente levam alguns anos ou mais para serem eliminados em favor de seus equivalentes atualizados.
O Nftables está se tornando o firewall preferido e cabe aos administradores do Linux atualizar seu repertório. Agora é um ótimo momento para aprender nftables e atualizar sua configuração existente de iptables.
Se você usa o iptables há anos e não está muito entusiasmado com a ideia de ter que aprender um utilitário totalmente novo, não se preocupe, nós ajudamos você neste guia. Neste artigo, abordaremos as diferenças entre nftables e iptables e mostraremos exemplos para configurar suas regras de firewall na nova sintaxe do nftables.
Correntes e regras em nftables
No iptables, existem três cadeias padrão: entrada, saída e encaminhamento. Essas três “cadeias” (e outras cadeias, se você tiver alguma configurada) contêm “regras” e o iptables funciona combinando o tráfego de rede com a lista de regras em uma cadeia. Se o tráfego examinado não corresponder a nenhuma regra, a política padrão da cadeia será usada no tráfego (ou seja, ACCEPT, DROP).
Nftables funciona de forma semelhante a isso, com “correntes” e “regras” também. No entanto, não começa com nenhuma cadeia base, o que torna a configuração um pouco mais flexível.
Uma área de ineficiência do iptables é que todos os dados da rede tiveram que atravessar uma ou mais dessas cadeias mencionadas acima, mesmo que o tráfego não correspondesse a nenhuma regra. Quer você tenha as cadeias configuradas ou não, o iptables ainda verifica os dados da sua rede em relação a elas.
Instalando nftables no Linux
O Nftables está disponível em todas as principais distribuições Linux e você pode instalá-lo facilmente usando o gerenciador de pacotes de suas distribuições.
Em uma distribuição baseada em Ubuntu ou Debian, você pode usar este comando:
sudo apt install nftables
Para garantir que o nftables seja iniciado automaticamente quando o sistema for reinicializado:
sudo systemctl enable nftables.service
Diferença de sintaxe entre iptables e nftables
O Nftables tem uma sintaxe diferente e muito mais simples do que o iptables. Sejamos honestos, a sintaxe do iptables sempre foi pouco clara e exigiu um esforço extra para ser aprendida. Felizmente para quem está migrando do iptables, o nftables ainda aceita a sintaxe antiga.
Você também pode usar o utilitário iptables-translate, que aceitará comandos iptables e os converterá no equivalente nftables. Esta é uma maneira fácil de ver como as duas sintaxes diferem.
Instale iptables-translate no Ubuntu e na distribuição baseada em Debian com este comando:
sudo apt install iptables-nftables-compat
Depois de instalado, você pode passar a sintaxe do iptables para o comando iptables-translate e ele retornará o comando equivalente ao nftables.
Vejamos alguns exemplos para que você possa ver como esses comandos diferem entre si.
Bloquear conexões de entrada
Este comando bloquearia conexões de entrada do endereço IP 192.168.2.1:
linux@handbook:~$ iptables-translate -A INPUT -s 192.168.2.1 -j DROP
nft add rule ip filter INPUT ip saddr 192.168.2.1 counter drop
Permitir conexões SSH de entrada
Vejamos mais alguns exemplos - coisas comuns que você normalmente digitaria no iptables ao proteger um servidor Linux.
linux@handbook:~$ iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT tcp dport 22 ct state new,established counter accept
Permitir conexões SSH de entrada de um intervalo de IP específico
Se você deseja permitir conexões SSH de entrada de 192.168.1.0/24:
linux@handbook:~$ iptables-translate -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT ip saddr 192.168.1.0/24 tcp dport 22 ct state new,established counter accept
Permitir conexões MySQL à interface de rede eth0
Aqui está a sintaxe para iptables e nftables:
linux@handbook:~$ iptables-translate -A INPUT -i eth0 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT iifname eth0 tcp dport 3306 ct state new,established counter accept
Permitir tráfego de entrada HTTP e HTTPS
Para permitir um determinado tipo de tráfego, aqui está a sintaxe de ambos os comandos:
linux@handbook:~$ iptables-translate -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
nft add rule ip filter INPUT ip protocol tcp tcp dport { 80,443} ct state new,established counter accept
Como você pode ver nesses exemplos, a sintaxe ainda é bastante semelhante à do iptables, mas os comandos são um pouco mais intuitivos.
Registrando com nftables
A opção “counter” presente nos exemplos de comando nft acima diz ao nftables para contar o número de vezes que uma regra é tocada, como o iptables costumava fazer por padrão.
Em nftables, eles são opcionais e devem ser especificados.
nft add rule ip filter INPUT ip saddr 192.168.2.1 counter accept
Nftables possui opções integradas para exportar sua configuração. Atualmente suporta XML e JSON.
nft export xml
Conclusão
Neste artigo, expliquei por que nftables é a nova escolha recomendada quando se trata de firewalls Linux. Também listei muitas diferenças entre os iptables antigos e os nftables mais recentes, incluindo sua funcionalidade e sintaxe.
Este guia mostrou por que considerar a atualização para nftables e como começar com a nova sintaxe com a qual você precisará se familiarizar para atualizar com êxito suas antigas regras de iptables.
Se você tiver dúvidas ou sugestões, por favor me avise nos comentários.