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

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

nftables рдкреНрдпрд╛рдХреЗрдЬрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕рдорд╛ рдЪрд▓реНрдиреЗ рдкреНрдпрд╛рдХреЗрдЯ рдлрд┐рд▓реНрдЯрд░ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рдЬрдмрдХрд┐ рдХрд░реНрдиреЗрд▓-рд╕реНрддрд░рдХреЛ рдХрд╛рдо nf_tables рдЙрдкрдкреНрд░рдгрд╛рд▓реАрджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬреБрди 3.13 рд░рд┐рд▓реАрдЬрджреЗрдЦрд┐ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рдХреЛ рдЕрдВрд╢ рднрдПрдХреЛ рдЫред рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░рд▓реЗ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЯреЛрдХрд▓-рд╕реНрд╡рддрдиреНрддреНрд░ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рдЬрд╕рд▓реЗ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛ рдирд┐рдХрд╛рд▓реНрди, рдбрд╛рдЯрд╛ рд╕рдЮреНрдЪрд╛рд▓рдирд╣рд░реВ, рд░ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

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

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

  • "*" рдорд╛рд╕реНрдХ рддрддреНрд╡рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рд╕реЗрдЯ рд╕реВрдЪреАрд╣рд░реВрдорд╛ рдердкрд┐рдПрдХреЛ рдЫ, рдЬреБрди рд╕реЗрдЯрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреНрдп рддрддреНрд╡рд╣рд░реВ рдЕрдиреНрддрд░реНрдЧрдд рдирдкрд░реНрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЯреНрд░рд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред рддрд╛рд▓рд┐рдХрд╛ x { рдирдХреНрд╕рд╛ рдмреНрд▓рдХрд▓рд┐рд╕реНрдЯ { рдкреНрд░рдХрд╛рд░ ipv4_addr : рдирд┐рд░реНрдгрдп рдЭрдгреНрдбрд╛ рдЕрдиреНрддрд░рд╛рд▓ рддрддреНрд╡рд╣рд░реВ = { 192.168.0.0/16 : рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН , 10.0.0.0/8 : рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН , * : рдбреНрд░рдк } } рдЪреЗрди y { рдкреНрд░рдХрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдкреНрд░рд┐рд░реБрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░; ip saddr vmap @blocklist } }
  • "--define" рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдмрд╛рдЯ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред # cat test.nft рддрд╛рд▓рд┐рдХрд╛ netdev x { рдЪреЗрди y { рдкреНрд░рдХрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдкреНрд░рд╡реЗрд╢ рдЙрдкрдХрд░рдгрд╣рд░реВ = $dev рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рдЧрд┐рд░рд╛рд╡рдЯ; } } # nft тАФ define dev="{ eth0, eth1 }" -f test.nft
  • рдирдХреНрд╕рд╛ рд╕реВрдЪреАрд╣рд░реВрдорд╛, рд╕реНрдерд┐рд░ (рд╕реНрдЯреЗрдЯрдлреБрд▓) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдЫ: рддрд╛рд▓рд┐рдХрд╛ inet рдлрд┐рд▓реНрдЯрд░ { рдирдХреНрд╕рд╛ рдкреЛрд░реНрдЯрдореНрдпрд╛рдк { рдкреНрд░рдХрд╛рд░ inet_service : рдирд┐рд░реНрдгрдп рдХрд╛рдЙрдиреНрдЯрд░ рддрддреНрд╡рд╣рд░реВ = { 22 рдХрд╛рдЙрдиреНрдЯрд░ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ 0 рдмрд╛рдЗрдЯреНрд╕ 0 : рдЬрдореНрдк ssh_input, * рдХрд╛рдЙрдиреНрдЯрд░ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ 0 рдмрд╛рдЗрдЯреНрд╕ 0 : рдбреНрд░рдк } } рдЪреЗрди ssh_input { } рдЪреЗрди wan_input { tcp dport vmap @portmap } рдЪреЗрди рдкреНрд░рд┐рд░реБрдЯрд┐рдЩреН { рдкреНрд░рдХрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдкреНрд░рд┐рд░реЛрдЙрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрдЪреНрдЪрд╛; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░; iif vmap { "lo" : рдЬрдореНрдк рд╡рд╛рди_рдЗрдирдкреБрдЯ } }
  • рджрд┐рдЗрдПрдХреЛ рдкреНрдпрд╛рдХреЗрдЯ рдкрд░рд┐рд╡рд╛рд░рдХрд╛ рд▓рд╛рдЧрд┐ рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди "рд╕реВрдЪреА рд╣реБрдХрд╣рд░реВ" рдЖрджреЗрд╢ рдердкрд┐рдпреЛ: # nft рд╕реВрдЪреА рд╣реБрдХрд╣рд░реВ ip рдпрдиреНрддреНрд░ eth0 рдкрд░рд┐рд╡рд╛рд░ ip { рд╣реБрдХ рдкреНрд░рд╡реЗрд╢ { +0000000010 рдЪреЗрди рдиреЗрдЯрджреЗрд╡ xy [nf_tables] +0000000300 рдЪреЗрди inet mw [nf_tables int] { -0000000100 рдЪреЗрди ip ab [nf_tables] +0000000300 рдЪреЗрди inet mz [nf_tables] } рд╣реБрдХ рдлрд░реНрд╡рд╛рд░реНрдб { -0000000225 selinux_ipv4_forward 0000000000 рдЪреЗрди ip ac [nf_tables }0000000225_4 output] 0000000225_рдЖрдЙрдЯрдкреБрдЯ } рд╣реБрдХ рдкреЛрд╕реНрдЯрд░рд╛рдЙрдЯрд┐рдВрдЧ { +4 XNUMX selinux_ipvXNUMX_postroute } }
  • рдХрддрд╛рд░ рдмреНрд▓рдХрд╣рд░реВрд▓реЗ jhash, symhash, рд░ numgen рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕рдорд╛ рдХрддрд╛рд░рд╣рд░реВрдорд╛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рд╡рд┐рддрд░рдг рдЧрд░реНрди рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред тАж symhash рдореЛрдб 65536 рд▓рд╛рдИ рдХрддрд╛рд░ тАж numgen inc mod 65536 рд▓рд╛рдИ рдмрд╛рдЗрдкрд╛рд╕ рд▓рд╛рдо рдЭрдгреНрдбрд╛ тАж рдЭрд╛рд╢ рдУрдЗрдПрдл рд▓рд╛рдИ рд▓рд╛рдоред meta mark mod 32 "queue" рд▓рд╛рдИ рдкрдирд┐ рдирдХреНрд╕рд╛ рд╕реВрдЪреАрд╣рд░реБ рд╕рдВрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕ рдорд╛ рдПрдХ рд▓рд╛рдо рдЪрдпрди рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рд╕реНрд╡реЗрдЪреНрдЫрд╛рдЪрд╛рд░реА рдХреБрдЮреНрдЬреАрд╣рд░реБ рдорд╛ рдЖрдзрд╛рд░рд┐рддред ... рд▓рд╛рдо рдЭрдгреНрдбрд╛ oifname рдирдХреНрд╕рд╛ рдмрд╛рдЗрдкрд╛рд╕ { "eth0" : 0, "pp0" : 2, "eth1" : 2 }
  • рдзреЗрд░реИ рдирдХреНрд╕рд╛рдорд╛ рд╕реЗрдЯ рд╕реВрдЪреА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рдЪрд░рд╣рд░реВ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред рдЗрдиреНрдЯрд░рдлреЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН = { eth0, eth1 } рддрд╛рд▓рд┐рдХрд╛ ip x { рдЪреЗрди y { рдкреНрд░рдХрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░; iifname vmap { lo : рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН, $ рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВ : рдбреНрд░рдк } } } # nft -f x.nft # nft рд╕реВрдЪреА рдирд┐рдпрдо рддрд╛рд▓рд┐рдХрд╛ ip x { рдЪреЗрди y { рдЯрд╛рдЗрдк рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░; iifname vmap { "lo" : рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН, "eth0" : drop, "eth1" : drop } }
  • рдЕрдиреНрддрд░рд╛рд▓рд╣рд░реВрдорд╛ vmaps (рдирд┐рд░реНрдгрдп рдирдХреНрд╢рд╛) рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рдЫ: # nft рдирд┐рдпрдо xy tcp dport рдердкреНрдиреБрд╣реЛрд╕реНред ip saddr vmap { 1025-65535 . 192.168.10.2 : рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН }
  • NAT рдореНрдпрд╛рдкрд┐рдЩрдХрд╛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓реАрдХреГрдд рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ред рдареЗрдЧрд╛рдирд╛ рджрд╛рдпрд░рд╛рд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдЫ: ... snat to ip saddr рдирдХреНрд╢рд╛ { 10.141.11.4 : 192.168.2.2-192.168.2.4 } рд╡рд╛ рд╕реНрдкрд╖реНрдЯ IP рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рд░ рдкреЛрд░реНрдЯрд╣рд░реВ: ... dnat to ip saddr рдирдХреНрд╢рд╛ { 10.141.11.4 : ред 192.168.2.3 } рд╡рд╛ IP рджрд╛рдпрд░рд╛ рд░ рдкреЛрд░реНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдпреЛрдЬрди: ... dnat to ip saddrред tcp dport рдирдХреНрд╢рд╛ { 80 . реореж: резреж.резрекрез.резреж.реи-резреж.резрекрез.резреж.релред реореореорео-реорепрепреп }

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

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