Մեկ տարի զարգացումից հետո
Միջուկի մակարդակը ապահովում է միայն ընդհանուր պրոտոկոլից անկախ ինտերֆեյս, որն ապահովում է հիմնական գործառույթներ՝ փաթեթներից տվյալներ հանելու, տվյալների գործողություններ կատարելու և հոսքի վերահսկման համար:
Ինքը՝ զտման տրամաբանությունը և պրոտոկոլի հատուկ մշակիչները կազմվում են բայթկոդի մեջ՝ օգտագործողի տարածքում, որից հետո այս բայթկոդը բեռնվում է միջուկում՝ օգտագործելով Netlink ինտերֆեյսը և գործարկվում հատուկ վիրտուալ մեքենայում, որը հիշեցնում է BPF (Berkeley Packet Filters): Այս մոտեցումը թույլ է տալիս զգալիորեն նվազեցնել միջուկի մակարդակով աշխատող զտիչ կոդի չափը և տեղափոխել վերլուծական կանոնների և տրամաբանության բոլոր գործառույթները՝ արձանագրությունների հետ աշխատելու համար օգտագործողի տարածք:
Հիմնական նորամուծությունները.
- IPsec աջակցություն, որը թույլ է տալիս համապատասխանեցնել թունելային հասցեները՝ հիմնված փաթեթի, IPsec հարցման ID-ի և SPI (անվտանգության պարամետրի ինդեքս) պիտակի վրա: Օրինակ,
... ipsec ip saddr 192.168.1.0/24-ում
... ipsec spi 1-65536-ումՀնարավոր է նաև ստուգել, թե արդյոք երթուղին անցնում է IPsec թունելով: Օրինակ՝ երթևեկությունը ոչ IPSec-ի միջոցով արգելափակելու համար.
… զտիչի ելքը rt ipsec բացակայում է կաթիլը
- Աջակցություն IGMP-ին (Internet Group Management Protocol): Օրինակ, դուք կարող եք օգտագործել կանոն՝ մերժելու IGMP խմբի անդամության մուտքային հարցումները
nft ավելացնել կանոնը netdev foo bar igmp տիպի անդամակցություն-հարցման հաշվիչ թողնել
- Անցումային շղթաներ սահմանելու համար փոփոխականներ օգտագործելու հնարավորություն (jump/goto): Օրինակ:
սահմանել dest = ber
ավելացնել կանոն ip foo bar jump $dest - Օպերացիոն համակարգերի (OS Fingerprint) նույնականացման դիմակների աջակցություն՝ վերնագրում TTL արժեքների հիման վրա: Օրինակ, ուղարկող OS-ի վրա հիմնված փաթեթները նշելու համար կարող եք օգտագործել հրամանը.
... մետա նշանի հավաքածու osf ttl բաց թողնել անվան քարտեզ { «Linux»՝ 0x1,
«Windows»՝ 0x2,
«MacOS»՝ 0x3,
"անհայտ": 0x0 }
... osf ttl բաց թողնել «Linux:4.20» տարբերակը - Ուղարկողի ARP հասցեին և թիրախային համակարգի IPv4 հասցեին համապատասխանելու ունակություն: Օրինակ՝ 192.168.2.1 հասցեից ուղարկված ARP փաթեթների հաշվիչը մեծացնելու համար կարող եք օգտագործել հետևյալ կանոնը.
սեղան arp x {
շղթա y {
տիպի ֆիլտրի կեռիկի մուտքագրման առաջնահերթ ֆիլտր; քաղաքականության ընդունում;
arp saddr ip 192.168.2.1 հաշվիչ փաթեթներ 1 բայթ 46
}
} - Աջակցություն վստահված անձի (tproxy) միջոցով հարցումների թափանցիկ վերահասցեավորման համար: Օրինակ՝ 80 նավահանգիստ զանգերը 8080 պրոքսի պորտին վերահղելու համար.
սեղան ip x {
շղթա y {
տիպի ֆիլտրի կեռիկի առաջնահերթություն -150; քաղաքականության ընդունում;
tcp dport 80 tproxy դեպի 8080
}
} - Աջակցություն վարդակների գծանշմանը` SO_MARK ռեժիմում setsockopt()-ի միջոցով սահմանված նշանը հետագայում ստանալու ունակությամբ: Օրինակ:
աղյուսակ inet x {
շղթա y {
տիպի ֆիլտրի կեռիկի առաջնահերթություն -150; քաղաքականության ընդունում;
tcp dport 8080 mark set socket mark
}
} - Աջակցություն շղթաների համար առաջնահերթ տեքստային անուններ նշելու համար: Օրինակ:
nft add chain ip x raw { type filter hook prerouting priority raw; }
nft add chain ip x filter { type filter hook prerouting priority filter; }
nft ավելացնել շղթայի ip x filter_later { type filter hook prerouting priority filter + 10; } - Աջակցություն SELinux թեգերին (Secmark): Օրինակ, SELinux համատեքստում «sshtag» թեգը սահմանելու համար կարող եք գործարկել.
nft ավելացնել secmark inet filter sshtag «system_u:object_r:ssh_server_packet_t:s0»
Եվ այնուհետև օգտագործեք այս պիտակը կանոններում.
nft ավելացնել կանոն inet ֆիլտրի մուտքագրում tcp dport 22 meta secmark set «sshtag»
nft ավելացնել քարտեզ inet filter secmapping { type inet_service : secmark; }
nft ավելացնել տարր inet filter secmapping { 22 : "sshtag" }
nft ավելացնել կանոն inet ֆիլտրի մուտքագրում meta secmark set tcp dport map @secmapping - Արձանագրություններին տրված պորտերը տեքստային ձևով նշելու ունակություն, ինչպես դրանք սահմանված են /etc/services ֆայլում: Օրինակ:
nft ավելացնել կանոն xy tcp dport «ssh»
nft ցուցակի կանոնների հավաքածու -l
աղյուսակ x {
շղթա y {
...
tcp dport «ssh»
}
} - Ցանցային ինտերֆեյսի տեսակը ստուգելու ունակություն: Օրինակ:
ավելացնել կանոն inet raw prerouting meta iifkind «vrf» ընդունել
- Կոմպլեկտների բովանդակության դինամիկ թարմացման համար բարելավված աջակցություն՝ հստակ նշելով «դինամիկ» դրոշը: Օրինակ՝ «s» հավաքածուն թարմացնելու համար աղբյուրի հասցեն ավելացնելու և մուտքը վերականգնելու համար, եթե 30 վայրկյանի ընթացքում փաթեթներ չկան.
ավելացնել աղյուսակ x
ավելացնել set xs {type ipv4_addr; չափը 128; թայմաութ 30s; դրոշների դինամիկ; }
ավելացնել շղթա xy { type filter hook մուտքագրման առաջնահերթություն 0; }
ավելացնել կանոն xy թարմացում @s { ip saddr } - Առանձին դադարի պայման սահմանելու ունակություն: Օրինակ, 8888 նավահանգիստ ժամանող փաթեթների լռելյայն ժամանակի վերջնաժամկետը վերացնելու համար կարող եք նշել.
սեղանի IP զտիչ {
ct timeout ագրեսիվ-tcp {
արձանագրություն tcp;
l3proto ip;
քաղաքականություն = {ստեղծվել է՝ 100, փակել_սպասել՝ 4, փակել՝ 4}
}
շղթայի ելք {
...
tcp dport 8888 ct ժամանակի դադարի հավաքածու «ագրեսիվ-tcp»
}
} - NAT աջակցություն inet ընտանիքի համար.
սեղան inet nat {
...
ip6 daddr dead::2::1 dnat to dead:2::99
} - Բարելավված տառասխալների մասին հաշվետվություն.
nft ավելացնել շղթայի ֆիլտրի փորձարկում
Սխալ․ նման ֆայլ կամ գրացուցակ չկա; ընտանեկան ip-ում սեղանի «ֆիլտր» նկատի ունեիք?
ավելացնել շղթայի ֆիլտրի փորձարկում
^^^^^^ - Կոմպլեկտներում ինտերֆեյսի անունները նշելու ունակություն.
սահմանել sc {
մուտքագրեք inet_service: եթե անունը
տարրեր = {"ssh" . «eth0» }
} - Թարմացված հոսքի աղյուսակի կանոնների շարահյուսություն.
nft ավելացնել աղյուսակ x
nft add flowtable x ft { hook ingress priority 0; սարքեր = {eth0, wlan0}; }
...
nft ավելացնել կանոն x առաջ ip արձանագրություն { tcp, udp } flow add @ft - Բարելավված JSON աջակցություն:
Source: opennet.ru