Filtr pakietów nftables w wersji 0.9.3

opublikowany zwolnienie filtra pakietów nftables 0.9.3, rozwijający się jako zamiennik iptables, ip6table, arptables i ebtables poprzez ujednolicenie interfejsów filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych. Pakiet nftables zawiera komponenty filtrujące pakiety, które działają w przestrzeni użytkownika, natomiast pracę na poziomie jądra zapewnia podsystem nf_tables, który jest częścią jądra Linuksa od wersji 3.13. Zmiany wymagane do działania wersji nftables 0.9.3 zostaną uwzględnione w nadchodzącej gałęzi jądra Linuksa 5.5.

Poziom jądra zapewnia jedynie ogólny, niezależny od protokołu interfejs, który zapewnia podstawowe funkcje wyodrębniania danych z pakietów, wykonywania operacji na danych i kontroli przepływu. Sama logika filtrowania i procedury obsługi specyficzne dla protokołu są kompilowane do kodu bajtowego w przestrzeni użytkownika, po czym ten kod bajtowy jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany na specjalnej maszynie wirtualnej przypominającej BPF (Berkeley Packet Filters). Takie podejście pozwala znacznie zmniejszyć rozmiar kodu filtrującego działającego na poziomie jądra i przenieść wszystkie funkcje reguł analizowania i logiki pracy z protokołami do przestrzeni użytkownika.

Główne innowacje:

  • Obsługa dopasowywania pakietów według czasu. Możesz zdefiniować zarówno zakresy godzin, jak i dat, w których reguła będzie uruchamiana, a także skonfigurować wyzwalanie w poszczególnych dniach tygodnia. Dodano także nową opcję „-T”, aby wyświetlić czas epokowy w sekundach.

    metaczas \»2019-12-24 16:00\" — \»2020-01-02 7:00\"
    metagodzina „17:00” - „19:00”
    metadzień „piątek”

  • Wsparcie dla odzyskiwania i zapisywania znaków SELinux (secmark).

    ct secmark ustawia meta secmark
    meta secmark ustaw ct secmark

  • Obsługa list map synproxy, umożliwiająca zdefiniowanie więcej niż jednej reguły na backend.

    tabela ip foo {
    synproxy https-synproxy {
    ms 1460
    wskala 7
    znacznik czasu sack-perm
    }

    synproxy inny-synproxy {
    ms 1460
    wskala 5
    }

    łańcuch przed {
    typ hak filtrujący priorytet wstępnego trasowania surowy; polityka akceptuje;
    tcp dport 8888 flagi tcp syn notrack
    }

    prowadnica łańcucha {
    typ haka filtra filtr priorytetu do przodu; polityka akceptuje;
    Stan ct nieprawidłowy, nieśledzona nazwa synproxy ip saddr mapa { 192.168.1.0/24: „https-synproxy”, 192.168.2.0/24: „other-synproxy” }
    }
    }

  • Możliwość dynamicznego usuwania ustawionych elementów z reguł przetwarzania pakietów.

    nft dodaj regułę... usuń @set5 { ip6 saddr. tata ip6}

  • Obsługa mapowania sieci VLAN według identyfikatora i protokołu zdefiniowanego w metadanych interfejsu mostka sieciowego;

    meta ibrpvid 100
    meta ibrvproto vlan

  • Opcja „-t” („--terse”), aby wykluczyć elementy zestawu podczas wyświetlania reguł. Uruchomienie „nft -t list ruleset” spowoduje wyświetlenie:

    IP tabeli x {
    ustaw y {
    wpisz adres ipv4_addr
    }
    }

    Oraz z „zestawem reguł listy nft”

    IP tabeli x {
    ustaw y {
    wpisz adres ipv4_addr
    elementy = { 192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34}
    }
    }

  • Możliwość określenia więcej niż jednego urządzenia w łańcuchach netdev (działa tylko z jądrem 5.5) w celu połączenia wspólnych reguł filtrowania.

    dodaj tabelę netdev x
    dodaj łańcuch netdev xy { \
    typ urządzeń wejściowych z hakami filtrującymi = { eth0, eth1 } priorytet 0;
    }

  • Możliwość dodawania opisów typów danych.

    # nft opisz ipv4_addr
    typ danych ipv4_addr (adres IPv4) (liczba całkowita typu podstawowego), 32 bity

  • Możliwość zbudowania interfejsu CLI z biblioteką linenoise zamiast libreadline.

    ./configure --with-cli=linenoise

Źródło: opennet.ru

Dodaj komentarz