U nivellu di u kernel furnisce solu una interfaccia generica indipendente da u protokollu chì furnisce funzioni basiche per l'estrazione di dati da i pacchetti, eseguisce operazioni di dati è u cuntrollu di flussu. I reguli di filtrazione è i manipulatori specifichi di u protokollu sò compilati in bytecode in u spaziu di l'utilizatori, dopu chì stu bytecode hè caricatu in u kernel utilizendu l'interfaccia Netlink è eseguitu in u kernel in una macchina virtuale speciale chì ricorda BPF (Berkeley Packet Filters). Stu approcciu permette di riduce significativamente a dimensione di u codice di filtrazione chì corre à u livellu di u kernel è move tutte e funzioni di e regule di analisi è a logica per travaglià cù protokolli in u spaziu di l'utilizatori.
Innuvazioni principali:
- U supportu per i cuntatori di pacchetti è di trafficu assuciati cù elementi di set hè statu aghjuntu à i setti. I contatori sò attivati aduprendu a chjave "counter":
table ip x {
set y {
tipu di ip saddr
tumblr
elementi = {192.168.10.35, 192.168.10.101, 192.168.10.135}
}catena z {
tipu di filtru ganciu filtru priurità di output; accetta a pulitica;
ip daddr @y
}
} - Per stabilisce i valori iniziali di i cuntatori, per esempiu, per restaurà i contatori precedenti dopu un riavviu, pudete aduprà u cumandimu "nft -f":
# cat ruleset.nft
table ip x {
set y {
tipu di ip saddr
tumblr
elementi = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
contatore p 192.168.10.135 contatore pacchetti 0 bytes 0 }
}catena z {
tipu di filtru ganciu filtru priurità di output; accetta a pulitica;
ip daddr @y
}
}
# nft -f ruleset.nft
#nft liste di regule
table ip x {
set y {
tipu di ip saddr
tumblr
elementi = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
contatore p 192.168.10.135 contatore pacchetti 0 bytes 0 }
}catena z {
tipu di filtru ganciu filtru priurità di output; accetta a pulitica;
ip daddr @y
}
} - U supportu di counter hè statu ancu aghjuntu à flowtable:
table ip foo {
bar flowtable {
hook ingress priority -100
dispusitivi = { eth0, eth1 }
tumblr
}catena in avanti {
tipu filtru ganciu filtru priurità avanti;
flussu aghjunghje @bar counter
}
}Pudete vede a lista di cuntatori cù u cumandimu "conntrack -L":
tcp 6 src = 192.168.10.2 dst = 10.0.1.2 sport = 47278 dport = 5201 pacchetti = 9 bytes = 608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pacchetti=8 bytes=428 [OFFLOAD] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
pacchetti = 1005763 bytes = 44075714753 src = 10.0.1.2 dst = 10.0.1.1 sport = 5201 dport = 47280 \
pacchetti = 967505 bytes = 50310268 [OFFLOAD] mark = 0 secctx = null use = 2 - In i setti per a concatenazione (concatenazione, certi bundle di indirizzi è porti chì simplificanu a comparazione), hè pussibule aduprà a direttiva "typeof", chì determina u tipu di dati di elementi per i parti custituenti di l'elementi di u settore:
table ip foo {
stabilisce a lista bianca {
tipu d'ip saddr. tcp dport
elementi = { 192.168.10.35 . 80, 192.168.10.101. 80}
}barra di catena {
tippu filtru ganciu prerouting filtru priurità; caduta di pulitica;
ip daddr. tcp dport @whitelist accetta
}
} - U tipu di direttiva avà s'applica ancu à i join in listi di carte:
table ip foo {
mappa addr2mark {
tipu d'ip saddr. tcp dport: meta marca
elementi = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002}
}barra di catena {
tippu filtru ganciu prerouting filtru priurità; caduta di pulitica;
meta mark set ip daddr . tcp dport map @addr2mark accetta
}
} - Aggiuntu supportu per i ghjunghjini di gamma in setti anonimi (senza nome):
# nft aghjunghje regula inet filter input ip daddr . tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } accettà - A capacità di scartà i pacchetti cù bandiere 802.1q (VLAN) durante u processu di ponti di rete hè furnita:
# nft aghjunghje rule bridge foo bar ether type vlan reject with tcp reset
- Aghjunghje supportu per l'abbinamentu per identificatore di sessione TCP (ID di cuntrack). Per determinà l'ID di cuntrack, pudete aduprà l'opzione "--output id":
# conntrack -L - ID di output
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pacchetti=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pacchetti=2 bytes=320 \
[ASSURED] marca = 0 usu = 1 id = 2779986232# nft aghjunghje regula foo bar ct id 2779986232 counter
Source: opennet.ru