uitgave van het pakketfilter , dat zich ontwikkelt als vervanging voor iptables, ip6tables, arptables en ebtables door de interfaces voor pakketfiltering voor IPv4, IPv6, ARP en netwerkschakelaars te uniformeren. De nftables-pakket bevat componenten van de pakketfilter die in de gebruikersruimte werken, terwijl op het niveau van de kernel de nf_tables-subsysteem zorgt voor de werking, die deel uitmaakt van de Linux-kernel sinds versie 3.13. De benodigde wijzigingen voor de nftables 0.9.5-release zijn opgenomen in de kernel .
Op het kernniveau wordt slechts een algemeen interface aangeboden, dat onafhankelijk is van een specifiek protocol en basisfuncties biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van bewerkingen met gegevens en het beheren van de stroom. De daadwerkelijke filterregels en protocoolspecifieke verwerkers worden in bytecode gecompileerd in de gebruikersruimte, waarna deze bytecode wordt geladen in de kernel via het Netlink-interface en wordt uitgevoerd in de kernel in een speciale virtuele machine die lijkt op BPF (Berkeley Packet Filters). Deze benadering maakt het mogelijk om de grootte van de filtercode die in de kernel draait, aanzienlijk te verminderen en alle functies voor het parseren van regels en de logica voor het werken met protocollen naar de gebruikersruimte te halen.
Belangrijkste vernieuwingen:
- Ondersteuning voor pakket- en verkeersstatistieken die zijn gekoppeld aan de set-elementen is toegevoegd. Statistieken worden ingeschakeld met behulp van het sleutelwoord "counter":
table ip x {
set y {
typeof ip saddr
counter
elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}chain z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - Om de initiƫle waarden van de statistieken in te stellen, bijvoorbeeld om eerdere statistieken te herstellen na een herstart, kan de command "nft -f" voor de set worden gebruikt:
# cat ruleset.nft
table ip x {
set y {
typeof ip saddr
counter
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 }
}chain z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
}
# nft -f ruleset.nft
# nft list ruleset
table ip x {
set y {
typeof ip saddr
counter
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 }
}chain z {
type filter hook output priority filter; policy accept;
ip daddr @y
}
} - Ondersteuning voor statistieken is ook toegevoegd aan flowtable:
table ip foo {
flowtable bar {
hook ingress priority -100
devices = { eth0, eth1 }
counter
}chain forward {
type filter hook forward priority filter;
flow add @bar counter
}
}De lijst van statistieken kan worden bekeken met de command "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 - In de sets voor concatenaties (bepaalde combinaties van adressen en poorten die het vergelijken vereenvoudigen) is de mogelijkheid toegevoegd om de "typeof"-directieve te gebruiken, die het datatype van de elementen voor de samenstellende delen van de set-elementen definieert:
table ip foo {
set whitelist {
typeof ip saddr . tcp dport
elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
ip daddr . tcp dport @whitelist accept
}
} - De "typeof"-directieve is nu ook toepasbaar op concatenaties in map-lijsten:
table ip foo {
map addr2mark {
typeof ip saddr . tcp dport : meta mark
elements = { 192.168.10.35 . 80 : 0x00000001,
192.168.10.135 . 80 : 0x00000002 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
meta mark set ip daddr . tcp dport map @addr2mark accept
}
} - Ondersteuning voor combinaties met reeksen in anonieme (ongenoemde) sets is toegevoegd:
# 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 - De mogelijkheid om pakketten met 802.1q (VLAN) -vlaggen te stuiten tijdens de verwerking van netwerkschakelaars is geboden:
# nft add rule bridge foo bar ether type vlan reject with tcp reset
- Ondersteuning voor identificatie via TCP-sessie-ID (conntrack ID) is toegevoegd. De conntrack ID kan worden bepaald met de optie "--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
Bron: opennet.ru
