Yadro darajasida paketlardan ma'lumotlarni olish, ma'lumotlar ustida operatsiyalarni bajarish va oqimni boshqarish uchun asosiy funktsiyalarni ta'minlaydigan faqat umumiy protokoldan mustaqil interfeys taqdim etiladi. Filtrlash qoidalarining o'zi va protokolga xos ishlov beruvchilar foydalanuvchi bo'shliq baytekodiga kompilyatsiya qilinadi, shundan so'ng bu bayt kod Netlink interfeysi yordamida yadroga yuklanadi va yadroda BPF (Berkeley Packet Filters) ga o'xshash maxsus virtual mashinada bajariladi. Ushbu yondashuv yadro darajasida ishlaydigan filtrlash kodining hajmini sezilarli darajada kamaytirish va tahlil qilish qoidalarining barcha funktsiyalarini va protokollar bilan ishlash mantiqini foydalanuvchi maydoniga ko'chirish imkonini beradi.
Asosiy innovatsiyalar:
- To'plamlarga to'plam elementlari bilan bog'langan paket va trafik hisoblagichlarini qo'llab-quvvatlash qo'shildi. Hisoblagichlar “counter” kalit so‘zi yordamida yoqiladi:
jadval ip x {
o'rnatish y {
IP saddr turi
counter
elementlar = {192.168.10.35, 192.168.10.101, 192.168.10.135}
}zanjir z {
turi filtri kancasi chiqish ustuvor filtri; siyosatni qabul qilish;
ip daddr @y
}
} - Hisoblagichlarning dastlabki qiymatlarini o'rnatish uchun, masalan, qayta ishga tushirilgandan so'ng oldingi hisoblagichlarni tiklash uchun siz "nft -f" buyrug'idan foydalanishingiz mumkin:
# cat rulesset.nft
jadval ip x {
o'rnatish y {
IP saddr turi
counter
elementlar = {192.168.10.35 hisoblagich paketlari 1 bayt 84, 192.168.10.101 \
hisoblagich p 192.168.10.135 hisoblagich paketlari 0 bayt 0 }
}zanjir z {
turi filtri kancasi chiqish ustuvor filtri; siyosatni qabul qilish;
ip daddr @y
}
}
# nft -f ruleset.nft
#nft ro'yxati qoidalari to'plami
jadval ip x {
o'rnatish y {
IP saddr turi
counter
elementlar = {192.168.10.35 hisoblagich paketlari 1 bayt 84, 192.168.10.101 \
hisoblagich p 192.168.10.135 hisoblagich paketlari 0 bayt 0 }
}zanjir z {
turi filtri kancasi chiqish ustuvor filtri; siyosatni qabul qilish;
ip daddr @y
}
} - Oqim jadvaliga qarshi yordam ham qo'shildi:
jadval ip foo {
oqim jadvali paneli {
kancaga kirish ustuvorligi -100
qurilmalar = { eth0, eth1 }
counter
}oldinga zanjir {
turi filtri kanca oldinga ustuvor filtri;
oqim qo'shish @bar hisoblagichi
}
}Hisoblagichlar ro'yxatini "conntrack -L" buyrug'i yordamida ko'rishingiz mumkin:
tcp 6 src = 192.168.10.2 dst = 10.0.1.2 sport = 47278 dport = 5201 paket = 9 bayt = 608 \
src = 10.0.1.2 dst = 10.0.1.1 sport = 5201 dport = 47278 paket = 8 bayt = 428 [OFFLOAD] belgisi = 0 \
secctx = null foydalanish = 2 tcp 6 src = 192.168.10.2 dst = 10.0.1.2 sport = 47280 dport = 5201 \
paketlar = 1005763 bayt = 44075714753 src = 10.0.1.2 dst = 10.0.1.1 sport = 5201 dport = 47280 \
paketlar = 967505 bayt = 50310268 [OFFLOAD] belgisi = 0 secctx = null foydalanish = 2 - Birlashtirish uchun to'plamlarda (taqqoslashni soddalashtiradigan manzillar va portlarning ma'lum to'plamlari) to'plam elementlarining tarkibiy qismlari uchun elementlarning ma'lumotlar turini belgilaydigan "typeof" direktivasidan foydalanish mumkin:
jadval ip foo {
oq ro'yxatni belgilash {
typeof ip saddr. tcp dport
elementlar = {192.168.10.35. 80, 192.168.10.101. 80}
}zanjir bar {
turi filtri kancasi marshrutdan oldingi ustuvor filtr; siyosatning pasayishi;
ip daddr. tcp dport @whitellist qabul qilinadi
}
} - Typeof direktivasi endi xaritalar ro'yxatiga qo'shilish uchun ham amal qiladi:
jadval ip foo {
map addr2mark {
typeof ip saddr. tcp dport: meta belgisi
elementlar = {192.168.10.35. 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002 }
}zanjir bar {
turi filtri kancasi marshrutdan oldingi ustuvor filtr; siyosatning pasayishi;
meta belgisi to'plami IP daddr. tcp dport xaritasi @addr2mark qabul qiling
}
} - Anonim (nomsiz) to'plamlarda diapazonga qo'shilish uchun qo'shimcha yordam:
# nft qoida qo'shish inet filtri kiritish ip daddr. tcp dport\
{10.0.0.0/8. 10-23, 192.168.1.1-192.168.3.8. 80-443 } qabul qiling - Tarmoq ko'priklarini qayta ishlashda 802.1q (VLAN) bayroqlari bilan paketlarni o'chirish imkoniyati taqdim etiladi:
# nft qo'shish qoida ko'prigi foo bar efir turi vlan rad etish tcp reset bilan
- TCP seansi identifikatori (conntrack ID) bo'yicha moslashtirish uchun qo'shilgan yordam. Conntrack identifikatorini aniqlash uchun siz “--output id” variantidan foydalanishingiz mumkin:
# conntrack -L — chiqish identifikatori
udp 17 18 src = 192.168.2.118 dst = 192.168.2.1 sport = 36424 dport = 53 paket = 2 \
bayt = 122 src = 192.168.2.1 dst = 192.168.2.118 sport = 53 dport = 36424 paket = 2 bayt = 320 \
[ISSURED] belgisi=0 foydalanish=1 id=2779986232# nft qo'shish qoidasi foo bar ct id 2779986232 hisoblagich
Manba: opennet.ru