nftables ప్యాకెట్ ఫిల్టర్ 0.9.5 విడుదల

ప్రచురించబడింది ప్యాకెట్ ఫిల్టర్ విడుదల nftables 0.9.5, развивающегося в качестве замены iptables, ip6table, arptables и ebtables за счёт унификации интерфейсов фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов. В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. Необходимые для работы выпуска nftables 0.9.5 изменения включены в состав ядра Linux 5.7.

కెర్నల్ స్థాయిలో, ప్యాకెట్ల నుండి డేటాను సంగ్రహించడం, డేటాపై కార్యకలాపాలు చేయడం మరియు ప్రవాహాన్ని నియంత్రించడం కోసం ప్రాథమిక విధులను అందించే సాధారణ ప్రోటోకాల్-ఇండిపెండెంట్ ఇంటర్‌ఫేస్ మాత్రమే అందించబడుతుంది. ఫిల్టరింగ్ నియమాలు మరియు ప్రోటోకాల్-నిర్దిష్ట హ్యాండ్లర్లు యూజర్-స్పేస్ బైట్‌కోడ్‌లో కంపైల్ చేయబడతాయి, ఆ తర్వాత ఈ బైట్‌కోడ్ నెట్‌లింక్ ఇంటర్‌ఫేస్‌ని ఉపయోగించి కెర్నల్‌లోకి లోడ్ చేయబడుతుంది మరియు BPF (బర్కిలీ ప్యాకెట్ ఫిల్టర్‌లు)ని పోలి ఉండే ప్రత్యేక వర్చువల్ మెషీన్‌లో కెర్నల్‌లో అమలు చేయబడుతుంది. ఈ విధానం కెర్నల్ స్థాయిలో నడుస్తున్న ఫిల్టరింగ్ కోడ్ పరిమాణాన్ని గణనీయంగా తగ్గించడం మరియు పార్సింగ్ నియమాల యొక్క అన్ని విధులు మరియు ప్రోటోకాల్‌లతో పని చేసే లాజిక్‌లను వినియోగదారు స్థలంలోకి తరలించడం సాధ్యం చేస్తుంది.

ప్రధాన ఆవిష్కరణలు:

  • В наборы добавлена поддержка счётчиков пакетов и трафика, привязанных к элементам набора. Счётчики включаются при помощи ключевого слова «counter»:

    పట్టిక ip x {
    set y {
    ip saddr రకం
    కౌంటర్
    మూలకాలు = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    చైన్ z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Для установки начальных значений счётчиков, например, для восстановления прошлых счётчиков после перезапуска, набора можно использовать команду «nft -f»:

    # cat ruleset.nft
    పట్టిక ip x {
    set y {
    ip saddr రకం
    కౌంటర్
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    చైన్ z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    పట్టిక ip x {
    set y {
    ip saddr రకం
    కౌంటర్
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    చైన్ z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Поддержка счётчиков также добавлена во flowtable:

    టేబుల్ ip foo {
    flowtable bar {
    hook ingress priority -100
    devices = { eth0, eth1 }
    కౌంటర్
    }

    గొలుసు ముందుకు {
    type filter hook forward priority filter;
    flow add @bar counter
    }
    }

    Посмотреть список счётчиков можно командной «conntrack -L»:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • В наборах для присоединений (concatenation, определённые связки адресов и портов, упрощающие сопоставление) обеспечена возможность использования директивы «typeof», определяющей тип данных элементов для составных частей элементов набора:

    టేబుల్ ip foo {
    వైట్‌లిస్ట్ సెట్ చేయండి {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    చైన్ బార్ {
    టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత ఫిల్టర్; పాలసీ డ్రాప్;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • Директива typeof теперь также применима для присоединений в map-списках:

    టేబుల్ ip foo {
    మ్యాప్ addr2mark {
    typeof ip saddr . tcp dport : meta mark
    elements = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    చైన్ బార్ {
    టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత ఫిల్టర్; పాలసీ డ్రాప్;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • Добавлена поддержка присоединений с диапазонами в анонимных (неименованных) наборах:

    # nft add rule inet filter input ip daddr . tcp dport \
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept

  • Предоставлена возможность отбрасывания пакетов с флагами 802.1q (VLAN) при обработке сетевых мостов:

    # nft add rule bridge foo bar ether type vlan reject with tcp reset

  • Добавлена поддержка сопоставления по идентификатору TCP-сеанса (conntrack ID). Для определения conntrack ID можно использовать опцию «—output id»:

    # conntrack -L —output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
    [ASSURED] mark=0 use=1 id=2779986232

    # nft add rule foo bar ct id 2779986232 counter

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి