Udgivelse af den batchfiltrende nftables 1.0.7

Udgivet er version 1.0.7 af pakkenetfiltrering nftables, der standardiserer filtreringsgrænsefladerne for IPv4, IPv6, ARP og netværksbroer (rettet mod at erstatte iptables, ip6tables, arptables og ebtables). Pakken nftables indeholder komponenter til pakkenetfiltrering, der kører i brugerrummet, mens nf_tables subsystemet, som er en del af Linux-kernen siden version 3.13, håndterer arbejdet på kerneniveau. På kerneniveau leveres kun et generelt interface, der ikke afhænger af den specifikke protokol, og som tilbyder grundlæggende funktioner til dataudtræk fra pakker, udførelse af dataoperationer og flowkontrol.

Reglerne for filtrering og protokolspecifikke behandlere kompileres til bytekode i brugerområdet, hvorefter denne bytekode indlæses i kernen ved hjælp af Netlink-interfacet og udføres i kernen i en særlig virtuelle maskiner, der minder om BPF (Berkeley Packet Filters). Denne tilgang muliggør en betydelig reduktion i størrelsen af den filtrering, der kører i kernen, og flytter alle funktioner til parsing af regler og logik til håndtering af protokoller til brugerområdet.

Vigtige ændringer:

  • For systemer med Linux-kerne 6.2+ er der tilføjet understøttelse af protokolmatchning for vxlan, geneve, gre og gretap, hvilket muliggør brug af enkle udtryk til at tjekke overskrifter i indkapslede pakker. For eksempel kan man nu tjekke IP-adresser i overskriften af en indkapslet pakke fra VxLAN, nu ved at bruge regler (uden behov for at forudgående fjerne VxLAN-overskriften og binde filteret til interface vxlan0): … udp dport 4789 vxlan ip protocol udp … udp dport 4789 vxlan ip saddr 1.2.3.0/24 … udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
  • Understøttelse af automatisk sammensmeltning af rester efter delvis sletning af et element fra set-listen er blevet implementeret, hvilket gør det muligt at fjerne et element eller en del af et interval fra et eksisterende interval (tidligere kunne intervallet kun slettes helt). For eksempel, efter at element 25 er slettet fra set-listen med intervallerne 24-30 og 40-50, vil listen bestå af 24, 26-30 og 40-50. Rettelser, der er nødvendige for at gøre automatisk sammensmeltning funktionsdygtig, vil blive foreslået i korrektioner til stabile kerneversioner 5.10+. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • Brug af kontakttypen og intervaller er tilladt ved mappning af adresseoversættelse (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr . tcp dport map { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20 . 8888-8889 : 1.1.2.69 . 2048-2049 } persistent } }
  • Support for the expression "last" has been added, allowing you to determine the last usage time of a rule element or set list. This feature is supported starting from Linux kernel 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip x y table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 last used 1s591ms timeout 1h expires 59m58s409ms, 172.67.69.19 . 443 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 last used 4s748ms timeout 1h expires 59m55s252ms, 172.67.70.134 . 443 last used 4s688ms timeout 1h expires 59m55s312ms, 35.241.9.150 . 443 last used 5s204ms timeout 1h expires 59m54s796ms, 138.201.122.174 . 443 last used 4s537ms timeout 1h expires 59m55s463ms, 34.160.144.191 . 443 last used 5s205ms timeout 1h expires 59m54s795ms, 130.211.23.194 . 443 last used 4s436ms timeout 1h expires 59m55s564ms } } }
  • The ability to set quotas in set lists has been added. For example, to set a traffic quota for each target IP address, you can specify: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8 quota over 10000 mbytes used 196 bytes } } chain y { type filter hook egress device "eth0" priority filter; policy accept; ip daddr @y drop } }
  • The use of constants in set lists is allowed. For example, when using the destination address and VLAN identifier as the key for the list, you can directly specify the VLAN number (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
  • A new command "destroy" has been added for the unconditional deletion of objects (unlike the delete command, it does not generate ENOENT when attempting to delete a non-existent object). A minimum of Linux kernel 6.3-rc is required for operation. destroy table ip filter

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster