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. Reguły 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 w jądrze 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:
- Do zestawów dodano obsługę liczników pakietów i ruchu powiązanych z elementami zestawu. Liczniki włącza się za pomocą słowa kluczowego „counter”:
IP tabeli x {
ustaw y {
typ ip saddr
licznik
elementy = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}łańcuch z {
typ filtra hak wyjściowy filtr priorytetowy; polityka akceptuje;
ip tata @y
}
} - Aby ustawić początkowe wartości liczników, na przykład w celu przywrócenia poprzednich liczników po ponownym uruchomieniu, możesz użyć polecenia „nft -f”:
# zestaw reguł kota.nft
IP tabeli x {
ustaw y {
typ ip saddr
licznik
elementy = { 192.168.10.35 pakiety liczników 1 bajt 84, 192.168.10.101 \
licznik p 192.168.10.135 licznik pakietów 0 bajtów 0 }
}łańcuch z {
typ filtra hak wyjściowy filtr priorytetowy; polityka akceptuje;
ip tata @y
}
}
# nft -f zestaw reguł.nft
Zestaw reguł listy #nft
IP tabeli x {
ustaw y {
typ ip saddr
licznik
elementy = { 192.168.10.35 pakiety liczników 1 bajt 84, 192.168.10.101 \
licznik p 192.168.10.135 licznik pakietów 0 bajtów 0 }
}łańcuch z {
typ filtra hak wyjściowy filtr priorytetowy; polityka akceptuje;
ip tata @y
}
} - Do flowtable dodano także obsługę liczników:
tabela ip foo {
płynny pasek {
priorytet wejścia haka -100
urządzenia = { eth0, eth1 }
licznik
}łańcuch do przodu {
typ zaczep filtra filtr priorytetu do przodu;
przepływ dodaj licznik @bar
}
}Listę liczników możesz wyświetlić za pomocą polecenia „conntrack -L”:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 pakietów=9 bajtów=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pakietów=8 bajtów=428 [OFFLOAD] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
pakiety=1005763 bajty=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
pakiety=967505 bajtów=50310268 [OFFLOAD] mark=0 secctx=null use=2 - W zestawach do konkatenacji (konkatenacji, określonych wiązek adresów i portów ułatwiających porównanie) można zastosować dyrektywę „typeof”, która określa typ danych elementów dla części składowych elementów zestawu:
tabela ip foo {
ustaw białą listę {
typ ip saddr. port TCP
elementy = { 192.168.10.35 . 80, 192.168.10.101. 80}
}prowadnica łańcucha {
typ zaczep filtra filtr priorytetowy wstępnego routingu; rezygnacja z polityki;
ip tata. TCP dport @biała lista akceptuje
}
} - Dyrektywa typeof ma teraz zastosowanie również do złączeń na listach map:
tabela ip foo {
mapa adres2mark {
typ ip saddr. TCP dport: znacznik meta
elementy = { 192.168.10.35 . 80: 0x00000001,
192.168.10.135. 80: 0x00000002}
}prowadnica łańcucha {
typ zaczep filtra filtr priorytetowy wstępnego routingu; rezygnacja z polityki;
meta mark set ip Daddr. Mapa portów TCP @addr2mark Zaakceptuj
}
} - Dodano obsługę łączenia zakresów w anonimowych (nienazwanych) zestawach:
# nft dodaj regułę filtru inet wejście ip Daddr. port TCP\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } zaakceptuj - Zapewniona jest możliwość odrzucania pakietów z flagami 802.1q (VLAN) podczas przetwarzania mostów sieciowych:
# nft dodaj regułę Bridge foo bar Ethernet typu VLAN, odrzuć z resetem TCP
- Dodano obsługę dopasowywania według identyfikatora sesji TCP (conntrack ID). Aby określić identyfikator conntrack, możesz użyć opcji „--output id”:
# conntrack -L —identyfikator wyjścia
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pakiety=2 \
bajty=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pakiety=2 bajty=320 \
[ZAPEWNIONE] znak=0 użycie=1 id=2779986232# nft dodaj regułę foo bar ct id 2779986232 licznik
Źródło: opennet.ru