nftables paket filtri 0.9.5 versiyasi

nashr etilgan paketli filtrni chiqarish nftables 0.9.5, IPv6, IPv4, ARP va tarmoq ko'priklari uchun paketli filtrlash interfeyslarini birlashtirib, iptables, ip6table, arptables va ebtables o'rnini bosuvchi sifatida rivojlanmoqda. nftables to'plami foydalanuvchi maydonida ishlaydigan paket filtri komponentlarini o'z ichiga oladi, yadro darajasidagi ish esa 3.13 versiyasidan beri Linux yadrosining bir qismi bo'lgan nf_tables quyi tizimi tomonidan ta'minlanadi. Nftables 0.9.5 versiyasi ishlashi uchun zarur bo'lgan o'zgarishlar yadroga kiritilgan Linux 5.7.

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

a Izoh qo'shish