nftables paketni filter 1.0.0 izdanje

Objavljeno je izdanje paketnog filtera nftables 1.0.0 koje objedinjuje interfejse za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (s ciljem zamjene iptables, ip6table, arptables i ebtables). Promjene potrebne da bi nftables 1.0.0 izdanje funkcioniralo uključene su u Linux 5.13 kernel. Značajna promjena u broju verzije nije povezana ni sa kakvim fundamentalnim promjenama, već je samo posljedica dosljednog nastavka numeriranja u decimalnim zapisima (prethodno izdanje je bilo 0.9.9).

Paket nftables uključuje komponente filtera paketa koje se pokreću u korisničkom prostoru, dok nivo kernela obezbjeđuje nf_tables podsistem, koji je dio Linux kernela od izdanja 3.13. Na nivou kernela, obezbeđen je samo generički interfejs nezavisan od protokola koji obezbeđuje osnovne funkcije za izdvajanje podataka iz paketa, izvođenje operacija nad podacima i kontrolu toka.

Sama pravila filtriranja i rukovaoci specifični za protokol se kompajliraju u bajt-kod korisničkog prostora, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink interfejsa i izvršava u kernelu u posebnoj virtuelnoj mašini koja liči na BPF (Berkeley paketni filteri). Ovaj pristup omogućava značajno smanjenje veličine koda za filtriranje koji radi na nivou kernela i premještanje svih funkcija raščlanjivanja pravila i logike rada s protokolima u korisnički prostor.

Glavne inovacije:

  • Podrška za element maske “*” je dodana na liste skupova, koja se pokreće za sve pakete koji ne potpadaju pod druge elemente definirane u skupu. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : prihvatiti, 10.0.0.0/8 : prihvatiti, * : ispustiti } } lanac y { tip filter kuka prioritet preusmjeravanja 0; prihvatiti politiku; ip saddr vmap @blocklist } }
  • Moguće je definirati varijable iz komandne linije koristeći opciju “--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 listama mapa je dozvoljena upotreba konstantnih (stateful) izraza: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 brojač paketa 0 bajtova 0 : skok ssh_input, * brojač paketa 0 bajtova 0 : ispuštanje } } lanac ssh_input { } lanac wan_input { tcp dport vmap @portmap } lanac preusmjeravanja { tip filter kuka prioritet preusmjeravanja raw; prihvatiti politiku; iif vmap { "lo" : skok wan_input } } }
  • Dodata komanda "list hooks" za prikaz liste rukovalaca za datu porodicu paketa: # nft lista kuke ip uređaj eth0 porodica ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 lanac inet mw [nf_tables] { -0000000100 lanac ip ab [nf_tables] +0000000300 lanac inet mz [nf_tables] } zakačivanje naprijed { -0000000225 selinux_ipv4_forward 0000000000 lanac ip ac [nf_tabele 0000000225] hook forward 4_output } hook postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Blokovi reda omogućavaju kombinovanje jhash, symhash i numgen izraza za distribuciju paketa u redove u korisničkom prostoru. … red na symhash mod 65536 … red za zastavice zaobići na numgen inc mod 65536 … red na jhash oif . meta mark mod 32 "queue" se takođe može kombinovati sa listama mapa za odabir reda u korisničkom prostoru na osnovu proizvoljnih ključeva. ... queue flags zaobići na oifname mapu { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Moguće je proširiti varijable koje uključuju set listu na nekoliko mapa. define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook ulazni prioritet 0; prihvatiti politiku; iifname vmap { lo : prihvati, $interfaces : ispusti } } } # nft -f x.nft # nft lista skup pravila tabela ip x { lanac y { tip filter kuka prioritet unosa 0; prihvatiti politiku; iifname vmap { "lo" : prihvati, "eth0" : ispusti, "eth1" : ispusti } } }
  • Dozvoljeno je kombiniranje vmaps (karta presude) u intervalima: # nft dodaj pravilo xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : prihvati }
  • Pojednostavljena sintaksa za NAT mapiranja. Dozvoljeno je specificiranje raspona adresa: ... snat na ip saddr mapu { 10.141.11.4 : 192.168.2.2-192.168.2.4 } ili eksplicitne IP adrese i portove: ... dnat na mapu ip saddr { 10.141.11.4 : 192.168.2.3. . 80 } ili kombinacije IP opsega i portova: ... dnat u ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

izvor: opennet.ru

Dodajte komentar