nftables փաթեթային ֆիլտր 0.9.4 թողարկում

հրապարակված փաթեթի ֆիլտրի թողարկում nftables 0.9.4, որը զարգանում է որպես փոխարինող iptables, ip6table, arptables և ebtables՝ միավորելով փաթեթների զտման միջերեսները IPv4, IPv6, ARP և ցանցային կամուրջների համար: Nftables փաթեթը ներառում է փաթեթի զտիչ բաղադրիչներ, որոնք աշխատում են օգտագործողի տարածքում, մինչդեռ միջուկի մակարդակի աշխատանքը տրամադրվում է nf_tables ենթահամակարգի կողմից, որը Linux միջուկի մաս է կազմում 3.13-ի թողարկումից ի վեր: Nftables 0.9.4 թողարկման համար անհրաժեշտ փոփոխությունները ներառված են ապագա միջուկի ճյուղում Linux 5.6.

Միջուկի մակարդակը ապահովում է միայն ընդհանուր պրոտոկոլից անկախ ինտերֆեյս, որն ապահովում է հիմնական գործառույթները փաթեթներից տվյալներ հանելու, տվյալների գործողություններ կատարելու և հոսքի վերահսկման համար: Զտման կանոնները և պրոտոկոլին հատուկ մշակիչները կազմվում են բայթկոդի մեջ՝ օգտագործողի տարածքում, որից հետո այս բայթկոդը բեռնվում է միջուկում՝ օգտագործելով 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

Добавить комментарий