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

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

nftables рдкреИрдХреЗрдЬ рдореЗрдВ рдкреИрдХреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдХрд░реНрдиреЗрд▓-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдп nf_tables рд╕рдмрд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд░рд┐рд▓реАрдЬрд╝ 3.13 рдХреЗ рдмрд╛рдж рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд░рд╣рд╛ рд╣реИред рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓-рд╕реНрд╡рддрдВрддреНрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреИрдХреЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ, рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░:

  • рд╕реЗрдЯ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ "*" рдорд╛рд╕реНрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕реЗрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ x { рдорд╛рдирдЪрд┐рддреНрд░ рдмреНрд▓реЙрдХрд▓рд┐рд╕реНрдЯ { рдкреНрд░рдХрд╛рд░ ipv4_addr : рдирд┐рд░реНрдгрдп рдзреНрд╡рдЬ рдЕрдВрддрд░рд╛рд▓ рддрддреНрд╡ = { 192.168.0.0/16 : рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, 10.0.0.0/8 : рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, * : рдбреНрд░реЙрдк } } рд╢реНрд░реГрдВрдЦрд▓рд╛ y { рдкреНрд░рдХрд╛рд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реБрдХ рдкреНрд░реАрд░реВрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ; рдЖрдИрдкреА тАЛтАЛтАЛтАЛрд╕рджрд░ рд╡реАрдореИрдк @рдмреНрд▓реЙрдХрд▓рд┐рд╕реНрдЯ } }
  • "--define" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред # рдХреИрдЯ рдЯреЗрд╕реНрдЯ.рдПрдирдПрдлрдЯреА рдЯреЗрдмрд▓ рдиреЗрдЯрджреЗрд╡ рдПрдХреНрд╕ { рдЪреЗрди рд╡рд╛рдИ { рдЯрд╛рдЗрдк рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдЗрдирдЧреНрд░реЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ = $ рджреЗрд╡ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ; } } # nft тАФdefine dev='{ eth0, eth1 }' -f test.nft
  • рдорд╛рдирдЪрд┐рддреНрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ, рд╕реНрдерд┐рд░ (рд╕реНрдЯреЗрдЯрдлреБрд▓) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ: рддрд╛рд▓рд┐рдХрд╛ рдЗрдиреЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ { рдореИрдк рдкреЛрд░реНрдЯрдореИрдк { рдкреНрд░рдХрд╛рд░ inet_service: рдирд┐рд░реНрдгрдп рдХрд╛рдЙрдВрдЯрд░ рддрддреНрд╡ = { 22 рдХрд╛рдЙрдВрдЯрд░ рдкреИрдХреЗрдЯ 0 рдмрд╛рдЗрдЯреНрд╕ 0: рдЬрдВрдк ssh_input, * рдХрд╛рдЙрдВрдЯрд░ рдкреИрдХреЗрдЯ 0 рдмрд╛рдЗрдЯреНрд╕ 0: рдбреНрд░реЙрдк } } рдЪреЗрди ssh_input { } рдЪреЗрди wan_input { tcp dport vmap @portmap } рдЪреЗрди рдкреНрд░реАрд░реВрдЯрд┐рдВрдЧ { рдЯрд╛рдЗрдк рдлрд┐рд▓реНрдЯрд░ рд╣реБрдХ рдкреНрд░реАрд░реВрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд░реЙ; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ; рдЖрдИрдЖрдИрдПрдл рд╡реАрдореИрдк { "рд▓реЛ": рдЬрдореНрдк wan_input } } }
  • рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреИрдХреЗрдЯ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕реВрдЪреА рд╣реБрдХ" рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛: # nft рд╕реВрдЪреА рд╣реБрдХ рдЖрдИрдкреА рдбрд┐рд╡рд╛рдЗрд╕ eth0 рдкрд░рд┐рд╡рд╛рд░ рдЖрдИрдкреА { рд╣реБрдХ рдкреНрд░рд╡реЗрд╢ { +0000000010 рд╢реНрд░реГрдВрдЦрд▓рд╛ рдиреЗрдЯрджреЗрд╡ xy [nf_tables] +0000000300 рд╢реНрд░реГрдВрдЦрд▓рд╛ inet mw [nf_tables] } рд╣реБрдХ рдЗрдирдкреБрдЯ { -0000000100 рдЪреЗрди рдЖрдИрдкреА рдПрдмреА [рдПрдирдПрдл_рдЯреЗрдмрд▓реНрд╕] +0000000300 рдЪреЗрди рдЗрдиреЗрдЯ рдПрдордЬреЗрдб [рдПрдирдПрдл_рдЯреЗрдмрд▓реНрд╕] } рд╣реБрдХ рдлреЙрд░рд╡рд░реНрдб { -0000000225 рд╕реЗрд▓рд┐рдирдХреНрд╕_рдЖрдИрдкреАрд╡реА4_рдлреЙрд░рд╡рд░реНрдб 0000000000 рдЪреЗрди рдЖрдИрдкреА рдПрд╕реА [рдПрдирдПрдл_рдЯреЗрдмрд▓реНрд╕] } рд╣реБрдХ рдЖрдЙрдЯрдкреБрдЯ { -0000000225 рд╕реЗрд▓рд┐рдирдХреНрд╕_рдЖрдИрдкреАрд╡реА4_рдЖрдЙрдЯрдкреБрдЯ } рд╣реБрдХ рдкреЛрд╕реНрдЯрд░реВрдЯрд┐рдВрдЧ { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • рдХрддрд╛рд░ рдмреНрд▓реЙрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рдкреИрдХреЗрдЯ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jhash, symhash рдФрд░ numgen рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред тАж рд╕рд┐рдореНрд╣реИрд╢ рдореЙрдб 65536 рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░тАж рдиреНрдпреВрдордЬреЗрди рдЗрдВрдХ рдореЙрдб 65536 рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдЭрдВрдбреЗ рдмрд╛рдпрдкрд╛рд╕тАж рдЭрд╛рд╢ рдУрдЖрдИрдПрдл рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ред рдореЗрдЯрд╛ рдорд╛рд░реНрдХ рдореЙрдб 32 "рдХрддрд╛рд░" рдХреЛ рдордирдорд╛рдиреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдХрддрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдЪрд┐рддреНрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ... рдХрддрд╛рд░ рдЭрдВрдбреЗ рдУрдЖрдИрдПрдлрдирд╛рдо рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • рдЙрди рдЪрд░реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рдирдореЗрдВ рдПрдХ рд╕реЗрдЯ рд╕реВрдЪреА рдХреЛ рдХрдИ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ = { eth0, eth1 } рддрд╛рд▓рд┐рдХрд╛ рдЖрдИрдкреА x { рд╢реНрд░реГрдВрдЦрд▓рд╛ y { рдкреНрд░рдХрд╛рд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реБрдХ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ; iifname vmap { lo : рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, $interfaces : рдбреНрд░реЙрдк } } } # nft -f x.nft # nft рд╕реВрдЪреА рдирд┐рдпрдо рд╕реЗрдЯ рддрд╛рд▓рд┐рдХрд╛ ip x { рд╢реНрд░реГрдВрдЦрд▓рд╛ y { рдкреНрд░рдХрд╛рд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реБрдХ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ 0; рдиреАрддрд┐ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ; iifname vmap { "рд▓реЛ": рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, "eth0": рдбреНрд░реЙрдк, "eth1": рдбреНрд░реЙрдк } } }
  • рдЕрдВрддрд░рд╛рд▓ рдкрд░ vmaps (рдирд┐рд░реНрдгрдп рдорд╛рдирдЪрд┐рддреНрд░) рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ: # nft рдирд┐рдпрдо xy tcp dport рдЬреЛрдбрд╝реЗрдВред рдЖрдИрдкреА тАЛтАЛтАЛтАЛрд╕рджрд░ рд╡реАрдореИрдк {1025-65535ред 192.168.10.2 : рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ }
  • NAT рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓реАрдХреГрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ред рдкрддрд╛ рд╕реАрдорд╛рдПрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐: ... рд╕реНрдиреИрдЯ рд╕реЗ рдЖрдИрдкреА рд╕реИрдбреНрд░ рдореИрдк {10.141.11.4 : 192.168.2.2-192.168.2.4 } рдпрд╛ рд╕реНрдкрд╖реНрдЯ рдЖрдИрдкреА рдкрддреЗ рдФрд░ рдкреЛрд░реНрдЯ: ... рдбреАрдПрдирдПрдЯ рд╕реЗ рдЖрдИрдкреА рд╕реИрдбреНрд░ рдореИрдк { 10.141.11.4 : 192.168.2.3 . 80 } рдпрд╛ рдЖрдИрдкреА рд░реЗрдВрдЬ рдФрд░ рдкреЛрд░реНрдЯ рдХрд╛ рд╕рдВрдпреЛрдЬрди: ... dnat рд╕реЗ ip saddrред рдЯреАрд╕реАрдкреА рдбреАрдкреЛрд░реНрдЯ рдорд╛рдирдЪрд┐рддреНрд░ { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ