ಕರ್ನಲ್ ಮಟ್ಟದಲ್ಲಿ, ಪ್ಯಾಕೆಟ್ಗಳಿಂದ ಡೇಟಾವನ್ನು ಹೊರತೆಗೆಯಲು, ಡೇಟಾದ ಮೇಲೆ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ಹರಿವನ್ನು ನಿಯಂತ್ರಿಸಲು ಮೂಲಭೂತ ಕಾರ್ಯಗಳನ್ನು ಒದಗಿಸುವ ಸಾಮಾನ್ಯ ಪ್ರೋಟೋಕಾಲ್-ಸ್ವತಂತ್ರ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಮಾತ್ರ ಒದಗಿಸಲಾಗುತ್ತದೆ. ಫಿಲ್ಟರಿಂಗ್ ನಿಯಮಗಳು ಮತ್ತು ಪ್ರೋಟೋಕಾಲ್-ನಿರ್ದಿಷ್ಟ ಹ್ಯಾಂಡ್ಲರ್ಗಳನ್ನು ಯೂಸರ್-ಸ್ಪೇಸ್ ಬೈಟ್ಕೋಡ್ಗೆ ಸಂಕಲಿಸಲಾಗುತ್ತದೆ, ನಂತರ ಈ ಬೈಟ್ಕೋಡ್ ಅನ್ನು ನೆಟ್ಲಿಂಕ್ ಇಂಟರ್ಫೇಸ್ ಬಳಸಿ ಕರ್ನಲ್ಗೆ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಬಿಪಿಎಫ್ (ಬರ್ಕ್ಲಿ ಪ್ಯಾಕೆಟ್ ಫಿಲ್ಟರ್ಗಳು) ಹೋಲುವ ವಿಶೇಷ ವರ್ಚುವಲ್ ಗಣಕದಲ್ಲಿ ಕರ್ನಲ್ನಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಈ ವಿಧಾನವು ಕರ್ನಲ್ ಮಟ್ಟದಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಫಿಲ್ಟರಿಂಗ್ ಕೋಡ್ನ ಗಾತ್ರವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಮಾಡಲು ಮತ್ತು ಪಾರ್ಸಿಂಗ್ ನಿಯಮಗಳ ಎಲ್ಲಾ ಕಾರ್ಯಗಳನ್ನು ಮತ್ತು ಪ್ರೋಟೋಕಾಲ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವ ತರ್ಕವನ್ನು ಬಳಕೆದಾರರ ಜಾಗಕ್ಕೆ ಸರಿಸಲು ಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ.
ಮುಖ್ಯ ಆವಿಷ್ಕಾರಗಳು:
- В наборы добавлена поддержка счётчиков пакетов и трафика, привязанных к элементам набора. Счётчики включаются при помощи ключевого слова «counter»:
ಟೇಬಲ್ ip x {
set y {
ಐಪಿ ಸ್ಯಾಡ್ಆರ್ ಪ್ರಕಾರ
ಕೌಂಟರ್
ಅಂಶಗಳು = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}ಚೈನ್ z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - Для установки начальных значений счётчиков, например, для восстановления прошлых счётчиков после перезапуска, набора можно использовать команду «nft -f»:
# cat ruleset.nft
ಟೇಬಲ್ ip x {
set y {
ಐಪಿ ಸ್ಯಾಡ್ಆರ್ ಪ್ರಕಾರ
ಕೌಂಟರ್
elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}ಚೈನ್ z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
}
# nft -f ruleset.nft
# nft list ruleset
ಟೇಬಲ್ ip x {
set y {
ಐಪಿ ಸ್ಯಾಡ್ಆರ್ ಪ್ರಕಾರ
ಕೌಂಟರ್
elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
counter p 192.168.10.135 counter packets 0 bytes 0 }
}ಚೈನ್ z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - Поддержка счётчиков также добавлена во flowtable:
ಟೇಬಲ್ ಐಪಿ ಫೂ {
flowtable bar {
hook ingress priority -100
devices = { eth0, eth1 }
ಕೌಂಟರ್
}ಸರಪಳಿ ಮುಂದಕ್ಕೆ {
type filter hook forward priority filter;
flow add @bar counter
}
}Посмотреть список счётчиков можно командной «conntrack -L»:
tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2 - В наборах для присоединений (concatenation, определённые связки адресов и портов, упрощающие сопоставление) обеспечена возможность использования директивы «typeof», определяющей тип данных элементов для составных частей элементов набора:
ಟೇಬಲ್ ಐಪಿ ಫೂ {
ಶ್ವೇತಪಟ್ಟಿ ಹೊಂದಿಸಿ {
typeof ip saddr . tcp dport
elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
}ಚೈನ್ ಬಾರ್ {
ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಪ್ರಿರೂಟಿಂಗ್ ಆದ್ಯತೆಯ ಫಿಲ್ಟರ್; ನೀತಿ ಡ್ರಾಪ್;
ip daddr . tcp dport @whitelist accept
}
} - Директива typeof теперь также применима для присоединений в map-списках:
ಟೇಬಲ್ ಐಪಿ ಫೂ {
ನಕ್ಷೆ addr2mark {
typeof ip saddr . tcp dport : meta mark
elements = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135 . 80 : 0x00000002 }
}ಚೈನ್ ಬಾರ್ {
ಟೈಪ್ ಫಿಲ್ಟರ್ ಹುಕ್ ಪ್ರಿರೂಟಿಂಗ್ ಆದ್ಯತೆಯ ಫಿಲ್ಟರ್; ನೀತಿ ಡ್ರಾಪ್;
meta mark set ip daddr . tcp dport map @addr2mark accept
}
} - Добавлена поддержка присоединений с диапазонами в анонимных (неименованных) наборах:
# nft add rule inet filter input ip daddr . tcp dport \
{ 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept - Предоставлена возможность отбрасывания пакетов с флагами 802.1q (VLAN) при обработке сетевых мостов:
# nft add rule bridge foo bar ether type vlan reject with tcp reset
- Добавлена поддержка сопоставления по идентификатору TCP-сеанса (conntrack ID). Для определения conntrack ID можно использовать опцию «—output id»:
# conntrack -L —output id
udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
[ASSURED] mark=0 use=1 id=2779986232# nft add rule foo bar ct id 2779986232 counter
ಮೂಲ: opennet.ru