nftables paket filtri 0.9.1 versiyasi

Bir yillik rivojlanishdan keyin taqdim etildi paketli filtrni chiqarish nftables 0.9.1, 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 paketli filtr 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.

Yadro darajasi faqat paketlardan ma'lumotlarni olish, ma'lumotlar operatsiyalarini bajarish va oqimlarni boshqarish uchun asosiy funktsiyalarni ta'minlovchi umumiy protokoldan mustaqil interfeysni ta'minlaydi.
Filtrlash mantig'ining o'zi va protokolga xos ishlov beruvchilar foydalanuvchi maydonida bayt-kodga kompilyatsiya qilinadi, shundan so'ng bu bayt kod Netlink interfeysi yordamida yadroga yuklanadi va BPF (Berkeley Packet Filters) ni eslatuvchi maxsus virtual mashinada bajariladi. Ushbu yondashuv yadro darajasida ishlaydigan filtrlash kodining hajmini sezilarli darajada kamaytirish va protokollar bilan ishlash uchun tahlil qilish qoidalari va mantiqining barcha funktsiyalarini foydalanuvchi maydoniga ko'chirish imkonini beradi.

Asosiy innovatsiyalar:

  • Paket, IPsec so'rov identifikatori va SPI (Xavfsizlik parametrlari indeksi) yorlig'i asosida tunnel manzillarini moslashtirishga imkon beruvchi IPsec qo'llab-quvvatlash. Masalan,

    ... ipsec in ip saddr 192.168.1.0/24
    ... spi 1-65536 da ipsec

    Marshrutning IPsec tunnelidan o'tish-o'tmasligini ham tekshirish mumkin. Masalan, IPSec orqali emas, balki trafikni bloklash uchun:

    … filtr chiqishi rt ipsec etishmayotgan tomchi

  • IGMP (Internet Group Management Protocol) ni qo'llab-quvvatlash. Misol uchun, siz kiruvchi IGMP guruhiga a'zolik so'rovlarini bekor qilish uchun qoidadan foydalanishingiz mumkin

    nft qoidani qo'shish netdev foo bar igmp tipidagi a'zolik-so'rov hisoblagichini tushirish

  • O'tish zanjirlarini aniqlash uchun o'zgaruvchilardan foydalanish imkoniyati (o'tish / o'tish). Masalan:

    dest = berni aniqlang
    qoida qo'shing ip foo bar jump $dest

  • Sarlavhadagi TTL qiymatlari asosida operatsion tizimlarni (OS Fingerprint) aniqlash uchun niqoblarni qo'llab-quvvatlash. Masalan, jo'natuvchi OS asosida paketlarni belgilash uchun siz quyidagi buyruqdan foydalanishingiz mumkin:

    ... meta mark seti osf ttl skip name map { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "noma'lum": 0x0}
    ... osf ttl "Linux:4.20" versiyasini o'tkazib yuborish

  • Yuboruvchining ARP manzili va maqsadli tizimning IPv4 manzilini moslashtirish imkoniyati. Masalan, 192.168.2.1 manzilidan yuborilgan ARP paketlar hisoblagichini oshirish uchun siz quyidagi qoidadan foydalanishingiz mumkin:

    jadval arp x {
    zanjir y {
    turi filtri kancasi kirish ustuvor filtri; siyosatni qabul qilish;
    arp saddr ip 192.168.2.1 hisoblagich paketlari 1 bayt 46
    }
    }

  • Proksi-server (tproxy) orqali so'rovlarni shaffof yo'naltirishni qo'llab-quvvatlash. Masalan, qo'ng'iroqlarni 80-portga proksi-port 8080-ga yo'naltirish uchun:

    jadval ip x {
    zanjir y {
    turi filtri kancasi marshrutdan oldingi ustuvorligi -150; siyosatni qabul qilish;
    tcp dport 80 tproxy dan: 8080 gacha
    }
    }

  • SO_MARK rejimida setsockopt() orqali belgilangan belgini qo'shimcha olish imkoniyati bilan rozetkalarni belgilashni qo'llab-quvvatlash. Masalan:

    jadval inet x {
    zanjir y {
    turi filtri kancasi marshrutdan oldingi ustuvorligi -150; siyosatni qabul qilish;
    tcp dport 8080 belgisi o'rnatilgan rozetka belgisi
    }
    }

  • Zanjirlar uchun ustuvor matn nomlarini belgilashni qo'llab-quvvatlash. Masalan:

    nft qo'shish zanjiri ip x raw { type filter hook prerouting priority raw; }
    nft qo'shish zanjiri ip x filter { type filter hook prerouting priority filter; }
    nft qo'shish zanjiri ip x filter_later { turi filtr kancasi oldindan yo'naltiruvchi ustuvor filtr + 10; }

  • SELinux teglarini qo'llab-quvvatlash (Secmark). Masalan, SELinux kontekstida "sshtag" tegini aniqlash uchun siz quyidagilarni bajarishingiz mumkin:

    nft qo'shing secmark inet filtri sshteg "system_u:object_r:ssh_server_packet_t:s0"

    Va keyin qoidalarda ushbu belgidan foydalaning:

    nft qo‘shish qoidasi inet filtri kiritish tcp dport 22 meta secmark “sshtag” to‘plami

    nft qo'shish xaritasi inet filtri secmapping { turi inet_service : secmark; }
    nft elementni qo'shish inet filtri secmapping {22 : "sshtag" }
    nft qo'shish qoidasi inet filtri kiritish meta secmark to'plami tcp dport xaritasi @secmapping

  • Matn shaklida protokollarga tayinlangan portlarni belgilash imkoniyati, chunki ular /etc/services faylida aniqlangan. Masalan:

    nft qo'shish qoidasi xy tcp dport "ssh"
    nft ro'yxati qoidalari to'plami -l
    jadval x {
    zanjir y {
    ...
    tcp dport "ssh"
    }
    }

  • Tarmoq interfeysi turini tekshirish imkoniyati. Masalan:

    qoida qo'shish inet raw prerouting meta iifkind "vrf" qabul

  • "Dinamik" bayroqni aniq ko'rsatish orqali to'plamlar tarkibini dinamik ravishda yangilash uchun yaxshilangan yordam. Masalan, manba manzilini qo'shish uchun "s" to'plamini yangilash va 30 soniya davomida paketlar bo'lmasa, yozuvni qayta o'rnatish uchun:

    x jadvalini qo'shing
    to'plamni qo'shish xs { yozing ipv4_addr; hajmi 128; kutish vaqti 30 soniya; bayroqlar dinamik; }
    zanjirni qo'shish xy { turi filtri kancasi kiritish ustuvorligi 0; }
    qoidani qo'shish xy yangilash @s { ip saddr }

  • Alohida vaqt tugashi shartini o'rnatish imkoniyati. Masalan, 8888-portga kelgan paketlar uchun standart vaqt tugashini bekor qilish uchun quyidagilarni belgilashingiz mumkin:

    jadval IP filtri {
    ct timeout agressive-tcp {
    tcp protokoli;
    l3proto ip;
    siyosat = {o'rnatilgan: 100, close_wait: 4, yopish: 4}
    }
    zanjir chiqishi {
    ...
    tcp dport 8888 ct vaqt tugashi "agressiv-tcp"
    }
    }

  • Inet oilasi uchun NAT yordami:

    jadval inet nat {
    ...
    ip6 daddr o'lik::2::1 dnat to o'lik:2::99
    }

  • Matn xatosi haqida hisobot berish yaxshilandi:

    nft zanjir filtri sinovini qo'shing

    Xato: Bunday fayl yoki katalog yo'q; Oilaviy ip da jadval "filtri" ni nazarda tutdingizmi?
    zanjir filtri sinovini qo'shing
    ^^^^^^

  • To'plamlarda interfeys nomlarini belgilash imkoniyati:

    sc o'rnatish {
    inet_service yozing. ifname
    elementlar = { "ssh" . "eth0"}
    }

  • Yangilangan oqim jadvali qoidalari sintaksisi:

    nft x jadvalini qo'shing
    nft add flowtable x ft { hook ingress priority 0; qurilmalar = { eth0, wlan0 }; }
    ...
    nft qo'shish qoidasi x forward ip protokoli { tcp, udp } flow add @ft

  • JSON qo'llab-quvvatlashi yaxshilandi.

Manba: opennet.ru

a Izoh qo'shish