Izdanje filtra paketa nftables 1.0.0

Objavljeno je izdanje filtera paketa nftables 1.0.0, koje objedinjuje sučelja za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (s ciljem zamjene iptables, ip6table, arptables i ebtables). Promjene potrebne za rad izdanja nftables 1.0.0 uključene su u jezgru Linuxa 5.13. Značajna promjena broja verzije nije povezana s temeljnim promjenama, već je samo posljedica dosljednog nastavka numeriranja u decimalnom zapisu (prethodno izdanje bilo je 0.9.9).

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.

Glavne inovacije:

  • Podrška za element maske “*” dodana je popisima skupova, što se pokreće za sve pakete koji ne potpadaju pod druge elemente definirane u skupu. tablica x { popis blokova karte { upišite ipv4_addr : zastavice presude elementi intervala = { 192.168.0.0/16 : prihvatite, 10.0.0.0/8 : prihvatite, * : ispustite } } lanac y { upišite filtar hook prioritet preusmjeravanja 0; politika prihvatiti; ip saddr vmap @blocklist } }
  • Moguće je definirati varijable iz naredbenog retka pomoću opcije “--define”. # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; pad politike; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • U popisima mapa dopuštena je upotreba konstantnih (stateful) izraza: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } lanac ssh_input { } lanac wan_input { tcp dport vmap @portmap } lanac preusmjeravanja { vrsta filtera hook preusmjeravanje prioritet raw; politika prihvatiti; iif vmap { "lo" : jump wan_input } } }
  • Dodana naredba "list hooks" za prikaz popisa rukovatelja za danu obitelj paketa: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables] } hook output { -0000000225 selinux_ipv4_output } hook postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Blokovi čekanja dopuštaju kombiniranje jhash, symhash i numgen izraza za distribuciju paketa u redove u korisničkom prostoru. … red za symhash mod 65536 … zastavice reda zaobilaze do numgen inc mod 65536 … red za jhash oif. meta mark mod 32 "queue" također se može kombinirati s popisima mapa za odabir reda u korisničkom prostoru na temelju proizvoljnih ključeva. ... oznake reda zaobilaze mapu oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Moguće je proširiti varijable koje uključuju set listu u nekoliko mapa. definiraj sučelja = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; politika prihvatiti; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list table set pravila ip x { chain y { type filter hook prioritet unosa 0; politika prihvatiti; iifname vmap { "lo" : prihvatiti, "eth0" : ispustiti, "eth1" : ispustiti } } }
  • Dopušteno je kombiniranje vmaps (karta presude) u intervalima: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : prihvati }
  • Pojednostavljena sintaksa za NAT preslikavanja. Dopušteno određivanje raspona adresa: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } ili eksplicitne IP adrese i portovi: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } ili kombinacije IP raspona i portova: ... dnat to ip saddr . tcp dport karta { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Izvor: opennet.ru

Dodajte komentar