nftables packet filter hoʻokuʻu 0.9.5

paʻi ʻia hoʻokuʻu kānana ʻeke nfttables 0.9.5, e hoʻomohala ana ma ke ʻano he pani no nā iptables, ip6table, arptables a me nā ebtables ma o ka hoʻohui ʻana i nā kānana kānana packet no IPv4, IPv6, ARP a me nā alahaka pūnaewele. Aia ka pūʻolo nftables i nā ʻāpana kānana packet e holo ana ma kahi o ka mea hoʻohana, aʻo ka hana kernel-level e hāʻawi ʻia e ka nf_tables subsystem, kahi ʻāpana o ka kernel Linux mai ka hoʻokuʻu ʻana iā 3.13. Pono nā hoʻololi no ka hoʻokuʻu ʻana o nftables 0.9.5 i ka hana i loko o ka kernel Linux 5.7.

Hāʻawi ka pae kernel i kahi kikowaena kūʻokoʻa protocol generic e hāʻawi i nā hana maʻamau no ka unuhi ʻana i ka ʻikepili mai nā ʻeke, ka hana ʻana i nā hana ʻikepili, a me ka mana kahe. Hoʻohui ʻia nā lula kānana a me nā mea hoʻohana kikoʻī protocol i ka bytecode ma kahi o ka mea hoʻohana, ma hope o ka hoʻouka ʻia ʻana o kēia bytecode i loko o ka kernel me ka hoʻohana ʻana i ka interface Netlink a hoʻokō ʻia i loko o ka kernel i kahi mīkini virtual kūikawā e hoʻomanaʻo ana i ka BPF (Berkeley Packet Filters). ʻO kēia ala e hiki ai iā ʻoe ke hōʻemi nui i ka nui o ke code kānana e holo ana ma ka pae kernel a hoʻoneʻe i nā hana āpau o nā lula parsing a me nā loiloi no ka hana ʻana me nā protocols i loko o kahi mea hoʻohana.

Nā hana hou nui:

  • Ua hoʻohui ʻia ke kākoʻo no ka pūke a me nā helu kalepa e pili ana i nā mea i hoʻonohonoho ʻia i nā pūʻulu. Hoʻohana ʻia nā helu helu me ka huaʻōlelo "counter":

    papa ip x {
    hoʻonoho y {
    typeof ip saddr
    loan
    ʻeleʻele = {192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    kaulahao z {
    ʻano kānana hook hoʻopuka kānana manaʻo; ʻae i nā kulekele;
    ip papa @y
    }
    }

  • No ka hoʻonohonoho ʻana i nā helu helu mua, no ka laʻana, e hoʻihoʻi i nā helu helu mua ma hope o ka hoʻomaka hou ʻana, hiki iā ʻoe ke hoʻohana i ke kauoha "nft -f":

    # cat rulesset.nft
    papa ip x {
    hoʻonoho y {
    typeof ip saddr
    loan
    ʻeleʻele = {192.168.10.35 pūʻolo hoʻohālikelike 1 paita 84, 192.168.10.101 \
    counter p 192.168.10.135 mau pakeke 0 byte 0 }
    }

    kaulahao z {
    ʻano kānana hook hoʻopuka kānana manaʻo; ʻae i nā kulekele;
    ip papa @y
    }
    }
    # nft -f ruleset.nft
    #nft papa helu lula
    papa ip x {
    hoʻonoho y {
    typeof ip saddr
    loan
    ʻeleʻele = {192.168.10.35 pūʻolo hoʻohālikelike 1 paita 84, 192.168.10.101 \
    counter p 192.168.10.135 mau pakeke 0 byte 0 }
    }

    kaulahao z {
    ʻano kānana hook hoʻopuka kānana manaʻo; ʻae i nā kulekele;
    ip papa @y
    }
    }

  • Ua hoʻohui pū ʻia ke kākoʻo counter i ka flowtable:

    papa ip foo {
    pahu kahe {
    ka mea nui e komo ai ka makau -100
    nā mea hana = { eth0, eth1 }
    loan
    }

    kaulahao i mua {
    ʻano kānana hook i mua kānana kānana;
    kahe e hoʻohui @bar counter
    }
    }

    Hiki iā ʻoe ke nānā i ka papa inoa o nā helu helu me ke kauoha "conntrack -L":

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packet=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 haʻuki=5201 dport=47278 pūke=8 bytes=428 [OFFLOAD] mark=0 \
    secctx=null hoʻohana=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    pūʻolo=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 haʻuki=5201 dport=47280 \
    packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null hoʻohana=2

  • I nā pūʻulu no ka concatenation (concatenation, kekahi mau pūʻulu o nā helu a me nā awa e hoʻohālikelike i ka hoʻohālikelike), hiki ke hoʻohana i ke kuhikuhi "typeof", e hoʻoholo ana i ke ʻano ʻikepili o nā mea no nā ʻāpana constituent o nā mea o ka set:

    papa ip foo {
    hoʻonohonoho i ka papa inoa keʻokeʻo {
    typeof ip saddr . tcp dport
    mau mea = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

    kaulahao kaula {
    ʻano kānana hook prerouting priority kānana; hāʻule kulekele;
    ip papa. tcp dport @whitelist e ʻae
    }
    }

  • Ua pili pū ke ʻano kuhikuhi i nā hui ʻana i nā papa inoa palapala:

    papa ip foo {
    palapala 'āina addr2mark {
    typeof ip saddr . tcp dport: hōʻailona meta
    ʻeleʻele = {192.168.10.35. 80 : 0x00000001,
    192.168.10.135. 80 : 0x00000002 }
    }

    kaulahao kaula {
    ʻano kānana hook prerouting priority kānana; hāʻule kulekele;
    hoʻonohonoho ʻia ka māka meta ip dadr . tcp dport palapala ʻāina @addr2mark e ʻae
    }
    }

  • Kākoʻo hoʻohui ʻia no ka hui pū ʻana i nā pūʻulu inoa ʻole (inoa ʻole):

    # nft hoʻohui i ka lula inet kānana hoʻokomo ip daddr. tcp dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } ae aku

  • ʻO ka hiki ke hoʻolei i nā ʻeke me nā hae 802.1q (VLAN) ke hāʻawi ʻia nā alahaka pūnaewele:

    # nft hoʻohui i ka lula alahaka foo bar ether type vlan reject me tcp reset

  • Hoʻohui ʻia ke kākoʻo no ka hoʻohālikelike ʻana e ka TCP session identifier (conntrack ID). No ka hoʻoholo ʻana i ka conntrack ID, hiki iā ʻoe ke hoʻohana i ke koho "--output id":

    # conntrack -L —output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 haʻuki=36424 dport=53 pūʻolo=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
    [ASSURED] kaha=0 hoʻohana=1 id=2779986232

    # nft hoʻohui i ka lula foo bar ct id 2779986232 counter

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka