nftables рдкреЕрдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░ 0.9.3 рд░рд┐рд▓реАрдЬ

рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреЕрдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░ рд░рд┐рд▓реАрдЭ nftables 0.9.3, IPv6, IPv4, ARP рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд░рд┐рдЬрд╕рд╛рдареА рдкреЕрдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдПрдХрддреНрд░ рдХрд░реВрди iptables, ip6table, arptables рдЖрдгрд┐ ebtables рд╕рд╛рдареА рдмрджрд▓реА рдореНрд╣рдгреВрди рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЖрд╣реЗ. nftables рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рдкреЕрдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░ рдШрдЯрдХ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд рдЬреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдЪрд╛рд▓рддрд╛рдд, рддрд░ рдХрд░реНрдирд▓-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдп nf_tables рдЙрдкрдкреНрд░рдгрд╛рд▓реАрджреНрд╡рд╛рд░реЗ рдкреБрд░рд╡рд▓реЗ рдЬрд╛рддреЗ, рдЬреЗ рд░рд┐рд▓реАрдЬ 3.13 рдкрд╛рд╕реВрди Linux рдХрд░реНрдирд▓рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ. рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА nftables 0.9.3 рдкреНрд░рдХрд╛рд╢рдирд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдмрджрд▓ рдЖрдЧрд╛рдореА Linux 5.5 рдХрд░реНрдирд▓ рд╢рд╛рдЦреЗрдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗрдд.

рдХрд░реНрдирд▓ рд╕реНрддрд░ рдлрдХреНрдд рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓-рд╕реНрд╡рддрдВрддреНрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЛ рдЬреЛ рдкреЕрдХреЗрдЯреНрд╕рдордзреВрди рдбреЗрдЯрд╛ рдХрд╛рдврдгреНрдпрд╛рд╕рд╛рдареА, рдбреЗрдЯрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдгрд╛рд╕рд╛рдареА рдореВрд▓рднреВрдд рдХрд╛рд░реНрдпреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЛ. рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ рд╕реНрд╡рддрдГ рдЖрдгрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рдБрдбрд▓рд░реНрд╕ рдпреБрдЬрд░ рд╕реНрдкреЗрд╕рдордзреАрд▓ рдмрд╛рдпрдЯреЗрдХреЛрдбрдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рддреНрдпрд╛рдирдВрддрд░ рд╣рд╛ рдмрд╛рдпрдХреЛрдб рдиреЗрдЯрд▓рд┐рдВрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд╛рдкрд░реВрди рдХрд░реНрдирд▓рдордзреНрдпреЗ рд▓реЛрдб рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ BPF (рдмрд░реНрдХрд▓реЗ рдкреЕрдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░) рдЪреА рдЖрдард╡рдг рдХрд░реВрди рджреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рдЖрднрд╛рд╕реА рдорд╢реАрдирдордзреНрдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд░реНрдирд▓ рд╕реНрддрд░рд╛рд╡рд░ рдЪрд╛рд▓рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛрдбрдЪрд╛ рдЖрдХрд╛рд░ рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЬрд╛рдЧреЗрдд рдирд┐рдпрдо рдЖрдгрд┐ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧрдЪреА рд╕рд░реНрд╡ рдХрд╛рд░реНрдпреЗ рд╣рд▓рд╡рд┐рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ.

рдореБрдЦреНрдп рдирд╡рдХрд▓реНрдкрдирд╛:

  • рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рдкреЕрдХреЗрдЯ рдЬреБрд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди. рддреБрдореНрд╣реА рд╡реЗрд│ рдЖрдгрд┐ рддрд╛рд░реАрдЦ рджреЛрдиреНрд╣реА рд╢реНрд░реЗрдгреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ рд╢рдХрддрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдирд┐рдпрдо рдЯреНрд░рд┐рдЧрд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдЖрдард╡рдбреНрдпрд╛рдЪреНрдпрд╛ рд╡реИрдпрдХреНрддрд┐рдХ рджрд┐рд╡рд╕рд╛рдВрд╡рд░ рдЯреНрд░рд┐рдЧрд░рд┐рдВрдЧ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛. рд╕реЗрдХрдВрджрд╛рдВрдордзреНрдпреЗ рдпреБрдЧрд╛рдЪрд╛ рдХрд╛рд│ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА "-T" рд╣рд╛ рдирд╡реАрди рдкрд░реНрдпрд╛рдп рджреЗрдЦреАрд▓ рдЬреЛрдбрд▓рд╛.

    рдореЗрдЯрд╛ рд╡реЗрд│ \"2019-12-24 16:00\" тАФ \"2020-01-02 7:00\"
    рдореЗрдЯрд╛ рддрд╛рд╕ \"17:00\" - \"19:00\"
    рдореЗрдЯрд╛ рдбреЗ \"рд╢реБрдХреНрд░\"

  • SELinux рдорд╛рд░реНрдХреНрд╕ (рд╕реЗрдХрдорд╛рд░реНрдХ) рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЬрддрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдерди.

    рд╕реАрдЯреА рд╕реЗрдХрдорд╛рд░реНрдХ рд╕реЗрдЯ рдореЗрдЯрд╛ рд╕реЗрдХрдорд╛рд░реНрдХ
    рдореЗрдЯрд╛ рд╕реЗрдХрдорд╛рд░реНрдХ рд╕реЗрдЯ рд╕реАрдЯреА рд╕реЗрдХрдорд╛рд░реНрдХ

  • рд╕рд┐рдВрдкреНрд░реЙрдХреНрд╕реА рдирдХрд╛рд╢рд╛ рд╕реВрдЪреАрд╕рд╛рдареА рд╕рдорд░реНрдерди, рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддрд┐ рдмреЕрдХрдПрдВрдб рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд┐рдпрдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

    рдЯреЗрдмрд▓ ip foo {
    synproxy https-synproxy {
    рдПрдордПрд╕рдПрд╕ 1460
    wscale 7
    рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк sack-perm
    }

    synproxy рдЗрддрд░-synproxy {
    рдПрдордПрд╕рдПрд╕ 1460
    wscale 5
    }

    рд╕рд╛рдЦрд│реА рдкреВрд░реНрд╡ {
    рдкреНрд░рдХрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдкреНрд░реАрд░реВрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдзрд╛рдиреНрдп рдХрдЪреНрдЪрд╛; рдзреЛрд░рдг рд╕реНрд╡реАрдХрд╛рд░рдгреЗ;
    tcp dport 8888 tcp рдзреНрд╡рдЬ syn notrack
    }

    рд╕рд╛рдЦрд│реА рдмрд╛рд░ {
    рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдлреЙрд░рд╡рд░реНрдб рдкреНрд░рд╛рдпреЙрд░рд┐рдЯреА рдлрд┐рд▓реНрдЯрд░ рдЯрд╛рдЗрдк рдХрд░рд╛; рдзреЛрд░рдг рд╕реНрд╡реАрдХрд╛рд░рдгреЗ;
    ct рд╕реНрдерд┐рддреА рдЕрд╡реИрдз, рдЕрдирдЯреНрд░реЕрдХ рдХреЗрд▓реЗрд▓реЗ рд╕рд┐рдВрдкреНрд░реЙрдХреНрд╕реА рдирд╛рд╡ ip saddr рдирдХрд╛рд╢рд╛ { 192.168.1.0/24 : тАЬhttps-synproxyтАЭ, 192.168.2.0/24 : тАЬother-synproxyтАЭ }
    }
    }

  • рдкреЕрдХреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдорд╛рдВрдордзреВрди рд╕реЗрдЯ рдШрдЯрдХ рдбрд╛рдпрдиреЕрдорд┐рдХрдкрдгреЗ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.

    nft рдЬреЛрдбрд╛ рдирд┐рдпрдо ... рд╣рдЯрд╡рд╛ @set5 { ip6 saddr . ip6 daddr}

  • рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд░рд┐рдЬ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдЯрд╛рдбреЗрдЯрд╛рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд ID рдЖрдгрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рджреНрд╡рд╛рд░реЗ VLAN рдореЕрдкрд┐рдВрдЧрд╕рд╛рдареА рд╕рдорд░реНрдерди;

    рдореЗрдЯрд╛ ibrpvid 100
    рдореЗрдЯрд╛ ibrvproto vlan

  • рдирд┐рдпрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛рдирд╛ рд╕реЗрдЯ рд╕реЗрдЯрдЪреЗ рдШрдЯрдХ рд╡рдЧрд│рдгреНрдпрд╛рд╕рд╛рдареА "-t" ("--terse") рдкрд░реНрдпрд╛рдп. "nft -t list рдирд┐рдпрдорд╕реЗрдЯ" рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рдиреЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдИрд▓:

    рдЯреЗрдмрд▓ ip x {
    рд╕реЗрдЯ y {
    ipv4_addr рдЯрд╛рдЗрдк рдХрд░рд╛
    }
    }

    рдЖрдгрд┐ "nft рд╕реВрдЪреА рдирд┐рдпрдорд╕реЗрдЯ" рд╕рд╣

    рдЯреЗрдмрд▓ ip x {
    рд╕реЗрдЯ y {
    ipv4_addr рдЯрд╛рдЗрдк рдХрд░рд╛
    рдШрдЯрдХ = { 192.168.10.2, 192.168.20.1,
    резрепреи.резремрео.рек.рек, резрепреи.резремрео.реи.рейрек }
    }
    }

  • рд╕рд╛рдорд╛рдиреНрдп рдлрд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдирд┐рдпрдо рдПрдХрддреНрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдиреЗрдЯрдбреЗрд╡реНрд╣ рдЪреЗрдирдордзреНрдпреЗ (рдХреЗрд╡рд│ рдХрд░реНрдирд▓ 5.5 рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддреЗ) рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.

    netdev x рдЯреЗрдмрд▓ рдЬреЛрдбрд╛
    рд╕рд╛рдЦрд│реА рдЬреЛрдбрд╛ netdev xy { \
    рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдЗрдирдЧреНрд░реЗрд╕ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕реЗрд╕ рдЯрд╛рдЗрдк рдХрд░рд╛ = { eth0, eth1 } рдкреНрд░рд╛рдзрд╛рдиреНрдп 0;
    }

  • рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.

    #nft ipv4_addr рдЪреЗ рд╡рд░реНрдгрди рдХрд░рд╛
    рдбреЗрдЯрд╛рдЯрд╛рдЗрдк ipv4_addr (IPv4 рдкрддреНрддрд╛) (рдмреЗрд╕рдЯрд╛рдЗрдк рдкреВрд░реНрдгрд╛рдВрдХ), 32 рдмрд┐рдЯ

  • libreadline рдРрд╡рдЬреА linenoise рд▓рд╛рдпрдмреНрд░рд░реАрд╕рд╣ CLI рдЗрдВрдЯрд░рдлреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛.

    ./configure --with-cli=linenoise

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛