lançamento do filtro de pacotes , que se está desenvolvendo como uma substituição ao iptables, ip6tables, arptables e ebtables por meio da unificação das interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede. O pacote nftables inclui componentes de filtragem de pacotes que operam no espaço do usuário, enquanto, no nível do kernel, a operação é suportada pelo subsistema nf_tables, que faz parte do núcleo Linux desde a versão 3.13. As alterações necessárias para a operação do nftables 0.9.3 estão incluídas na futura ramificação do núcleo Linux 5.5.
No nível do kernel, é fornecida apenas uma interface geral, independente do protocolo específico, que oferece funções básicas de extração de dados de pacotes, execução de operações sobre dados e controle de fluxo. A lógica de filtragem e os manipuladores específicos de protocolo são compilados em bytecode no espaço do usuário, após o que esse bytecode é carregado no kernel através da interface Netlink e executado em uma máquina virtual especial, semelhante ao BPF (Berkeley Packet Filters). Essa abordagem permite reduzir significativamente o tamanho do código de filtragem que opera no nível do kernel e transferir todas as funções de análise de regras e lógica de trabalho com protocolos para o espaço do usuário.
Principais novidades:
- Suporte para correspondência de pacotes por tempo. É possível definir tanto intervalos de tempo e datas em que a regra será aplicada quanto configurar a ativação em dias específicos da semana. Também foi adicionada uma nova opção «-T» para exibir o horário epoch em segundos.
meta time \»2019-12-24 16:00\» — \»2020-01-02 7:00\»
meta hour \»17:00\» — \»19:00\»
meta day \»Fri\» - Suporte para recuperação e preservação de etiquetas SELinux (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - Suporte para listas de mapeamento synproxy, permitindo definir mais de uma regra para o backend.
table ip foo {
synproxy https-synproxy {
mss 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
mss 1460
wscale 5
}chain pre {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain bar {
type filter hook forward priority filter; policy accept;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : «https-synproxy», 192.168.2.0/24 : «other-synproxy» }
}
} - A capacidade de remover dinamicamente elementos de conjuntos de set das regras de processamento de pacotes.
nft add rule … delete @set5 { ip6 saddr . ip6 daddr }
- Suporte para correspondência VLAN por identificador e protocolo, definidos nos metadados da interface da ponte de rede;
meta ibrpvid 100
meta ibrvproto vlan - A opção «-t» («—terse») para excluir elementos de conjuntos set ao exibir regras. Ao executar «nft -t list ruleset», será exibido:
table ip x {
set y {
tipo ipv4_addr
}
}Mas ao usar «nft list ruleset»
table ip x {
set y {
tipo ipv4_addr
elementos = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - A capacidade de especificar mais de um dispositivo nas cadeias netdev (funciona apenas com o kernel 5.5) para combinar regras de filtragem padrão.
adicionar tabela netdev x
adicionar cadeia netdev x y { \
tipo filter hook ingress dispositivos = { eth0, eth1 } prioridade 0;
} - A capacidade de adicionar descrições de tipos de dados.
# nft describe ipv4_addr
datatype ipv4_addr (endereço IPv4) (basetype inteiro), 32 bits - A possibilidade de compilar a interface CLI com a biblioteca linenoise em vez de libreadline.
.\/configure —with-cli=linenoise
Fonte: opennet.ru
