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

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

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

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