Filtr pakietów nftables w wersji 1.0.7

Opublikowano wydanie filtra pakietów nftables 1.0.7, ujednolicające interfejsy filtrowania pakietów dla IPv4, IPv6, ARP i mostów sieciowych (mające na celu zastąpienie iptables, ip6table, arptables i ebtables). Pakiet nftables zawiera komponenty filtra pakietów, które działają w przestrzeni użytkownika, podczas gdy poziom jądra zapewnia podsystem nf_tables, który jest częścią jądra Linuksa od wersji 3.13. Na poziomie jądra dostępny jest tylko ogólny, niezależny od protokołu interfejs, który zapewnia podstawowe funkcje do wydobywania danych z pakietów, wykonywania operacji na danych i kontrolowania 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 zmiany:

  • W systemach Linux 6.2+ dodano obsługę dopasowywania protokołów vxlan, geneve, gre i gretap, umożliwiając prostym wyrażeniom sprawdzanie nagłówków w zahermetyzowanych pakietach. Na przykład, aby sprawdzić adres IP w nagłówku zagnieżdżonego pakietu z VxLAN, możesz teraz użyć reguł (bez konieczności uprzedniej deenkapsulacji nagłówka VxLAN i powiązania filtra z interfejsem vxlan0): ... udp dport 4789 protokół ip vxlan udp ... udp dport 4789 vxlan ip saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip saddr . vxlan ip tatadr { 1.2.3.4 . 4.3.2.1}
  • Zaimplementowano obsługę automatycznego scalania reszt po częściowym usunięciu elementu setlisty, co pozwala na usunięcie elementu lub części zakresu z istniejącego zakresu (wcześniej zakres można było usunąć tylko w całości). Np. po usunięciu elementu 25 z zestawu z zakresami 24-30 i 40-50, 24, 26-30 i 40-50 pozostaną na liście. Poprawki wymagane do automatycznego łączenia będą oferowane w wydaniach naprawczych stabilnych gałęzi jądra 5.10+. # nft list ruleset table ip x { set y { typeof tcp dport flags interwał auto-merge elementów = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interwał auto-merge elementów = { 24, 26-30, 40-50 } } }
  • Zezwalaj na używanie kontaktów i zakresów w mapowaniu translacji adresów (NAT). tabela ip nat {łańcuch prerouting {wpisz nat hook prerouting priorytet dstnat; akceptacja polityki; dnat na ip daddr . mapa portów tcp { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20. 8888-8889 : 1.1.2.69 . 2048-2049 } trwałe } }
  • Dodano obsługę wyrażenia „ostatni”, co pozwala dowiedzieć się, kiedy ostatnio użyto elementu reguły lub elementu listy. Ta funkcja jest obsługiwana od wersji jądra Linuksa 5.14. table ip x { set y { typeof ip daddr . tcp dport rozmiar 65535 flagi dynamiczny, limit czasu ostatni limit czasu 1h } łańcuch z {typ filtra haka filtr wyjściowy priorytetu; akceptacja zasad; zaktualizuj @y { ip tatadr. tcp dport } } } # nft list set ip xy table ip x {set y { typeof ip daddr. tcp dport rozmiar 65535 flagi dynamiczny, limit czasu ostatni limit czasu 1h elementy = { 172.217.17.14 . 443 ostatnio używany 1s591ms limit czasu 1h wygasa 59m58s409ms, 172.67.69.19 . 443 ostatnio używany 4s636ms limit czasu 1h wygasa 59m55s364ms, 142.250.201.72 . 443 ostatnio używany 4s748ms limit czasu 1h wygasa 59m55s252ms, 172.67.70.134 . 443 ostatnio używany 4s688ms limit czasu 1h wygasa 59m55s312ms, 35.241.9.150 . 443 ostatnio używany 5s204ms limit czasu 1h wygasa 59m54s796ms, 138.201.122.174 . 443 ostatnio używany 4s537ms limit czasu 1h wygasa 59m55s463ms, 34.160.144.191 . 443 ostatnio używany 5s205ms limit czasu 1h wygasa 59m54s795ms, 130.211.23.194 . 443 ostatnio używane 4s436ms limit czasu 1h wygasa 59m55s564ms } } }
  • Dodano możliwość definiowania limitów w set-listach. Na przykład, aby zdefiniować limit ruchu dla każdego docelowego adresu IP, możesz określić: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 MB } chain y { type filter hook egress device "eth0" filtr priorytetowy; akceptacja zasad; ip daddr @y upuść } } # nft dodaj element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list zestaw reguł tabela netdev x { zestaw y { wpisz ipv4_addr rozmiar 65535 limit na elementy 10000 MB = { 8.8.8.8. 10000 limit ponad 196 MB użytych 0 bajtów } } łańcuch y { typ filtru hak urządzenia wyjściowego filtr priorytetu „ethXNUMX”; akceptacja polityki; ip tatadr @y upuść } }
  • Dozwolone jest stosowanie stałych w set-listach. Na przykład, używając listy adresów docelowych i identyfikatora sieci VLAN jako klucza, można bezpośrednio określić numer sieci VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id rozmiar 2048 flagi dynamic, timeout timeout 1m } łańcuch c { typ haka filtru wejście urządzenie eth0 priorytet 0; akceptacja zasad; typ eteru != 8021q aktualizacja @s { ether daddr . 123 } licznik } }
  • Dodano nowe polecenie „zniszcz”, aby bezwarunkowo usuwać obiekty (w przeciwieństwie do polecenia usuwania, nie generuje ono ENOENT podczas próby usunięcia brakującego obiektu). Wymaga co najmniej jądra Linux 6.3-rc do działania. zniszcz filtr ip tabeli

Źródło: opennet.ru

Dodaj komentarz