Wydanie pakietowego filtra nftables 0.9.4

Opublikowano wydanie filtra pakietów nftables 0.9.4, rozwijającego się jako zamiennik iptables, ip6tables, arptables i ebtables dzięki unifikacji interfejsów filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych. W pakiecie nftables znajdują się komponenty filtra pakietów działające w przestrzeni użytkownika, podczas gdy na poziomie jądra pracę zapewnia podsystem nf_tables, który jest częścią jądra Linux od wydania 3.13. Niezbędne do działania wydania nftables 0.9.4 zmiany są zawarte w przyszłej gałęzi jądra Linux 5.6.

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:

  • Wsparcie dla zakresów w konkatenacjach (konkatenacja, określone zestawy adresów i portów, które ułatwiają dopasowanie). Na przykład, dla zestawu „whitelist”, którego elementami jest konkatenacja, ustawienie flagi „interval” wskazuje, że zestaw może obejmować zakresy w konkatenacji (do konkatenacji „ipv4_addr . ipv4_addr . inet_service” wcześniej można było wymieniać dokładne dopasowania w formie „192.168.10.35 . 192.68.11.123 . 80”, a teraz można wskazywać grupy adresów „192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80”):

    tabela ip foo {
    zestaw whitelist {
    typ ipv4_addr . ipv4_addr . inet_service
    flagi interval
    elementy = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
    }

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

  • W zestawach i mapach zapewniono możliwość użycia dyrektywy „typeof”, która określa format elementu podczas dopasowania.
    Na przykład:

    tabela ip foo {
    zestaw whitelist {
    typeof ip saddr
    elementy = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    łańcuch bar {
    typ filtra hak prerouting priorytet filtra; polityka drop;
    ip daddr @whitelist akceptuj
    }
    }

    tabela ip foo {
    mapa addr2mark {
    typeof ip saddr : meta mark
    elementy = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Dodano wsparcie dla używania dołączeń w tłumaczeniach NAT, co pozwala na określenie adresu i portu przy definiowaniu przekształceń NAT opartych na listach map lub nazwanych zbiorach:

    nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }

    nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \\; }
    nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations

  • Wsparcie dla sprzętowego przyspieszenia z przeniesieniem niektórych operacji filtrowania na ramiona karty sieciowej. Przyspieszenie jest włączane za pomocą narzędzia ethtool („ethtool -K eth0 hw-tc-offload on”), po czym aktywowane w nftables dla głównego łańcucha za pomocą flagi „offload”. Kiedy używany jest rdzeń Linux 5.6, dostępne jest sprzętowe przyspieszenie dla dopasowywania pól nagłówka i sprawdzania wejściowego interfejsu w połączeniu z odbiorem, odrzucaniem, duplikowaniem (dup) i przekierowaniem (fwd) pakietów. W poniższym przykładzie operacje odrzucania pakietów przychodzących z adresu 192.168.30.20 są wykonywane na poziomie karty sieciowej, bez przekazywania pakietów do rdzenia:

    # cat file.nft
    table netdev x {
    chain y {
    type filter hook ingress device eth0 priority 10; flags offload;
    ip saddr 192.168.30.20 drop
    }
    }
    # nft -f file.nft

  • Poprawiono informowanie o miejscu błędu w regułach.

    # nft delete rule ip y z handle 7
    Error: Nie można przetworzyć reguły: Nie ma takiego pliku ani katalogu
    delete rule ip y z handle 7
    ^

    # nft delete rule ip x x handle 7
    Error: Nie można przetworzyć reguły: Nie ma takiego pliku ani katalogu
    delete rule ip x x handle 7
    ^

    # nft delete table twst
    Błąd: Nie ma takiego pliku ani katalogu; czy miałeś na myśli tabelę 'test' w rodzinie ip?
    delete table twst
    ^^^^

    W pierwszym przykładzie pokazano, że tabela „y” nie istnieje w systemie, w drugim, że brak jest obsługi „7”, a w trzecim, że wyświetla się sugestia dotycząca literówki przy wpisywaniu nazwy tabeli.

  • Dodano wsparcie dla sprawdzania interfejsu podrzędnego przez wskazanie „meta sdif” lub „meta sdifname”:

    … meta sdifname vrf1 …

  • Dodano wsparcie dla operacji przesunięcia w prawo lub w lewo. Na przykład, aby przesunąć istniejącą etykietę pakietu w lewo o 1 bit i ustawić najmłodszy bit na 1:

    … meta mark set meta mark lshift 1 or 0x1 …

  • Wprowadzono opcję „-V” do wyświetlania rozszerzonych informacji o wersji.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli: readline
    json: yes
    minigmp: no
    libxtables: yes

  • Opcje wiersza poleceń muszą być teraz koniecznie podawane przed komendami. Na przykład, należy podać „nft -a list ruleset”, a uruchomienie „nft list ruleset -a” spowoduje wyświetlenie błędu.

    Ź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