հիմնական փաթեթային ֆիլտրի թողարկում , որը զարգանում է որպես iptables, ip6tables, arptables և ebtables-ի փոխարինող՝ IPv4, IPv6, ARP և ցանցային կամուրջների փաթեթների ֆիլտրացման ինտերֆեյսների միավորումների միջոցով: nftables փաթեթը ներառում է օգտագործողի տարածքում աշխատող փաթեթային ֆիլտրի բաղադրիչներ, մինչդեռ միջուկի մակարդակում մասնագիտացված nf_tables ենթակառուցվածքի միջոցով, որն առկա է Linux միջուկում 3.13-ից սկսած: nftables 0.9.4 թողարկման համար պահանջվող փոփոխությունները ներառված են ապագա միջուկների ճյուղում: .
Միջուկի մակարդակում տրամադրվում է ընդամենը ընդհանուր ինտերֆեյս՝ անկախ կոնկրետ پروտոկոլից և տրամադրելով տվյալների հանման, տվյալների հետագործման և հոսքի կառավարման հիմնական գործառույթները: Ֆիլտրացիայի կանոններն ու պրոտոկոլներին հատուկ պրոցեսորները կոմպիլացվում են օգտագործողի տարածքում байткոդի ձևով, հետո այդ байткոդը загрузվում է միջուկին Netlink ինտերֆեյսի միջոցով և կատարվում է միջուկում հատուկ վիրտուալ մեքենայի մեջ, որը նման է BPF-ի (Berkeley Packet Filters): Այս մոտեցումը նշանակալիորեն կրճատում է միջուկի մակարդակում աշխատող ֆիլտրացիայի կոդի չափը և բոլոր կանոնների解析ման գործառույթները և պրոտոկոլներով աշխատելու տրամաբանությունը տեղափոխում է օգտագործողի տարածք:
Կարևոր նորույթները:
- Հաճախորդ գործառույթի աջակցություն՝ ընդհանրությունների (concatenation, որոշ հասցեի և պորտի կապեր, որոնք պարզացնում են համապատասխանները): Օրինակ՝ «whitelist» հավաքածուի համար, որի տարրերը համակցված են, «interval» դրոշի հանձնելը կօգնի ցույց տալ, որ հավաքածուն կարող է ներառել օրինագծեր (միացումային «ipv4_addr . ipv4_addr . inet_service» համար, նախկինում կարելի էր թվարկել սուտ համադրությունների ձևով «192.168.10.35 . 192.68.11.123 . 80», բայց հիմա կարելի է նշել հասցեների խմբեր «192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80»):
լիցենզիա ip foo {
ծաղկափոշի whitelist {
տիպ ipv4_addr . ipv4_addr . inet_service
դրոշները interval
տարբերակները = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
}աբով bar {
տիպ ֆիլտր hook prerouting priority filter; քաղաքականություն drop;
ip saddr . ip daddr . tcp dport @whitelist ընդունել
}
} - Հավաքածուների և map-սպիսի համար հնարավորություն է ընձեռնված օգտագործել «typeof» դիրկը, որը սահմանում է անդամի ձևաչափը համադրություններում:
Օրինակ՝լիցենզիա ip foo {
ծաղկափոշի whitelist {
typeof ip saddr
տարբերակները = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}աբով bar {
տիպ ֆիլտր hook prerouting priority filter; քաղաքականություն drop;
ip daddr @whitelist ընդունել
}
}լիցենզիա ip foo {
map addr2mark {
typeof ip saddr : meta mark
տարբերակները = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Ավելացված է NAT-կապերում համակցությունների օգտագործման հնարավորություն, ինչը թույլ է տալիս նշել հասցե և պորտ NAT-ի تبدیلیներում map-սպիսի կամ անվանված հավաքածուների հիման վրա:
nft ավելացնել правило ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }
nft ավելացնել map ip nat destinations { տիպ ipv4_addr . inet_service : ipv4_addr . inet_service \\; }
nft ավելացնել правило ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations - Սարքային արագացման աջակցություն, երբ որոշ փոփոկչակներ տեղափոխվում են ցանցային քարտի վրա: Արագացումը ակտիվացվում է ethtool օգտակար ծրագրի միջոցով («ethtool -K eth0 hw-tc-offload on»), ապա ակտիվացվում է nftables-ի հիմնական օղակում «offload» դրոշի միջոցով: Linux 5.6 քերային օգտագործելով, աջակցություն է տրամադրվում գլխի դաշտերի խաղարկման և կրթական ինտերֆեյսի ստուգման համար, համադրելով թունելները, թողարկումները, կրկնությունները (dup) և ուղղորդման (fwd) փաթեթները: Անդրադարձվող օրինակներում, 192.168.30.20 հասցեից եկող փաթեթների թողարկումը կատարվում է ցանցային քարտի մակարդակում, առանց փաթեթների անցնելու քերային:
# cat file.nft
table netdev x {
chain y {
type filter hook ingress device eth0 priority 10; flags offload;
ip saddr 192.168.30.20 drop
}
}
# nft -f file.nft - Նորացված է սխալների տեղը տեղեկացնելու տեղեկությունը:
# nft delete rule ip y z handle 7
Error: Could not process rule: No such file or directory
delete rule ip y z handle 7
^# nft delete rule ip x x handle 7
Error: Could not process rule: No such file or directory
delete rule ip x x handle 7
^# nft delete table twst
Error: No such file or directory; did you mean table ‘test’ in family ip?
delete table twst
^^^^Առաջին օրինակն ցույց է տալիս, որ «y» աղյուսակը համակարգում բացակայում է, երկրորդը, որ «7» ձեռնարկը բացակայում է, իսկ երրորդը, որ ցուցադրվում է սխալի շտկման ծվություն աղյուսակի անունը գրելու ժամանակ.
- Ավելացել է slave-հղման ստուգման աջակցություն «meta sdif» կամ «meta sdifname» նշումով:
… meta sdifname vrf1 …
- Ավելացել է աջ կամ ձախ տեղաշարժի գործողություն: Օրինակ, գոյություն ունեցող փաթեթի պիտակը 1 բիտով ձախ կողմ տեղափոխելու և փոքր բիտի հորս դնելու համար:
… meta mark set meta mark lshift 1 or 0x1 …
- Իրականացվել է «-V» տարբերակը՝ տարբերակի ընդլայնած տեղեկառուի ցուցադրման համար.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: yes
minigmp: no
libxtables: yes - Հասկացման շարքերը այժմ պետք է խստորեն նշվեն հրամանների վրա: Օրինակ, անհրաժեշտ է նշել «nft -a list ruleset», իսկ «nft list ruleset -a» գործարկումը կհանգեցնի սխալ տրամադրման:
Ընտանիք: opennet.ru
