Lançamento do filtro de pacotes nftables 1.1.0

Foi lançado o pacote de filtragem nftables 1.1.0, que unifica as interfaces de filtragem de pacotes para IPv4, IPv6, ARP e pontes de rede (visando substituir iptables, ip6table, arptables e ebtables). A significativa alteração do número da versão não está relacionada a mudanças radicais, mas apenas é consequência da continuidade da numeração decimal (a versão anterior era 1.0.9). Simultaneamente, foi lançada a biblioteca associada libnftnl 1.2.7, que oferece uma API de baixo nível para interação com o subsistema nf_tables.

O pacote nftables inclui componentes do filtro de pacotes que operam no espaço do usuário, enquanto a funcionalidade no nível do núcleo é assegurada pelo subsistema nf_tables, que faz parte do núcleo do Linux a partir da versão 3.13. No nível do núcleo, é fornecida apenas uma interface geral, independente de protocolo específico, que oferece funções básicas para a extração de dados de pacotes, execução de operações sobre dados e controle de fluxo.

As regras de filtragem e os manipuladores específicos de protocolos são compilados em bytecode no espaço do usuário, após o que esse bytecode é carregado no núcleo por meio da interface Netlink e executado no núcleo em uma máquina virtual, semelhante ao BPF (Berkeley Packet Filters). Essa abordagem permite reduzir significativamente o tamanho do código de filtragem que opera no nível do núcleo e deslocar todas as funções de análise de regras e lógica de operação com protocolos para o espaço do usuário.

Principais mudanças:

  • Suporte a variáveis foi adicionado nas expressões map: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
  • Suporte a VLAN foi adicionado: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
  • Um novo pré-processador de string com suporte a variáveis foi implementado para expressões «log»: define message=»test» log prefix «my $message»
  • Ao calcular o valor da expressão «meta hour», foi implementado o tratamento de deslocamentos negativos no fuso horário, definidos através da variável de ambiente TZ: TZ=UTC-4 nft add rule x y meta hour «22:00»
  • Foi assegurada a conversão da ordem dos bytes ao usar expressões ct e meta, bem como ao usar operações de mesclagem e definição de intervalos em conjuntos set. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 o bytecode gerado será: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
  • O suporte ao comando «replace rule» foi retomado. replace rule ip t1 c1 handle 3 ‘jhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }’
  • A capacidade de adicionar dispositivos de rede em flowtables existentes foi restabelecida: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
  • Foram resolvidos problemas ao usar o comando «create set»: define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
  • Foram resolvidos problemas ao usar a representação numérica de opções tcp: tcp option 254
  • Foram resolvidos problemas ao utilizar expressões meta e ct com conjuntos map: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
  • Nas expressões payload e concat, a especificação de dados com mais de 512 bytes é proibida.
  • Na execução do comando 'nft describe', foi implementada a contagem dos valores dos arquivos group, rt_mark e rt_realms, localizados nos diretórios /etc/iproute2/ e /use/share/iproute2/. # nft describe meta rtclassid meta expression, datatype realm (domínio de roteamento) (tipo base inteiro), 32 bits constantes simbólicas pré-definidas de /etc/iproute2/rt_realms (em decimal): cosmos 0 Rejeitar instrução com intervalo meta mark set 0-100
  • A operação de listagem de tabelas foi acelerada. O suporte à opção -t/—terse foi implementado para acelerar os comandos 'list table' e 'list set'.
  • Foi assegurada a transformação de expressões meter em conjuntos dinâmicos set: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } será transformado em set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
  • No formato de apresentação JSON, foi adicionado suporte a objetos synproxy e conjuntos de mapeamento com dados combinados.
  • Nos conjuntos set, especificados no formato JSON, foi implementado o suporte à flag auto-merge.
  • Ao usar a apresentação no formato JSON, é permitido especificar vários dispositivos no bloco 'chain'.
  • Ao utilizar as opções -f/—filename, foi assegurada a manipulação de caminhos em relação ao diretório do arquivo atual.
  • Ao usar as opções -I/—include, a iteração de caminhos padrão agora ocorre a partir do final da lista.
  • As opções -o/—optimize foram ajustadas para expressões que contêm contadores de valores: # nft -c -o -f ruleset.nft Mesclando: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft:6:17-59: ct state established,related counter accept em: ct state vmap { invalid counter: drop, established counter: accept, related counter: accept } Mesclando: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept em: tcp dport { 80, 123 } counter accept Mesclando: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop em: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter: accept, 1.1.1.2 . 3.3.3.3 counter: drop }
  • Foi restaurada a compatibilidade com dumps do elemento set, criados em nftables antes da versão 0.9.8.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster