It kernelnivo leveret allinich in generike protokol-ûnôfhinklike ynterface dy't basisfunksjes leveret foar it ekstrahearjen fan gegevens út pakketten, it útfieren fan gegevensoperaasjes en streamkontrôle. De filterregels en protokol-spesifike handlers wurde kompilearre yn bytekoade yn brûkersromte, wêrnei't dizze bytekoade yn 'e kearn laden wurdt mei de Netlink-ynterface en útfierd yn' e kearn yn in spesjale firtuele masine dy't docht tinken oan BPF (Berkeley Packet Filters). Dizze oanpak lit jo de grutte fan 'e filterkoade dy't op it kernelnivo rint signifikant ferminderje en alle funksjes fan parsingregels en logika foar wurkjen mei protokollen nei brûkersromte ferpleatse.
Wichtichste ynnovaasjes:
- Stipe foar pakket- en ferkearstellers ferbûn mei ynstelde eleminten is tafoege oan sets. Tellers binne ynskeakele mei it kaaiwurd "teller":
tabel ip x {
set y {
type ip saddr
loket
eleminten = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}ketting z {
type filter hook útfier prioriteit filter; belied akseptearje;
ip daddr @y
}
} - Om de begjinwearden fan tellers yn te stellen, bygelyks om eardere tellers te herstellen nei in trochstart, kinne jo it kommando "nft -f" brûke:
# kat regelset.nft
tabel ip x {
set y {
type ip saddr
loket
eleminten = { 192.168.10.35 tellerpakketten 1 bytes 84, 192.168.10.101 \
teller p 192.168.10.135 tellerpakketten 0 bytes 0 }
}ketting z {
type filter hook útfier prioriteit filter; belied akseptearje;
ip daddr @y
}
}
# nft -f regelset.nft
#nft list regelset
tabel ip x {
set y {
type ip saddr
loket
eleminten = { 192.168.10.35 tellerpakketten 1 bytes 84, 192.168.10.101 \
teller p 192.168.10.135 tellerpakketten 0 bytes 0 }
}ketting z {
type filter hook útfier prioriteit filter; belied akseptearje;
ip daddr @y
}
} - Tellerstipe is ek tafoege oan flowtable:
tabel ip foo {
flowtable bar {
heak ingress prioriteit -100
apparaten = { eth0, eth1 }
loket
}keatling foarút {
type filter hook foarút prioriteit filter;
stream tafoegje @bar counter
}
}Jo kinne de list mei tellers besjen mei it kommando "conntrack -L":
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 pakketten=9 bytes=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pakketten=8 bytes=428 [OFFLOAD] mark=0 \
secctx=null gebrûk=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 \
pakketten = 967505 bytes = 50310268 [OFFLOAD] mark = 0 secctx = null gebrûk = 2 - Yn sets foar gearfoeging (konkatenaasje, bepaalde bondels fan adressen en havens dy't fergeliking ferienfâldigje), is it mooglik om de rjochtline "typeof" te brûken, dy't it gegevenstype fan eleminten bepaalt foar de gearstallende dielen fan 'e eleminten fan 'e set:
tabel ip foo {
set whitelist {
type ip saddr. tcp dport
eleminten = {192.168.10.35. 80, 192.168.10.101. 80}
}kettingbalke {
type filter hook prerouting prioriteit filter; belied drop;
ip heit. tcp dport @whitelist akseptearje
}
} - It type rjochtline jildt no ek foar joins yn kaartlisten:
tabel ip foo {
map adr2mark {
type ip saddr. tcp dport: meta mark
eleminten = {192.168.10.35. 80: 0x00000001,
192.168.10.135. 80 : 0x00000002 }
}kettingbalke {
type filter hook prerouting prioriteit filter; belied drop;
meta mark set ip daddr. tcp dport map @addr2mark akseptearje
}
} - Stipe tafoege foar berik joins yn anonime (netneamde) sets:
# nft tafoegje regel inet filter ynfier ip daddr. tcp dport\
{10.0.0.0/8. 10-23, 192.168.1.1-192.168.3.8. 80-443 } akseptearje - De mooglikheid om pakketten mei 802.1q (VLAN) flaggen te ferwiderjen by it ferwurkjen fan netwurkbrêgen wurdt levere:
# nft add rule bridge foo bar ether type vlan reject with tcp reset
- Stipe tafoege foar oerienkomst troch TCP-sesje-identifikaasje (conntrack ID). Om de conntrack ID te bepalen, kinne jo de opsje "--output id" brûke:
# conntrack -L —útfier id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pakketten=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pakketten=2 bytes=320 \
[ASSURED] mark=0 gebrûk=1 id=2779986232# nft tafoegje regel foo bar ct id 2779986232 teller
Boarne: opennet.ru