Tingkat kernel hanya menyediakan antarmuka protokol-independen generik yang menyediakan fungsi dasar untuk mengekstraksi data dari paket, melakukan operasi data, dan kontrol aliran. Aturan pemfilteran dan penangan khusus protokol dikompilasi menjadi bytecode di ruang pengguna, setelah itu bytecode ini dimuat ke dalam kernel menggunakan antarmuka Netlink dan dieksekusi di kernel dalam mesin virtual khusus yang mengingatkan pada BPF (Berkeley Packet Filters). Pendekatan ini memungkinkan Anda untuk secara signifikan mengurangi ukuran kode pemfilteran yang berjalan di tingkat kernel dan memindahkan semua fungsi aturan penguraian dan logika untuk bekerja dengan protokol ke dalam ruang pengguna.
Inovasi utama:
- Dukungan untuk penghitung paket dan lalu lintas yang terkait dengan elemen set telah ditambahkan ke set. Penghitung diaktifkan menggunakan kata kunci “penghitung”:
tabel ip x {
himpunan kamu {
jenis ip saddr
melawan
elemen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}rantai z {
jenis filter prioritas keluaran kait filter; menerima kebijakan;
ip ayah @y
}
} - Untuk mengatur nilai awal penghitung, misalnya untuk mengembalikan penghitung sebelumnya setelah restart, Anda dapat menggunakan perintah “nft -f”:
# aturan kucing.nft
tabel ip x {
himpunan kamu {
jenis ip saddr
melawan
elemen = { 192.168.10.35 paket penghitung 1 byte 84, 192.168.10.101 \
counter p 192.168.10.135 paket counter 0 byte 0 }
}rantai z {
jenis filter prioritas keluaran kait filter; menerima kebijakan;
ip ayah @y
}
}
# nft -f aturan.nft
#nft daftar aturan aturan
tabel ip x {
himpunan kamu {
jenis ip saddr
melawan
elemen = { 192.168.10.35 paket penghitung 1 byte 84, 192.168.10.101 \
counter p 192.168.10.135 paket counter 0 byte 0 }
}rantai z {
jenis filter prioritas keluaran kait filter; menerima kebijakan;
ip ayah @y
}
} - Dukungan balasan juga telah ditambahkan ke tabel alur:
tabel ip foo {
bilah tabel aliran {
prioritas masuknya kait -100
perangkat = { eth0, eth1 }
melawan
}rantai ke depan {
tipe filter kait filter prioritas maju;
aliran tambahkan @bar counter
}
}Anda dapat melihat daftar penghitung menggunakan perintah “conntrack -L”:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paket=9 byte=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 paket=8 byte=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 byte=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
paket=967505 byte=50310268 [OFFLOAD] tanda=0 detik=null use=2 - Dalam kumpulan untuk penggabungan (penggabungan, kumpulan alamat dan port tertentu yang menyederhanakan perbandingan), dimungkinkan untuk menggunakan arahan "typeof", yang menentukan tipe data elemen untuk bagian penyusun elemen kumpulan:
tabel ip foo {
tetapkan daftar putih {
jenis ip saddr. tcp dport
elemen = { 192.168.10.35 . 80, 192.168.10.101. 80}
}batang rantai {
tipe filter hook prerouting filter prioritas; penurunan kebijakan;
ip ayahdr. tcp dport @whitelist terima
}
} - Arahan typeof sekarang juga berlaku untuk gabungan dalam daftar peta:
tabel ip foo {
peta addr2mark {
jenis ip saddr. tcp dport : tanda meta
elemen = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002 }
}batang rantai {
tipe filter hook prerouting filter prioritas; penurunan kebijakan;
tanda meta mengatur ip daddr. tcp dport map @addr2mark terima
}
} - Menambahkan dukungan untuk gabungan rentang dalam kumpulan anonim (tanpa nama):
# nft tambahkan aturan filter inet masukan ip daddr. tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } terima - Kemampuan untuk membuang paket dengan flag 802.1q (VLAN) saat memproses jembatan jaringan disediakan:
# nft tambahkan aturan jembatan foo bar ether ketik vlan tolak dengan reset tcp
- Menambahkan dukungan untuk pencocokan berdasarkan pengidentifikasi sesi TCP (ID koneksi). Untuk menentukan ID conntrack, Anda dapat menggunakan opsi “--output id”:
# conntrack -L —id keluaran
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paket=2 \
byte=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 paket=2 byte=320 \
[DIJAMIN] tandai=0 gunakan=1 id=2779986232# nft tambahkan aturan foo bar ct id 2779986232 penghitung
Sumber: opennet.ru