nftables ΠΏΠ°ΠΊΠ΅Ρ‚Π΅Π½ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ вСрсия 0.9.3

ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ освобоТдаванС Π½Π° пакСтния Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ nftables 0.9.3, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΊΠ°Ρ‚ΠΎ замСститСл Π½Π° iptables, ip6table, arptables ΠΈ ebtables Ρ‡Ρ€Π΅Π· обСдиняванС Π½Π° интСрфСйси Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° IPv4, IPv6, ARP ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ мостовС. ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ nftables Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ работят Π² потрСбитСлско пространство, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π½ΠΈΠ²ΠΎ ядро ​​сС осигурява ΠΎΡ‚ подсистСмата nf_tables, която Π΅ част ΠΎΡ‚ ядрото Π½Π° Linux ΠΎΡ‚ вСрсия 3.13. ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ nftables 0.9.3, са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² прСдстоящия ΠΊΠ»ΠΎΠ½ Π½Π° ядрото Π½Π° Linux 5.5.

Нивото Π½Π° ядрото прСдоставя само ΠΎΠ±Ρ‰ интСрфСйс, нСзависим ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΊΠΎΠΉΡ‚ΠΎ осигурява основни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π‘Π°ΠΌΠ°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ спСцифичнитС Π·Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π² потрСбитСлското пространство, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° Π² ядрото с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° интСрфСйса Netlink ΠΈ сС изпълнява Π² спСциална Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина, напомняща Π½Π° BPF (Berkeley Packet Filters). Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π²ΠΈ позволява Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° филтриращия ΠΊΠΎΠ΄, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π½Π° Π½ΠΈΠ²ΠΎ ядро, ΠΈ Π΄Π° прСмСститС всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈ Π² потрСбитСлското пространство.

Основни ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° съвпадСниС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ часовС, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈ ΠΎΡ‚ Π΄Π°Ρ‚ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Ρ‰Π΅ сС задСйства, ΠΈ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ задСйстванСто Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π΄Π½ΠΈ ΠΎΡ‚ сСдмицата. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π½ΠΎΠ²Π° опция "-T" Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΅ΠΏΠΎΡ…Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π² сСкунди.

    ΠΌΠ΅Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅ \Β»2019-12-24 16:00\" β€” \Β»2020-01-02 7:00\"
    ΠΌΠ΅Ρ‚Π° час \"17:00\" - \"19:00\"
    ΠΌΠ΅Ρ‚Π° Π΄Π΅Π½ \"ΠŸΠ΅Ρ‚\"

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° SELinux ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (secmark).

    ct secmark Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚Π° secmark
    meta secmark set ct secmark

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΡΠΏΠΈΡΡŠΡ†ΠΈ с ΠΊΠ°Ρ€Ρ‚ΠΈ Π½Π° синпрокси, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄.

    Ρ‚Π°Π±Π»ΠΈΡ†Π° ip foo {
    synproxy https-synproxy {
    MSS 1460
    wscale 7
    ΠΊΠ»Π΅ΠΉΠΌΠΎ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ sack-perm
    }

    синпрокси Π΄Ρ€ΡƒΠ³-синпрокси {
    MSS 1460
    wscale 5
    }

    Π²Π΅Ρ€ΠΈΠ³Π° ΠΏΡ€Π΅Π΄ΠΈ {
    Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° prerouting ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ raw; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ°;
    tcp dport 8888 tcp Ρ„Π»Π°Π³ΠΎΠ²Π΅ syn nottrack
    }

    Π²Π΅Ρ€ΠΈΠΆΠ΅Π½ ΠΏΡ€ΡŠΡ‚ {
    Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° Π½Π°ΠΏΡ€Π΅Π΄ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅Π½ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ΅ΠΌΠ°;
    ct ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΎ, нСпрослСдСно synproxy ΠΈΠΌΠ΅ ip saddr map { 192.168.1.0/24 : β€œhttps-synproxy”, 192.168.2.0/24 : β€œother-synproxy” }
    }
    }

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ.

    nft Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ... ΠΈΠ·Ρ‚Ρ€ΠΈΠΉ @set5 { ip6 saddr. ip6 daddr}

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½Π΅ Π½Π° VLAN Ρ‡Ρ€Π΅Π· ID ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° интСрфСйса Π½Π° мрСТовия мост;

    ΠΌΠ΅Ρ‚Π° ibrpvid 100
    ΠΌΠ΅Ρ‚Π° ibrvproto vlan

  • ΠžΠΏΡ†ΠΈΡ "-t" ("--terse") Π·Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°. Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° "nft -t list ruleset" Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅:

    Ρ‚Π°Π±Π»ΠΈΡ†Π° ip x {
    Π·Π°Π΄Π°ΠΉΡ‚Π΅ y {
    Ρ‚ΠΈΠΏ ipv4_addr
    }
    }

    И с β€žnft list rulesetβ€œ

    Ρ‚Π°Π±Π»ΠΈΡ†Π° ip x {
    Π·Π°Π΄Π°ΠΉΡ‚Π΅ y {
    Ρ‚ΠΈΠΏ ipv4_addr
    Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ = {192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34 }
    }
    }

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄Π½ΠΎ устройство във Π²Π΅Ρ€ΠΈΠ³ΠΈ netdev (Ρ€Π°Π±ΠΎΡ‚ΠΈ само с ядро ​​5.5) Π·Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ‰ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅.

    Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° netdev x
    Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π²Π΅Ρ€ΠΈΠ³Π° netdev xy { \
    Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° Π²Ρ…ΠΎΠ΄Π½ΠΈ устройства = {eth0, eth1} ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 0;
    }

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° добавянС Π½Π° описания Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ.

    # nft описва ipv4_addr
    Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ ipv4_addr (IPv4 адрСс) (Π±Π°Π·ΠΎΠ² Ρ‚ΠΈΠΏ цяло число), 32 Π±ΠΈΡ‚Π°

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CLI интСрфСйс с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° linenoise вмСсто libreadline.

    ./configure --with-cli=linenoise

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€