Միջուկի մակարդակը ապահովում է միայն ընդհանուր պրոտոկոլից անկախ ինտերֆեյս, որն ապահովում է հիմնական գործառույթները փաթեթներից տվյալներ հանելու, տվյալների գործողություններ կատարելու և հոսքի վերահսկման համար: Զտման կանոնները և պրոտոկոլին հատուկ մշակիչները կազմվում են բայթկոդի մեջ՝ օգտագործողի տարածքում, որից հետո այս բայթկոդը բեռնվում է միջուկում՝ օգտագործելով Netlink ինտերֆեյսը և գործարկվում միջուկում հատուկ վիրտուալ մեքենայի մեջ, որը հիշեցնում է BPF (Berkeley Packet Filters): Այս մոտեցումը թույլ է տալիս զգալիորեն նվազեցնել միջուկի մակարդակով աշխատող զտիչ կոդի չափը և վերլուծական կանոնների և տրամաբանության բոլոր գործառույթները տեղափոխել օգտվողի տարածք:
Հիմնական նորամուծությունները.
- Աջակցություն միացումների միջակայքերին (միացում, հասցեների որոշակի փաթեթներ և նավահանգիստներ, որոնք հեշտացնում են համեմատությունը): Օրինակ, «սպիտակ ցուցակի» հավաքածուի համար, որի տարրերը կցորդ են, «ինտերվալ» դրոշը նշելը ցույց կտա, որ հավաքածուն կարող է ներառել ընդգրկույթներ հավելվածում («ipv4_addr . ipv4_addr. inet_service» հավելվածի համար նախկինում հնարավոր էր ճշգրիտ թվարկել համընկնում է «192.168.10.35. 192.68.11.123» ձևի, իսկ այժմ կարող եք նշել հասցեների խմբեր «80-192.168.10.35-192.168.10.40»):
սեղանի IP foo {
սահմանել սպիտակ ցուցակ {
մուտքագրեք ipv4_addr: ipv4_addr. inet_service
դրոշների ընդմիջում
տարրեր = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125 թթ. 80}
}շղթայական բար {
տիպի ֆիլտրի կեռիկի նախնական երթուղիների առաջնահերթ ֆիլտր; քաղաքականության անկում;
ip saddr. ip daddr. tcp dport @whitelist ընդունել
}
} - Կոմպլեկտների և քարտեզների ցուցակներում հնարավոր է օգտագործել «typeof» հրահանգը, որը որոշում է տարրի ձևաչափը համապատասխանեցնելիս:
Օրինակ `սեղանի IP foo {
սահմանել սպիտակ ցուցակ {
ip sadr-ի տեսակը
տարրեր = {192.168.10.35, 192.168.10.101, 192.168.10.135 }
}շղթայական բար {
տիպի ֆիլտրի կեռիկի նախնական երթուղիների առաջնահերթ ֆիլտր; քաղաքականության անկում;
ip daddr @whitelist ընդունել
}
}սեղանի IP foo {
քարտեզ adr2mark {
IP saddr տիպը՝ մետա նշան
տարրեր = {192.168.10.35: 0x00000001, 192.168.10.135: 0x00000002 }
}
} - Ավելացվել է NAT կապում միացումներ օգտագործելու հնարավորությունը, որը թույլ է տալիս նշել հասցե և նավահանգիստ NAT փոխակերպումները քարտեզների ցուցակների կամ անվանված հավաքածուների հիման վրա սահմանելիս.
nft ավելացնել կանոն ip nat pre dnat ip addr . port դեպի ip saddr քարտեզ {1.1.1.1: 2.2.2.2. երեսուն}
nft ավելացնել քարտեզի ip nat ուղղությունները {type ipv4_addr. inet_service՝ ipv4_addr. inet_service \\; }
nft ավելացնել կանոն ip nat pre dnat ip addr . port դեպի ip saddr. tcp dport քարտեզ @destinations - Աջակցություն ապարատային արագացմանը՝ ցանցային քարտի կողմից իրականացվող որոշ զտման գործողություններով: Արագացումը միացված է ethtool ծրագրի միջոցով («ethtool -K eth0 hw-tc-offload on»), որից հետո այն ակտիվացվում է հիմնական շղթայի nftables-ում՝ օգտագործելով «offload» դրոշը: Լինուքսի միջուկը 5.6-ն օգտագործելիս ապարատային արագացումը աջակցվում է վերնագրի դաշտի համապատասխանության և մուտքային ինտերֆեյսի ստուգման համար՝ փաթեթների ընդունման, հեռացման, կրկնօրինակման (dup) և փոխանցման (fwd) հետ համատեղ: Ստորև բերված օրինակում 192.168.30.20 հասցեից եկող փաթեթները բաց թողնելու գործողությունները կատարվում են ցանցային քարտի մակարդակում՝ առանց փաթեթները միջուկ փոխանցելու.
# cat file.nft
սեղան netdev x {
շղթա y {
տեսակ ֆիլտրի կեռիկի ներթափանցման սարք eth0 առաջնահերթություն 10; դրոշների բեռնաթափում;
ip saddr 192.168.30.20 կաթիլ
}
}
# nft -f file.nft - Կանոնների մեջ սխալի գտնվելու վայրի մասին բարելավված տեղեկատվություն:
# nft ջնջել կանոնը ip yz handle 7
Սխալ. Չհաջողվեց մշակել կանոնը. այդպիսի ֆայլ կամ գրացուցակ չկա
ջնջել կանոնը ip yz handle 7
^# nft ջնջել կանոնը ip xx handle 7
Սխալ. Չհաջողվեց մշակել կանոնը. այդպիսի ֆայլ կամ գրացուցակ չկա
ջնջել կանոնը ip xx handle 7
^# nft ջնջել աղյուսակը twst
Սխալ․ նման ֆայլ կամ գրացուցակ չկա; Դուք նկատի ունեք սեղանի թեստը ընտանեկան ip-ում:
ջնջել աղյուսակը twst
^^^^Առաջին օրինակը ցույց է տալիս, որ «y» աղյուսակը համակարգում չէ, երկրորդը, որ «7» մշակիչը բացակայում է, և երրորդը, որ աղյուսակի անունը մուտքագրելիս ցուցադրվում է տառասխալ հուշում:
- Ավելացվել է ստրկական ինտերֆեյսի ստուգման աջակցություն՝ նշելով «meta sdif» կամ «meta sdifname»:
... meta sdifname vrf1 ...
- Ավելացված է աջակցություն աջ կամ ձախ հերթափոխի գործողությունների համար: Օրինակ՝ գոյություն ունեցող փաթեթի պիտակը 1 բիթով տեղափոխելու և փոքր բիթը 1-ի սահմանելու համար.
… մետա նշանի սահմանել մետա նշան lshift 1 կամ 0x1…
- Իրականացված «-V» տարբերակը՝ ընդլայնված տարբերակի մասին տեղեկատվությունը ցուցադրելու համար:
# nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: այո
minigmp: ոչ
libxtables: այո - Հրամանի տողի տարբերակներն այժմ պետք է նշվեն հրամաններից առաջ: Օրինակ, դուք պետք է նշեք «nft -a list ruleset», իսկ «nft list ruleset -a» գործարկումը կհանգեցնի սխալի:
Source: opennet.ru