Wydanie pakietowego filtra nftables 0.9.5

Opublikowano wydanie filtra pakietów nftables 0.9.5, rozwijającego się jako zamiennik iptables, ip6tables, arptables i ebtables poprzez unifikację interfejsów filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych. Pakiet nftables obejmuje komponenty filtrowania pakietów działające w przestrzeni użytkownika, podczas gdy na poziomie jądra pracę zapewnia subsystem nf_tables, który wchodzi w skład jądra Linux od wersji 3.13. Konieczne do działania wydania nftables 0.9.5 zmiany są zawarte w składzie jądra Linux 5.7.

Na poziomie jądra dostarczany jest tylko ogólny interfejs, niezależny od konkretnego protokołu i zapewniający podstawowe funkcje wydobywania danych z pakietów, wykonywania operacji na danych i zarządzania przepływem. Bezpośrednio zasady filtrowania i specyficzne dla protokołów przetworniki są kompilowane do bajtkodu w przestrzeni użytkownika, a następnie ten bajtkod jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany w jądrze w specjalnej wirtualnej maszynie przypominającej BPF (Berkeley Packet Filters). Taki podział pozwala znacznie zmniejszyć rozmiar kodu filtrowania działającego na poziomie jądra i przenieść wszystkie funkcje analizy reguł i logiki pracy z protokołami do przestrzeni użytkownika.

Główne nowości:

  • W zestawach dodano wsparcie dla liczników pakietów i ruchu związanych z elementami zestawu. Liczniki są włączane za pomocą słowa kluczowego „counter”:

    table ip x {
    set y {
    typeof ip saddr
    counter
    elementy = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Aby ustawić początkowe wartości liczników, na przykład przywracając wcześniejsze liczniki po restarcie, zestaw można użyć komendy „nft -f”:

    # cat ruleset.nft
    table ip x {
    set y {
    typeof ip saddr
    counter
    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 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    table ip x {
    set y {
    typeof ip saddr
    counter
    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 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Wsparcie dla liczników dodano również w flowtable:

    tabela ip foo {
    flowtable bar {
    hook ingress priority -100
    devices = { eth0, eth1 }
    counter
    }

    chain forward {
    type filter hook forward priority filter;
    flow add @bar counter
    }
    }

    Możesz zobaczyć listę liczników za pomocą komendy „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

  • W zestawach dla złączeń (concatenation, określone powiązania adresów i portów ułatwiające dopasowywanie) zapewniono możliwość użycia dyrektywy „typeof”, definiującej typ danych elementów dla składników elementu zestawu:

    tabela ip foo {
    zestaw whitelist {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    łańcuch bar {
    typ filtra hak prerouting priorytet filtra; polityka drop;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • Dyrektywa typeof jest teraz także stosowana dla złączeń w listach map:

    tabela ip foo {
    mapa addr2mark {
    typeof ip saddr . tcp dport : meta mark
    elements = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    łańcuch bar {
    typ filtra hak prerouting priorytet filtra; polityka drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • Dodano wsparcie dla złączeń z zakresami w anonimowych (nienaumanowanych) zestawach:

    # 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

  • Umożliwiono odrzucanie pakietów z flagami 802.1q (VLAN) podczas przetwarzania mostów sieciowych:

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

  • Dodano wsparcie dla mapowania po identyfikatorze sesji TCP (conntrack ID). Aby określić conntrack ID, można użyć opcji „—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

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster