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

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

рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░рд▓реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЯреЛрдХрд▓-рд╕реНрд╡рддрдиреНрддреНрд░ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛ рдирд┐рдХрд╛рд▓реНрди, рдбрд╛рдЯрд╛ рд╕рдЮреНрдЪрд╛рд▓рдирд╣рд░реВ, рд░ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдлрд┐рд▓реНрдЯрд░рд┐рдЩ рддрд░реНрдХ рдЖрдлреИ рд░ рдкреНрд░реЛрдЯреЛрдХрд▓-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕рдорд╛ рдмрд╛рдЗрдЯрдХреЛрдбрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рд╣реБрдиреНрдЫрдиреН, рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рдмрд╛рдЗрдЯрдХреЛрдб рдиреЗрдЯрд▓рд┐рдЩреНрдХ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд░реНрдиреЗрд▓рдорд╛ рд▓реЛрдб рд╣реБрдиреНрдЫ рд░ BPF (рдмрд░реНрдХрд▓реЗ рдкреНрдпрд╛рдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ) рдХреЛ рд╕рдореНрдЭрдирд╛ рдЧрд░рд╛рдЙрдиреЗ рд╡рд┐рд╢реЗрд╖ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫред рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░рдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдлрд┐рд▓реНрдЯрд░рд┐рдЩ рдХреЛрдбрдХреЛ рд╕рд╛рдЗрдЬ рдШрдЯрд╛рдЙрди рд░ рдкреНрд░реЛрдЯреЛрдХрд▓рд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕рдорд╛ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкрд╛рд░реНрд╕рд┐рдЩ рдирд┐рдпрдо рд░ рддрд░реНрдХрдХрд╛ рд╕рдмреИ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рд╛рд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рдореБрдЦреНрдп рдЖрд╡рд┐рд╖реНрдХрд╛рд░рд╣рд░реВ:

  • рд╕рдордп рдЕрдиреБрд╕рд╛рд░ рдорд┐рд▓реНрджреЛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред рддрдкрд╛рдИрд▓реЗ рд╕рдордп рд░ рдорд┐рддрд┐ рджрд╛рдпрд░рд╛ рджреБрдмреИ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕рдорд╛ рдирд┐рдпрдо рдЯреНрд░рд┐рдЧрд░ рд╣реБрдиреЗрдЫ, рд░ рд╣рдкреНрддрд╛рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рджрд┐рдирд╣рд░реВрдорд╛ рдЯреНрд░рд┐рдЧрд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╕рд╛рдереИ рдирдпрд╛рдБ рд╡рд┐рдХрд▓реНрдк "-T" рд╕реЗрдХреЗрдиреНрдбрдорд╛ epochal рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдердкрд┐рдпреЛред

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

  • SELinux рдорд╛рд░реНрдХрд╣рд░реВ (рд╕реЗрдХрдорд╛рд░реНрдХ) рд░рд┐рдХрднрд░ рдЧрд░реНрди рд░ рдмрдЪрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдердиред

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

  • рд╕рд┐рдиреНрдкреНрд░реЛрдХреНрд╕реА рдирдХреНрд╕рд╛ рд╕реВрдЪреАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рддрд┐ рдмреНрдпрд╛рдХрдЗрдиреНрдб рдПрдХ рднрдиреНрджрд╛ рдмрдвреА рдирд┐рдпрдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдБрджреИред

    рддрд╛рд▓рд┐рдХрд╛ ip foo {
    synproxy https-synproxy {
    mss реи
    wscale 7
    рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк sack-perm
    }

    synproxy other-synproxy {
    mss реи
    wscale 5
    }

    рдЪреЗрди рдкреВрд░реНрд╡ {
    рдкреНрд░рдХрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ prerouting рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрдЪреНрдЪрд╛; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░;
    tcp dport 8888 tcp рдЭрдгреНрдбрд╛ syn notrack
    }

    рдЪреЗрди рдмрд╛рд░ {
    рдЯрд╛рдЗрдк рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдЕрдЧрд╛рдбрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдлрд┐рд▓реНрдЯрд░; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░;
    ct рд╕реНрдерд┐рддрд┐ рдЕрдорд╛рдиреНрдп, рдЕрдирдЯреНрд░реНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рд╕рд┐рдиреНрдкреНрд░реЛрдХреНрд╕реА рдирд╛рдо ip saddr рдирдХреНрд╢рд╛ { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "рдЕрдиреНрдп-рд╕рд┐рдиреНрдкреНрд░реЛрдХреНрд╕реА" }
    }
    }

  • рдкреНрдпрд╛рдХреЗрдЯ рдкреНрд░рд╢реЛрдзрди рдирд┐рдпрдорд╣рд░реВрдмрд╛рдЯ рд╕реЗрдЯ рддрддреНрд╡рд╣рд░реВрд▓рд╛рдИ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рд╣рдЯрд╛рдЙрдиреЗ рдХреНрд╖рдорддрд╛ред

    nft рдирд┐рдпрдо рдердкреНрдиреБрд╣реЛрд╕реН ... @set5 { ip6 saddr рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реНред ip6 daddr}

  • рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд░рд┐рдЬ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдореЗрдЯрд╛рдбреЗрдЯрд╛рдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд ID рд░ рдкреНрд░реЛрдЯреЛрдХрд▓ рджреНрд╡рд╛рд░рд╛ VLAN рдореНрдпрд╛рдкрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди;

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

  • рд╡рд┐рдХрд▓реНрдк "-t" ("--terse") рдирд┐рдпрдорд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрд╛ рд╕реЗрдЯ рд╕реЗрдЯрдХрд╛ рддрддреНрд╡рд╣рд░реВ рдмрд╣рд┐рд╖реНрдХрд╛рд░ рдЧрд░реНрдиред "nft -t list ruleset" рдЪрд▓рд╛рдЙрдБрджрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реБрдиреЗрдЫ:

    рддрд╛рд▓рд┐рдХрд╛ ip x {
    рд╕реЗрдЯ y {
    ipv4_addr рдЯрд╛рдЗрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН
    }
    }

    рд░ "nft рд╕реВрдЪреА рдирд┐рдпрдорд╣рд░реВ" рд╕рдВрдЧ

    рддрд╛рд▓рд┐рдХрд╛ ip x {
    рд╕реЗрдЯ y {
    ipv4_addr рдЯрд╛рдЗрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН
    рддрддреНрд╡ = {192.168.10.2, 192.168.20.1,
    резрепреи.резремрео.рек.рек, резрепреи.резремрео.реи.рейрек }
    }
    }

  • рд╕рд╛рдорд╛рдиреНрдп рдлрд┐рд▓реНрдЯрд░рд┐рдЩ рдирд┐рдпрдорд╣рд░реВ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди netdev рдЪреЗрдирд╣рд░реВрдорд╛ рдПрдХ рднрдиреНрджрд╛ рдмрдвреА рдпрдиреНрддреНрд░рд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ (рдХрд░реНрдиреЗрд▓ 5.5 рд╕рдБрдЧ рдорд╛рддреНрд░ рдХрд╛рдо рдЧрд░реНрджрдЫ)ред

    рддрд╛рд▓рд┐рдХрд╛ netdev x рдердкреНрдиреБрд╣реЛрд╕реН
    рдЪреЗрди рдердкреНрдиреБрд╣реЛрд╕реН netdev xy { \
    рдкреНрд░рдХрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдкреНрд░рд╡реЗрд╢ рдпрдиреНрддреНрд░рд╣рд░реВ = {eth0, eth1 } рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0;
    }

  • рдбрд╛рдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд┐рд╡рд░рдг рдердкреНрди рдХреНрд╖рдорддрд╛ред

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

  • libreadline рдХреЛ рд╕рдЯреНрдЯрд╛ linenoise рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдЧ CLI рдЗрдиреНрдЯрд░рдлреЗрд╕ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ред

    ./configure --with-cli=linenoise

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди