uitgave van het pakketfilter , dat zich ontwikkelt als vervanging voor iptables, ip6tables, arptables en ebtables door de interfaces voor pakketfiltering te uniformiseren voor IPv4, IPv6, ARP en netwerkbruggen. De nftables-pakket bevat de componenten van het pakketfilter dat in de gebruikersruimte werkt, terwijl op kernniveau de nf_tables-subsystemen verantwoordelijk zijn, die deel uitmaken van de Linux-kern sinds de uitgave 3.13. De nodige wijzigingen voor de werking van nftables 0.9.3 zijn opgenomen in de toekomstige tak van de Linux-kern 5.5.
Op kernniveau wordt slechts een algemene interface geleverd, onafhankelijk van het specifieke protocol, en biedt deze de basisfuncties voor het extraheren van gegevens uit pakketten, het uitvoeren van gegevensbewerkingen en het beheren van de stroom. De filtering logica en protocol-specifieke handlers worden in bytecode gecompileerd in de gebruikersruimte, waarna deze bytecode via de Netlink-interface in de kern wordt geladen en wordt uitgevoerd in een speciale virtuele machine, vergelijkbaar met BPF (Berkeley Packet Filters). Deze aanpak maakt het mogelijk om de grootte van de filtering code die op kernniveau draait, aanzienlijk te verkleinen en alle functies voor het parseren van regels en de logica voor het werken met protocollen naar de gebruikersruimte te verplaatsen.
Belangrijkste vernieuwingen:
- Ondersteuning voor het matchen van pakketten op tijd. Het is mogelijk om tijdsperiodes en data te definiƫren waarin de regel zal activeren, evenals om de activatie op specifieke dagen van de week in te stellen. Er is ook een nieuwe optie "-T" toegevoegd voor het weergeven van tijdstempels in seconden.
meta time "2019-12-24 16:00" ā "2020-01-02 7:00"
meta hour "17:00" ā "19:00"
meta day "Fri" - Ondersteuning voor het herstellen en opslaan van SELinux-labels (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - Ondersteuning voor map-lijsten synproxy, waarmee meer dan ƩƩn regel naar de backend kan worden gedefinieerd.
table ip foo {
synproxy https-synproxy {
mss 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
mss 1460
wscale 5
}chain pre {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain bar {
type filter hook forward priority filter; policy accept;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "other-synproxy" }
}
} - Mogelijkheid om elementen uit set-collecties dynamisch te verwijderen uit pakketverwerkingsregels.
nft add rule ⦠delete @set5 { ip6 saddr . ip6 daddr }
- Ondersteuning voor het matchen van VLAN op basis van identificator en protocol, zoals gedefinieerd in de metadata van de netwerkbruginterface;
meta ibrpvid 100
meta ibrvproto vlan - De optie '-t' ('--terse') om elementen van set-sets uit te sluiten bij het weergeven van regels. Bij uitvoering van 'nft -t list ruleset' zal worden weergegeven:
table ip x {
set y {
type ipv4_addr
}
}En bij 'nft list ruleset'
table ip x {
set y {
type ipv4_addr
elements = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - De mogelijkheid om meer dan ƩƩn apparaat op netdev-ketens op te geven (werkt alleen met kernel 5.5) voor het combineren van standaard filterregels.
add table netdev x
add chain netdev x y { \
type filter hook ingress devices = { eth0, eth1 } priority 0;
} - De mogelijkheid om beschrijvingen voor datatypes toe te voegen.
# nft describe ipv4_addr
datatype ipv4_addr (IPv4-adres) (basetype integer), 32 bits - De mogelijkheid om een CLI-interface te bouwen met de linenoise-bibliotheek in plaats van libreadline.
.\/configure āwith-cli=linenoise
Bron: opennet.ru
