Izdanje filtra paketa nftables 1.0.7

Objavljeno je izdanje filtera paketa nftables 1.0.7, koje objedinjuje sučelja za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (s ciljem zamjene iptables, ip6table, arptables i ebtables). Paket nftables uključuje komponente filtera paketa koje se izvode u korisničkom prostoru, dok rad na razini kernela osigurava podsustav nf_tables, koji je dio Linux kernela od izdanja 3.13. Razina kernela pruža samo generičko sučelje neovisno o protokolu koje pruža osnovne funkcije za izdvajanje podataka iz paketa, izvođenje podatkovnih operacija i kontrolu toka.

Pravila filtriranja i rukovatelji specifični za protokol kompajliraju se u bajt kod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink sučelja i izvršava u kernelu u posebnom virtualnom stroju koji podsjeća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućuje da značajno smanjite veličinu koda za filtriranje koji se izvodi na razini jezgre i premjestite sve funkcije pravila parsiranja i logike za rad s protokolima u korisnički prostor.

Velike promjene:

  • Za sustave koji pokreću Linux kernel 6.2+, dodana je podrška za preslikavanja protokola vxlan, geneve, gre i gretap, što omogućuje jednostavnim izrazima za provjeru zaglavlja u enkapsuliranim paketima. Na primjer, za provjeru IP adrese u zaglavlju ugniježđenog paketa iz VxLAN-a, sada možete koristiti pravila (bez potrebe da prvo dekapsulirate VxLAN zaglavlje i vežete filtar za vxlan0 sučelje): ... udp dport 4789 vxlan ip protokol udp ... udp dport 4789 vxlan ip saddr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip saddr . vxlan ip daddr { 4.3.2.1 . XNUMX }
  • Implementirana je podrška za automatsko spajanje ostataka nakon djelomičnog brisanja elementa popisa skupova, što vam omogućuje brisanje elementa ili dijela raspona iz postojećeg raspona (ranije se raspon mogao izbrisati samo u cijelosti). Na primjer, nakon uklanjanja elementa 25 s popisa skupova s ​​rasponima 24-30 i 40-50, popis će ostati 24, 26-30 i 40-50. Popravci potrebni za rad automatskog spajanja bit će ponuđeni u izdanjima za održavanje stabilnih grana jezgre 5.10+. # nft list table skupa pravila ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list table skupa pravila ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • Omogućuje korištenje kontakata i raspona prilikom mapiranja prijevoda adresa (NAT). tablica ip nat { lanac preusmjeravanja { tip nat hook prioritet preusmjeravanja dstnat; politika prihvatiti; dnat na ip daddr. tcp dport mapa { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } uporan } }
  • Dodana podrška za "posljednji" izraz, koji vam omogućuje da saznate vrijeme posljednje upotrebe elementa pravila ili popisa skupova. Značajka je podržana počevši od Linux kernela 5.14. tablica ip x { set y { typeof ip daddr. tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; politika prihvatiti; ažuriraj @y { ip daddr. tcp dport } } } # nft lista set ip xy table ip x { set y { typeof ip daddr. tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 zadnji put korišteno 1s591ms vrijeme čekanja 1h ističe 59m58s409ms, 172.67.69.19 . 443 zadnji put korišteno 4s636ms vrijeme čekanja 1h ističe 59m55s364ms, 142.250.201.72 . 443 zadnji put korišteno 4s748ms vrijeme čekanja 1h ističe 59m55s252ms, 172.67.70.134 . 443 zadnji put korišteno 4s688ms vrijeme čekanja 1h ističe 59m55s312ms, 35.241.9.150 . 443 zadnji put korišteno 5s204ms vrijeme čekanja 1h ističe 59m54s796ms, 138.201.122.174 . 443 zadnji put korišteno 4s537ms vrijeme čekanja 1h ističe 59m55s463ms, 34.160.144.191 . 443 zadnji put korišteno 5s205ms vrijeme čekanja 1h ističe 59m54s795ms, 130.211.23.194 . 443 zadnji put korišteno 4s436ms vrijeme čekanja 1h ističe 59m55s564ms } } }
  • Dodana je mogućnost definiranja kvota u popisima skupova. Na primjer, da biste odredili kvotu prometa za svaku ciljanu IP adresu, možete navesti: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" priority filter; politika prihvatiti; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list table table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8. 10000 kvota preko 196 mbytes iskorišteno 0 bytes } } chain y { type filter hook egress device “ethXNUMX” priority filter; politika prihvatiti; ip daddr @y drop } }
  • Dopuštena je uporaba konstanti u popisima skupova. Na primjer, kada koristite odredišnu adresu i VLAN ID kao ključ popisa, možete izravno navesti VLAN broj (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; politika prihvatiti; ether tip != 8021q ažuriraj @s { ether daddr. 123 } brojač } }
  • Dodana je nova naredba "uništi" za bezuvjetno brisanje objekata (za razliku od naredbe za brisanje, ne generira ENOENT pri pokušaju brisanja objekta koji nedostaje). Za rad je potrebna najmanje Linux kernel 6.3-rc. uništi tablicu IP filter

Izvor: opennet.ru

Dodajte komentar