Tahap kernel hanya menyediakan antara muka bebas protokol generik yang menyediakan fungsi asas untuk mengekstrak data daripada paket, melaksanakan operasi data dan kawalan aliran. Peraturan penapisan dan pengendali khusus protokol disusun menjadi kod bait dalam ruang pengguna, selepas itu kod bait ini dimuatkan ke dalam kernel menggunakan antara muka Netlink dan dilaksanakan dalam kernel dalam mesin maya khas yang mengingatkan BPF (Penapis Paket Berkeley). Pendekatan ini membolehkan anda mengurangkan dengan ketara saiz kod penapisan yang berjalan pada peringkat kernel dan memindahkan semua fungsi peraturan dan logik penghuraian untuk bekerja dengan protokol ke dalam ruang pengguna.
Inovasi utama:
- Sokongan untuk kaunter paket dan trafik yang dikaitkan dengan elemen set telah ditambahkan pada set. Kaunter didayakan menggunakan kata kunci "kaunter":
jadual ip x {
set y {
jenis ip saddr
menentang
elemen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}rantai z {
jenis penapis cangkuk keluaran penapis keutamaan; penerimaan dasar;
ip ayah @y
}
} - Untuk menetapkan nilai awal pembilang, sebagai contoh, untuk memulihkan pembilang sebelumnya selepas dimulakan semula, anda boleh menggunakan arahan "nft -f":
# set peraturan kucing.nft
jadual ip x {
set y {
jenis ip saddr
menentang
elemen = { 192.168.10.35 paket pembilang 1 bait 84, 192.168.10.101 \
pembilang p 192.168.10.135 paket pembilang 0 bait 0 }
}rantai z {
jenis penapis cangkuk keluaran penapis keutamaan; penerimaan dasar;
ip ayah @y
}
}
# nft -f ruleset.nft
Set peraturan senarai #nft
jadual ip x {
set y {
jenis ip saddr
menentang
elemen = { 192.168.10.35 paket pembilang 1 bait 84, 192.168.10.101 \
pembilang p 192.168.10.135 paket pembilang 0 bait 0 }
}rantai z {
jenis penapis cangkuk keluaran penapis keutamaan; penerimaan dasar;
ip ayah @y
}
} - Sokongan kaunter juga telah ditambahkan pada jadual alir:
jadual ip foo {
bar jadual alir {
keutamaan kemasukan cangkuk -100
peranti = { eth0, eth1 }
menentang
}rantai ke hadapan {
jenis penapis cangkuk penapis keutamaan hadapan;
aliran tambah @kaunter bar
}
}Anda boleh melihat senarai pembilang menggunakan arahan "conntrack -L":
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paket=9 bait=608 \
src=10.0.1.2 dst=10.0.1.1 sukan=5201 dport=47278 paket=8 bait=428 [OFFLOAD] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
paket=1005763 bait=44075714753 src=10.0.1.2 dst=10.0.1.1 sukan=5201 dport=47280 \
paket=967505 bait=50310268 [OFFLOAD] markah=0 secctx=null use=2 - Dalam set untuk penggabungan (penggabungan, berkas alamat dan port tertentu yang memudahkan perbandingan), adalah mungkin untuk menggunakan arahan "jenis", yang menentukan jenis data elemen untuk bahagian konstituen elemen set:
jadual ip foo {
tetapkan senarai putih {
jenis ip saddr . tcp dport
elemen = { 192.168.10.35 . 80, 192.168.10.101. 80}
}bar rantai {
taip penapis cangkuk penapis keutamaan pralaluan; kejatuhan dasar;
ip dadr. tcp dport @whitelist terima
}
} - Jenis arahan kini juga digunakan untuk gabungan dalam senarai peta:
jadual ip foo {
peta addr2mark {
jenis ip saddr . tcp dport : tanda meta
elemen = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002 }
}bar rantai {
taip penapis cangkuk penapis keutamaan pralaluan; kejatuhan dasar;
set tanda meta ip daddr . tcp dport map @addr2mark terima
}
} - Sokongan tambahan untuk gabungan julat dalam set tanpa nama (tanpa nama):
# nft tambah peraturan input penapis inet ip daddr . tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } terima - Keupayaan untuk membuang paket dengan bendera 802.1q (VLAN) apabila memproses jambatan rangkaian disediakan:
# nft add rule bridge foo bar ether type vlan reject dengan tcp reset
- Menambah sokongan untuk pemadanan dengan pengecam sesi TCP (ID conntrack). Untuk menentukan ID conntrack, anda boleh menggunakan pilihan "--output id":
# conntrack -L βoutput id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paket=2 \
bait=122 src=192.168.2.1 dst=192.168.2.118 sukan=53 dport=36424 paket=2 bait=320 \
[ASSURED] markah=0 use=1 id=2779986232# nft tambah peraturan foo bar ct id 2779986232 kaunter
Sumber: opennet.ru