O nivel do núcleo ofrece só unha interface xenérica independente do protocolo que proporciona funcións básicas para extraer datos de paquetes, realizar operacións de datos e controlar o fluxo. As regras de filtrado e os controladores específicos do protocolo compílanse en bytecode no espazo do usuario, despois de que este bytecode cárgase no núcleo mediante a interface Netlink e execútase no núcleo nunha máquina virtual especial que lembra a BPF (Berkeley Packet Filters). Este enfoque permítelle reducir significativamente o tamaño do código de filtrado que se executa a nivel do núcleo e mover todas as funcións de análise de regras e lóxica para traballar con protocolos ao espazo do usuario.
Principais novidades:
- Engadiuse aos conxuntos soporte para contadores de paquetes e tráfico asociados aos elementos de conxunto. Os contadores están habilitados usando a palabra clave "contador":
táboa ip x {
establecer y {
tipo de ip saddr
contrariar
elementos = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}cadea z {
tipo de filtro filtro de prioridade de saída de gancho; política aceptar;
ip daddr @y
}
} - Para configurar os valores iniciais dos contadores, por exemplo, para restaurar os contadores anteriores despois dun reinicio, pode usar o comando "nft -f":
# cat rulesset.nft
táboa ip x {
establecer y {
tipo de ip saddr
contrariar
elementos = { 192.168.10.35 contador de paquetes 1 bytes 84, 192.168.10.101 \
contador p 192.168.10.135 contador de paquetes 0 bytes 0 }
}cadea z {
tipo de filtro filtro de prioridade de saída de gancho; política aceptar;
ip daddr @y
}
}
# nft -f ruleset.nft
Conxunto de regras da lista #nft
táboa ip x {
establecer y {
tipo de ip saddr
contrariar
elementos = { 192.168.10.35 contador de paquetes 1 bytes 84, 192.168.10.101 \
contador p 192.168.10.135 contador de paquetes 0 bytes 0 }
}cadea z {
tipo de filtro filtro de prioridade de saída de gancho; política aceptar;
ip daddr @y
}
} - Tamén se engadiu o contador de soporte ao flowtable:
mesa ip foo {
barra de fluxo {
prioridade de entrada de gancho -100
dispositivos = { eth0, eth1 }
contrariar
}cadea adiante {
tipo de filtro gancho cara adiante filtro de prioridade;
flow engade contador de @bar
}
}Podes ver a lista de contadores usando o comando "conntrack -L":
tcp 6 src=192.168.10.2 dst=10.0.1.2 deporte=47278 dport=5201 paquetes=9 bytes=608 \
src=10.0.1.2 dst=10.0.1.1 deporte=5201 dport=47278 paquetes=8 bytes=428 [DESCARGA] marca=0 \
secctx=uso nulo=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 deporte=47280 dport=5201 \
paquetes=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 deporte=5201 dport=47280 \
paquetes=967505 bytes=50310268 [DESCARGA] mark=0 secctx=uso nulo=2 - En conxuntos para a concatenación (concatenación, certos paquetes de enderezos e portos que simplifican a comparación), é posible utilizar a directiva "typeof", que determina o tipo de datos dos elementos para as partes constitutivas dos elementos do conxunto:
mesa ip foo {
establecer lista branca {
tipo de ip saddr. tcp dport
elementos = { 192.168.10.35 . 80, 192.168.10.101. 80}
}barra de cadea {
tipo filtro hook prerouting filtro de prioridade; caída da política;
ip papá. tcp dport @whitelist aceptar
}
} - A directiva typeof agora tamén se aplica ás unións nas listas de mapas:
mesa ip foo {
mapa addr2mark {
tipo de ip saddr. tcp dport: meta marca
elementos = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135. 80 : 0x00000002}
}barra de cadea {
tipo filtro hook prerouting filtro de prioridade; caída da política;
meta mark set ip daddr . tcp dport map @addr2mark aceptar
}
} - Engadido soporte para combinacións de intervalos en conxuntos anónimos (sen nome):
#nft engadir regra de entrada de filtro inet ip daddr. tcp dport\
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } aceptar - Ofrécese a capacidade de descartar paquetes con bandeiras 802.1q (VLAN) ao procesar pontes de rede:
# nft engadir regra bridge foo bar ether type vlan reject con tcp reset
- Engadiuse compatibilidade para a correspondencia mediante o identificador de sesión TCP (ID de conntrack). Para determinar o ID de conttrack, pode usar a opción "--output id":
# conttrack -L —id de saída
udp 17 18 src=192.168.2.118 dst=192.168.2.1 deporte=36424 dport=53 paquetes=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 deporte=53 dport=36424 paquetes=2 bytes=320 \
[ASEGURADO] mark=0 use=1 id=2779986232# nft engadir regra foo bar ct id 2779986232 contador
Fonte: opennet.ru