Nivo kernela pruža samo generički interfejs nezavisan od protokola koji obezbeđuje osnovne funkcije za izdvajanje podataka iz paketa, izvođenje operacija sa podacima i kontrolu toka. Pravila filtriranja i obrađivači specifični za protokol se kompajliraju u bajtkod u korisničkom prostoru, 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 podseća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućava da značajno smanjite veličinu koda za filtriranje koji radi na nivou kernela i premestite sve funkcije raščlanjivanja pravila i logike za rad sa protokolima u korisnički prostor.
Glavne inovacije:
- Podrška za brojače paketa i saobraćaja koji su povezani sa elementima skupa je dodana skupovima. Brojači su omogućeni pomoću ključne riječi “counter”:
tablica ip x {
postaviti y {
typeof ip saddr
brojač
elementi = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}lanac z {
tip filter kuka izlazni prioritetni filter; prihvatiti politiku;
ip daddr @y
}
} - Da biste postavili početne vrijednosti brojača, na primjer, za vraćanje prethodnih brojača nakon ponovnog pokretanja, možete koristiti naredbu "nft -f":
# cat ruleset.nft
tablica ip x {
postaviti y {
typeof ip saddr
brojač
elementi = { 192.168.10.35 brojač paketa 1 bajt 84, 192.168.10.101 \
brojač p 192.168.10.135 brojač paketa 0 bajtova 0 }
}lanac z {
tip filter kuka izlazni prioritetni filter; prihvatiti politiku;
ip daddr @y
}
}
# nft -f set pravila.nft
#nft skup pravila liste
tablica ip x {
postaviti y {
typeof ip saddr
brojač
elementi = { 192.168.10.35 brojač paketa 1 bajt 84, 192.168.10.101 \
brojač p 192.168.10.135 brojač paketa 0 bajtova 0 }
}lanac z {
tip filter kuka izlazni prioritetni filter; prihvatiti politiku;
ip daddr @y
}
} - Podrška za Counter je također dodana u flowtable:
tablica ip foo {
flomaster bar {
Prioritet ulaska kuke -100
uređaji = { eth0, eth1 }
brojač
}lanac naprijed {
tip filter zakaka prioritetni filter naprijed;
flow add @bar counter
}
}Listu brojača možete pogledati pomoću naredbe “conntrack -L”:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paketa=9 bajtova=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 paketi=8 bajtova=428 [OFFLOAD] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
packets=967505 bajtova=50310268 [OFFLOAD] mark=0 secctx=null use=2 - U konkatenacionim skupovima (konkatenacija, određeni snopovi adresa i portova koji pojednostavljuju poređenje) moguće je koristiti direktivu “typeof” koja određuje tip podataka elemenata za sastavne dijelove elemenata skupa:
tablica ip foo {
postavi bijelu listu {
typeof ip saddr . tcp dport
elementi = { 192.168.10.35 . 80, 192.168.10.101. 80}
}lanac {
tip filter kuka za preusmjeravanje prioritetnog filtera; pad politike;
ip daddr. tcp dport @whitelist prihvata
}
} - Direktiva typeof sada se također primjenjuje na spojeve u listama mapa:
tablica ip foo {
map addr2mark {
typeof ip saddr . tcp dport : meta oznaka
elementi = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002 }
}lanac {
tip filter kuka za preusmjeravanje prioritetnog filtera; pad politike;
meta mark set ip daddr . tcp dport map @addr2mark prihvatiti
}
} - Dodata podrška za spajanje opsega u anonimnim (neimenovanim) skupovima:
# nft dodaj pravilo inet filter input ip daddr . tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } prihvatiti - Omogućena je mogućnost odbacivanja paketa sa 802.1q (VLAN) zastavicama prilikom obrade mrežnih mostova:
# nft add rule bridge foo bar ether tip vlan odbija sa tcp resetovanjem
- Dodata podrška za podudaranje po identifikatoru TCP sesije (conntrack ID). Za određivanje conntrack ID-a, možete koristiti opciju “--output id”:
# conntrack -L —izlaz id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paketa=2 \
bajtova=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 paketa=2 bajta=320 \
[ASSURED] mark=0 use=1 id=2779986232# nft dodaj pravilo foo bar ct id 2779986232 brojač
izvor: opennet.ru