Filtr pakietów nftables w wersji 1.0.2

Opublikowano wydanie pakietu filter nftables 1.0.2, ujednolicającego interfejsy filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych (mające na celu zastąpienie iptables, ip6table, arptables i ebtables). Zmiany wymagane do działania wersji nftables 1.0.2 są zawarte w jądrze Linuksa 5.17-rc.

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. 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.

Same reguły filtrowania i procedury obsługi specyficzne dla protokołów są kompilowane w kod bajtowy przestrzeni użytkownika, po czym ten kod bajtowy jest ładowany do jądra za pomocą interfejsu Netlink i wykonywany w jądrze na specjalnej maszynie wirtualnej przypominającej BPF (Berkeley Packet Filters). Takie podejście umożliwia znaczne zmniejszenie rozmiaru kodu filtrującego działającego na poziomie jądra oraz przeniesienie wszystkich funkcji reguł parsowania i logiki pracy z protokołami do przestrzeni użytkownika.

Główne innowacje:

  • Dodano tryb optymalizacji reguł, włączany za pomocą nowej opcji „-o” („--optimize”), którą można połączyć z opcją „--check”, aby sprawdzić i zoptymalizować zmiany w pliku zestawu reguł bez konieczności jego ładowania . Optymalizacja pozwala łączyć podobne reguły, na przykład reguły: meta iifname eth1 ip saddr 1.1.1.1 ip Daddr 2.2.2.3 Accept Meta iifname eth1 ip saddr 1.1.1.2 ip Daddr 2.2.2.5 Accept ip saddr 1.1.1.1 ip Daddr 2.2.2.2 .2.2.2.2 zaakceptuj ip saddr 3.3.3.3 ip Daddr XNUMX upuść

    zostaną połączone w meta iifname . ip saddr. ip tatadr { eth1 . 1.1.1.1. 2.2.2.3, eth1 . 1.1.1.2. 2.2.2.5 } zaakceptuj ip saddr . ip tatadr vmap { 1.1.1.1 . 2.2.2.2 : zaakceptować, 2.2.2.2 . 3.3.3.3: upuść}

    Przykładowe użycie: # nft -c -o -f Rulesset.test Łączenie: Rulesset.nft:16:3-37: ip Daddr 192.168.0.1 counter Accept Rulesset.nft:17:3-37: ip Daddr 192.168.0.2 Counter Accept ruleset.nft:18:3-37: ip Daddr 192.168.0.3 licznik zaakceptuj w: ip Daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } licznik pakietów 0 bajtów 0 zaakceptuj

  • Listy zestawów umożliwiają określenie opcji ip i tcp, a także fragmentów sctp: set s5 { typ opcji ip ra wartość elementy = { 1, 1024 } } set s7 { typ sctp fragment init liczba elementów strumieni przychodzących = { 1, 4 } } łańcuch c5 { opcja ip ra wartość @s5 zaakceptować } łańcuch c7 { fragment sctp init liczba strumieni przychodzących @ s7 zaakceptować }
  • Dodano obsługę opcji TCP fastopen, md5sig i mptcp.
  • Dodano obsługę używania podtypu mp-tcp w mapowaniach: opcja tcp podtyp mptcp 1
  • Ulepszony kod filtrujący po stronie jądra.
  • Flowtable ma teraz pełną obsługę formatu JSON.
  • Dodano możliwość wykorzystania akcji „reject” w operacjach dopasowywania ramek Ethernet. ether saddr aa:bb:cc:dd:ee:ff ip Daddr 192.168.0.1 odrzuć

Źródło: opennet.ru

Dodaj komentarz