ИзданиС Π½Π° пакСтния Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ nftables 0.9.3

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

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

Основни нововъвСдСния:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° опрСдСлянС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅. МоТС Π΄Π° сС Π·Π°Π΄Π°Π΄Π°Ρ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π΄Π°Ρ‚ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Ρ‰Π΅ Π²Π»Π΅Π·Π΅ Π² сила, ΠΈ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π΄Π½ΠΈ ΠΎΡ‚ сСдмицата. Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΈ Π½ΠΎΠ²Π° опция β€ž-Tβ€œ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΅ΠΏΠΎΡ…Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π² сСкунди.

    meta time \Β»2019-12-24 16:00\Β» β€” \Β»2020-01-02 7:00\Β»
    meta hour \Β»17:00\Β» β€” \Β»19:00\Β»
    meta day \Β»Fri\Β»

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

    ct secmark set meta secmark
    meta secmark set ct secmark

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

    table ip foo {
    synproxy https-synproxy {
    mss 1460
    wscale 7
    timestamp sack-perm
    }

    synproxy other-synproxy {
    mss 1460
    wscale 5
    }

    chain pre {
    Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ raw; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° accept;
    tcp dport 8888 tcp Ρ„Π»Π°Π³ΠΎΠ²Π΅ syn notrack
    }

    chain bar {
    Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€ ΠΊΡƒΠΊΠ° Π½Π°ΠΏΡ€Π΅Π΄ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Ρ„ΠΈΠ»Ρ‚ΡŠΡ€; ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° accept;
    ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : Β«https-synproxyΒ», 192.168.2.0/24 : Β«other-synproxyΒ» }
    }
    }

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

    nft add rule … delete @set5 { ip6 saddr . ip6 daddr }

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

    meta ibrpvid 100
    meta ibrvproto vlan

  • ΠžΠΏΡ†ΠΈΡΡ‚Π° β€ž-tβ€œ (β€žβ€”terseβ€œ) Π·Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ΠΈ set ΠΏΡ€ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°. ΠŸΡ€ΠΈ изпълнСниС Π½Π° β€žnft -t list rulesetβ€œ Ρ‰Π΅ бъдС ΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ:

    Ρ‚Π°Π±Π»ΠΈΡ†Π° ip x {
    set y {
    type ipv4_addr
    }
    }

    А ΠΏΡ€ΠΈ β€žnft list rulesetβ€œ

    Ρ‚Π°Π±Π»ΠΈΡ†Π° ip x {
    set y {
    type ipv4_addr
    elements = { 192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34 }
    }
    }

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° посочванС Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π΅Π΄Π½ΠΎ устройство Π² Π²Π΅Ρ€ΠΈΠ³ΠΈ netdev (Ρ€Π°Π±ΠΎΡ‚ΠΈ само с ядро 5.5) Π·Π° обСдиняванС Π½Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅.

    add table netdev x
    add chain netdev x y { \
    type filter hook ingress devices = { eth0, eth1 } priority 0;
    }

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

    # nft describe ipv4_addr
    datatype ipv4_addr (IPv4 address) (basetype integer), 32 bits

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

    ./configure β€”with-cli=linenoise

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster