nftables paket filtri 0.9.1 buraxılışı

Bir illik inkişafdan sonra təqdim etdi paket filtrinin buraxılması nftables 0.9.1, IPv6, IPv4, ARP və şəbəkə körpüləri üçün paket filtrləmə interfeyslərini birləşdirərək iptables, ip6table, arptables və ebtables üçün əvəz kimi inkişaf edir. Nftables paketinə istifadəçi məkanında işləyən paket filtri komponentləri daxildir, nüvə səviyyəsində iş isə 3.13 buraxılışından bəri Linux nüvəsinin bir hissəsi olan nf_tables alt sistemi tərəfindən təmin edilir.

Nüvə səviyyəsi yalnız paketlərdən məlumatların çıxarılması, məlumat əməliyyatlarının yerinə yetirilməsi və axınlara nəzarət üçün əsas funksiyaları təmin edən ümumi protokoldan müstəqil interfeys təmin edir.
Filtrləmə məntiqinin özü və protokola xas işləyicilər istifadəçi məkanında baytkoda yığılır, bundan sonra bu bayt kodu Netlink interfeysindən istifadə etməklə nüvəyə yüklənir və BPF-ni (Berkeley Paket Filtrləri) xatırladan xüsusi virtual maşında icra olunur. Bu yanaşma nüvə səviyyəsində işləyən filtrləmə kodunun ölçüsünü əhəmiyyətli dərəcədə azaltmağa və protokollarla işləmək üçün təhlil qaydaları və məntiqinin bütün funksiyalarını istifadəçi sahəsinə köçürməyə imkan verir.

Əsas yeniliklər:

  • Paket, IPsec sorğu identifikatoru və SPI (Təhlükəsizlik Parametri İndeksi) etiketinə əsasən tunel ünvanlarının uyğunlaşdırılmasına imkan verən IPsec dəstəyi. Misal üçün,

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

    Həmçinin marşrutun IPsec tunelindən keçib-keçmədiyini yoxlamaq mümkündür. Məsələn, IPSec vasitəsilə deyil, trafiki bloklamaq üçün:

    … filter çıxışı rt ipsec itkin düşmə

  • IGMP (Internet Group Management Protocol) üçün dəstək. Məsələn, daxil olan IGMP qrup üzvlük sorğularını ləğv etmək üçün bir qayda istifadə edə bilərsiniz

    nft əlavə qaydası netdev foo bar igmp növü üzvlük-sorğu sayğacının düşməsi

  • Keçid zəncirlərini təyin etmək üçün dəyişənlərdən istifadə etmək imkanı (jump / goto). Misal üçün:

    dest = ber təyin edin
    qayda əlavə edin ip foo bar jump $dest

  • Başlıqdakı TTL dəyərlərinə əsaslanaraq əməliyyat sistemlərini (OS Barmaq İzi) müəyyən etmək üçün maskalara dəstək. Məsələn, göndərən OS əsasında paketləri qeyd etmək üçün əmrdən istifadə edə bilərsiniz:

    ... meta işarəsi dəsti osf ttl ad xəritəsini atla { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "naməlum" : 0x0 }
    ... osf ttl "Linux:4.20" versiyasını atlayın

  • Göndərənin ARP ünvanını və hədəf sistemin IPv4 ünvanını uyğunlaşdırmaq imkanı. Məsələn, 192.168.2.1 ünvanından göndərilən ARP paketlərinin sayğacını artırmaq üçün aşağıdakı qaydadan istifadə edə bilərsiniz:

    cədvəl arp x {
    zəncir y {
    tip filter çəngəl giriş prioritet filter; siyasəti qəbul etmək;
    arp saddr ip 192.168.2.1 sayğac paketləri 1 bayt 46
    }
    }

  • Proksi (tproxy) vasitəsilə sorğuların şəffaf yönləndirilməsinə dəstək. Məsələn, zəngləri 80 portuna 8080 proxy portuna yönləndirmək üçün:

    cədvəl ip x {
    zəncir y {
    tipli filtr çəngəlinin əvvəlcədən marşrutlaşdırma prioriteti -150; siyasəti qəbul etmək;
    tcp dport 80 tproxy - :8080
    }
    }

  • SO_MARK rejimində setsockopt() vasitəsilə müəyyən edilmiş nişanı daha da əldə etmək imkanı ilə rozetkaların markalanması üçün dəstək. Misal üçün:

    cədvəl inet x {
    zəncir y {
    tipli filtr çəngəlinin əvvəlcədən marşrutlaşdırma prioriteti -150; siyasəti qəbul etmək;
    tcp dport 8080 nişanı dəsti yuva nişanı
    }
    }

  • Zəncirlər üçün prioritet mətn adlarını təyin etmək üçün dəstək. Misal üçün:

    nft əlavə zəncir ip x xam { type filter qarmaq prerouting priority raw; }
    nft əlavə zəncir ip x filter { növü filter çəngəl ön marşrutlaşdırma prioritet filter; }
    nft əlavə zəncir ip x filter_later { növü filter çəngəl marşrutu prioritet filter + 10; }

  • SELinux teqlərinə dəstək (Secmark). Məsələn, SELinux kontekstində "sshtag" teqini müəyyən etmək üçün siz işlədə bilərsiniz:

    nft əlavə et secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Və sonra qaydalarda bu etiketdən istifadə edin:

    nft əlavə qaydası inet filter girişi tcp dport 22 meta secmark set “sshtag”

    nft xəritə əlavə et inet filter secmapping { type inet_service : secmark; }
    nft element əlavə et inet filter secmapping { 22 : "sshtag" }
    nft qayda əlavə et inet filter daxiletmə meta secmark set tcp dport xəritəsi @secmapping

  • /etc/services faylında müəyyən edildiyi kimi, mətn şəklində protokollara təyin edilmiş portları təyin etmək imkanı. Misal üçün:

    nft əlavə qaydası xy tcp dport "ssh"
    nft siyahısı qaydaları -l
    cədvəl x {
    zəncir y {
    ...
    tcp dport "ssh"
    }
    }

  • Şəbəkə interfeysinin növünü yoxlamaq imkanı. Misal üçün:

    inet raw prerouting qayda əlavə edin meta iifkind "vrf" qəbul edin

  • “Dinamik” bayrağı açıq şəkildə göstərməklə dəstlərin məzmununu dinamik şəkildə yeniləmək üçün təkmilləşdirilmiş dəstək. Məsələn, mənbə ünvanını əlavə etmək üçün "s" dəstini yeniləmək və 30 saniyə ərzində paket olmadıqda girişi sıfırlamaq üçün:

    x cədvəli əlavə edin
    xs dəstini əlavə et { ipv4_addr yazın; ölçü 128; fasilə 30s; bayraqlar dinamik; }
    əlavə zəncir xy { type filter qarmaq giriş prioriteti 0; }
    qayda əlavə et xy yeniləmə @s { ip saddr }

  • Ayrı-ayrı vaxt aşımı şərtini təyin etmək imkanı. Məsələn, 8888 portuna gələn paketlər üçün standart vaxt aşımını ləğv etmək üçün aşağıdakıları təyin edə bilərsiniz:

    masa ip filtri {
    ct timeout aqressiv-tcp {
    tcp protokolu;
    l3proto ip;
    siyasət = {quruldu: 100, yaxın_gözləmə: 4, bağlan: 4}
    }
    zəncir çıxışı {
    ...
    tcp dport 8888 ct fasiləsi "aqressiv-tcp" təyin edildi
    }
    }

  • inet ailəsi üçün NAT dəstəyi:

    cədvəl inet nat {
    ...
    ip6 daddr ölü ::2::1 dnat to ölü:2::99
    }

  • Təkmilləşdirilmiş yazı xətası hesabatı:

    nft əlavə zəncir filtri testi

    Xəta: Belə fayl və ya kataloq yoxdur; ailə ip-də cədvəl “filtr”i nəzərdə tutursunuz?
    zəncir filtri testi əlavə edin
    ^^^^^^

  • Dəstlərdə interfeys adlarını təyin etmək imkanı:

    set sc {
    inet_service yazın. ifname
    elementlər = { "ssh" . "eth0" }
    }

  • Yenilənmiş axın cədvəli qaydaları sintaksisi:

    nft x cədvəlini əlavə edin
    nft add flowtable x ft { hook ingress priority 0; cihazlar = { eth0, wlan0 }; }
    ...
    nft əlavə qaydası x irəli ip protokolu { tcp, udp } axını əlavə edin @ft

  • Təkmilləşdirilmiş JSON dəstəyi.

Mənbə: opennet.ru

Добавить комментарий