Parzûna pakêtê ya nftables 0.9.4 berdan

weşandin serbestberdana parzûna pakêtê nftables 0.9.4, wekî şûna iptables, ip6table, arptables û ebtables bi yekkirina navberên fîlterkirina pakêtê ji bo IPv4, IPv6, ARP û pirên torê pêşve diçe. Pakêta nftables hêmanên parzûna pakêtê yên ku di cîhê bikarhêner de dimeşin vedihewîne, dema ku xebata asta kernelê ji hêla binepergala nf_tables ve tê peyda kirin, ku ji berdana 3.13-an vir ve beşek ji kernel Linux-ê ye. Guhertinên ku ji bo xebitandina serbestberdana nftables 0.9.4 hewce ne di şaxa kernelê ya pêşerojê de ne. Linux 5.6.

Asta kernel tenê navgînek serbixwe-protokolek gelemperî peyda dike ku fonksiyonên bingehîn ji bo derxistina daneyan ji pakêtan, pêkanîna operasyonên daneyê, û kontrolkirina herikê peyda dike. Rêzikên fîlterkirinê û rêkarên protokol-taybet di cîhê bikarhêner de di nav bytekodê de têne berhev kirin, piştî ku ev bytekod bi karanîna navbeynkariya Netlink-ê di kernelê de tê barkirin û di kernelê de di makîneyek virtual ya taybetî ya ku BPF (Parzeyên pakêtê yên Berkeley) tîne bîra xwe de, tê darve kirin. Ev nêzîkatî dihêle hûn bi girîngî mezinahiya koda fîlterkirinê ya ku di asta kernelê de tê xebitandin kêm bikin û hemî fonksiyonên qaîdeyên parskirinê û mantiqê ji bo xebata bi protokolan re li cîhê bikarhêner biguhezînin.

Nûvekirinên sereke:

  • Piştgiriya rêzikên di girêdanan de (tevlihevkirin, hin pakêtên navnîşan û portên ku berhevdanê hêsan dikin). Mînakî, ji bo komek "lîsteya spî" ya ku hêmanên wê pêvek in, diyarkirina ala "navber" dê nîşan bide ku ev set dikare rêzan di pêvekê de bihewîne (ji bo pêveka "ipv4_addr . ipv4_addr . inet_service" berê mimkun bû ku tam navnîş bike lihevhatina forma "192.168.10.35. 192.68.11.123", û naha hûn dikarin komên navnîşanan diyar bikin "80-192.168.10.35-192.168.10.40"):

    sifrê ip foo {
    lîsteya spî saz bike {
    ipv4_addr binivîse. ipv4_addr. inet_service
    alên navber
    hêmanên = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80}
    }

    barê zincîrê {
    type filter hook prerouting filter priority; drop Policy;
    ip saddr. ip daddr. tcp dport @whitelist qebûl bike
    }
    }

  • Di set û navnîşên nexşeyê de, gengaz e ku meriv rêwerza "typeof" bikar bîne, ku dema ku lihevhatî forma hêmanê diyar dike.
    Bo nimûne:

    sifrê ip foo {
    lîsteya spî saz bike {
    typeof ip saddr
    hêmanên = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    barê zincîrê {
    type filter hook prerouting filter priority; drop Policy;
    ip daddr @whitelist qebûl bike
    }
    }

    sifrê ip foo {
    nexşeya addr2mark {
    typeof ip saddr: nîşana meta
    hêmanên = {192.168.10.35: 0x00000001, 192.168.10.135: 0x00000002}
    }
    }

  • Kapasîteya karanîna tevlêbûnên di girêdanên NAT de zêde kir, ku dihêle hûn dema ku veguheztinên NAT-ê li ser bingeha navnîşên nexşeyê an komên binavkirî diyar dikin navnîşek û portek diyar bikin:

    nft qaîdeya ip zêde bike nat pêş dnat ip addr. port ji bo nexşeya ip saddr {1.1.1.1: 2.2.2.2. sih }

    nft nexşeyê lê zêde bike ip nat destinations { ipv4_addr binivîse. inet_service: ipv4_addr. inet_service \\; }
    nft qaîdeya ip zêde bike nat pêş dnat ip addr. port bo ip saddr. tcp dport map @destinations

  • Piştgiriya bilezkirina hardware digel hin operasyonên fîlterkirinê yên ku ji hêla qerta torê ve têne kirin. Lezkirin bi navgîniya kargêriya ethtool ("ethtool -K eth0 hw-tc-offload on") ve tête çalak kirin, pişt re ew di nftables de ji bo zincîra sereke bi karanîna ala "offload" ve tê çalak kirin. Dema ku kernel Linux 5.6 bikar tînin, bilezkirina hardware ji bo berhevkirina qada sernavê û vekolîna navbeynê ya tê de digel wergirtin, avêtin, dubarekirin (dup), û şandina (fwd) pakêtan tê piştgirî kirin. Di mînaka jêrîn de, operasyonên avêtina pakêtên ku ji navnîşana 192.168.30.20 têne di asta qerta torê de têne kirin, bêyî ku pakêtan ji kernelê re derbas bikin:

    # cat file.nft
    maseya netdev x {
    zincîra y {
    type Parzûna hook ketina cîhaza eth0 pêşanî 10; flags offload;
    ip saddr 192.168.30.20 davêje
    }
    }
    # nft -f file.nft

  • Agahdariya çêtirîn di derbarê cîhê xeletiyek di rêzikan de.

    # nft rêzika ip yz jêbirin 7
    Çewtî: Nekarî qaydeyê pêvajoy bike: Dosya an pelrêçek wusa tune
    qaîdeya ip yz handle 7 jêbirin
    ^

    # nft rêzika ip xx jêbirin 7
    Çewtî: Nekarî qaydeyê pêvajoy bike: Dosya an pelrêçek wusa tune
    qaîdeya ip xx handle 7 jêbirin
    ^

    # nft tabloya twst jêbirin
    Çewtî: Pelê an pelrêça wiha tune; Mebesta te di ip-ya malbatê de "testa" tabloyê bû?
    tabloya twst jêbirin
    ^^^^

    Mînaka yekem nîşan dide ku tabloya "y" ne di pergalê de ye, ya duyemîn ku rêvekera "7" winda ye, û ya sêyemîn jî ku dema nivîsandina navê tabloyê şîretek tîpî tê xuyang kirin.

  • Piştgiriyek ji bo kontrolkirina navbeynkariya xulamê bi destnîşankirina "meta sdif" an "meta sdifname" zêde kir:

    ... meta sdifname vrf1 ...

  • Ji bo operasyonên guheztina rast an çep piştgirî zêde kir. Mînakî, ji bo veguheztina etîketek pakêtek heyî ji hêla 1 bit ve were guheztin û bit-a piçûk li 1-ê destnîşan bike:

    ... nîşana meta set meta nîşana lshift 1 an 0x1 ...

  • Vebijarka "-V" hate pêkanîn ku agahdariya guhertoya dirêjkirî nîşan bide.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:xwendin
    json: belê
    minigmp: na
    libxtables: belê

  • Vebijarkên rêzika fermanê divê nuha berî fermanan bêne diyar kirin. Mînakî, hûn hewce ne ku "nft -a rêzikên navnîşê" diyar bikin, û xebitandina "nft listeya rêzikên -a" dê bibe sedema xeletiyekê.

    Source: opennet.ru

Add a comment