nftables āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° 1.0.6 āĻ°āĻŋāĻ˛āĻŋāĻœ

āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° nftables 1.0.6 āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, IPv4, IPv6, ARP āĻāĻŦāĻ‚ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦā§āĻ°āĻŋāĻœ (iptables, ip6table, arptables āĻāĻŦāĻ‚ ebtables āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ā§‡) āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°āĻŋāĻ‚ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤ nftables āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻšāĻ˛ā§‡, āĻ¯āĻ–āĻ¨ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛-āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻ•āĻžāĻœ nf_tables āĻ¸āĻžāĻŦāĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻž 3.13 āĻĒā§āĻ°āĻ•āĻžāĻļā§‡āĻ° āĻĒāĻ° āĻĨā§‡āĻ•ā§‡ Linux āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡āĻ° āĻ…āĻ‚āĻļāĨ¤ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻ¸ā§āĻ¤āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻœā§‡āĻ¨ā§‡āĻ°āĻŋāĻ• āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛-āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻ†āĻšāĻ°āĻŖ, āĻĄā§‡āĻŸāĻž āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻŦāĻžāĻš āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻĢāĻžāĻ‚āĻļāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°āĻŋāĻ‚ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻœā§‡āĻ°āĻžāĻ‡ āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€-āĻ¸ā§āĻĒā§‡āĻ¸ āĻŦāĻžāĻ‡āĻŸāĻ•ā§‹āĻĄā§‡ āĻ¸āĻ‚āĻ•āĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻāĻ‡ āĻŦāĻžāĻ‡āĻŸāĻ•ā§‹āĻĄāĻŸāĻŋ āĻ¨ā§‡āĻŸāĻ˛āĻŋāĻ‚āĻ• āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ BPF (āĻŦāĻžāĻ°ā§āĻ•āĻ˛ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°) āĻ¸āĻĻā§ƒāĻļ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¨ā§‡āĻ˛ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°āĻŋāĻ‚ āĻ•ā§‹āĻĄā§‡āĻ° āĻ†āĻ•āĻžāĻ° āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ‚ āĻ¨āĻŋāĻ¯āĻŧāĻŽā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ•ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛ā§‡āĨ¤

āĻ…āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž:

  • В ĐžĐŋŅ‚иĐŧиСаŅ‚ĐžŅ€Đĩ ĐŋŅ€Đ°Đ˛Đ¸Đģ, вŅ‹ĐˇŅ‹Đ˛Đ°ĐĩĐŧĐžĐŧ ĐŋŅ€Đ¸ ŅƒĐēаСаĐŊии ĐžĐŋŅ†Đ¸Đ¸ ÂĢ-o/—optimizeÂģ, ĐŊĐ°ĐģĐ°ĐļĐĩĐŊĐ° авŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐĩŅĐēĐ°Ņ ŅƒĐŋĐ°ĐēОвĐēĐ° ĐŋŅ€Đ°Đ˛Đ¸Đģ Ņ‡ĐĩŅ€ĐĩС иŅ… ОйŅŠĐĩдиĐŊĐĩĐŊиĐĩ и ĐŋŅ€ĐĩОйŅ€Đ°ĐˇĐžĐ˛Đ°ĐŊиĐĩ в map- и set-ŅĐŋиŅĐēи. НаĐŋŅ€Đ¸ĐŧĐĩŅ€, ĐŋŅ€Đ°Đ˛Đ¸ĐģĐ° # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } ĐŋĐžŅĐģĐĩ вŅ‹ĐŋĐžĐģĐŊĐĩĐŊиŅ ÂĢnft -o -c -f ruleset.nftÂģ ĐąŅƒĐ´ŅƒŅ‚ ĐŋŅ€ĐĩОйŅ€Đ°ĐˇĐžĐ˛Đ°ĐŊŅ‹ в ŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Đŧ ОйŅ€Đ°ĐˇĐžĐŧ: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept into: iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
  • ОĐŋŅ‚иĐŧиСаŅ‚ĐžŅ€ Ņ‚Đ°ĐēĐļĐĩ ĐŧĐžĐļĐĩŅ‚ ĐŋŅ€ĐĩОйŅ€Đ°ĐˇĐžĐ˛Ņ‹Đ˛Đ°Ņ‚ŅŒ в йОĐģĐĩĐĩ ĐēĐžĐŧĐŋĐ°ĐēŅ‚ĐŊŅƒŅŽ Ņ„ĐžŅ€ĐŧŅƒ ĐŋŅ€Đ°Đ˛Đ¸ĐģĐ°, в ĐēĐžŅ‚ĐžŅ€Ņ‹Ņ… ŅƒĐļĐĩ иŅĐŋĐžĐģŅŒĐˇŅƒŅŽŅ‚ŅŅ ĐŋŅ€ĐžŅŅ‚Ņ‹Đĩ set-ŅĐŋиŅĐēи, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ ĐŋŅ€Đ°Đ˛Đ¸ĐģĐ°: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname ÂĢloÂģ accept ct state established,related accept comment ÂĢIn traffic we originate, we trustÂģ iifname ÂĢenp0s31f6Âģ ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname ÂĢenp0s31f6Âģ ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } ĐŋĐžŅĐģĐĩ вŅ‹ĐŋĐžĐģĐŊĐĩĐŊиŅ ÂĢnft -o -c -f ruleset.nftÂģ ĐąŅƒĐ´ŅƒŅ‚ ŅƒĐŋĐ°ĐēОваĐŊŅ‹ ŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Đŧ ОйŅ€Đ°ĐˇĐžĐŧ: ruleset.nft:6:22-149: iifname ÂĢenp0s31f6Âģ ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22-143: iifname ÂĢenp0s31f6Âģ ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept into: iifname . ip saddr . ip daddr . udp sport . udp dport { enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 32768-65535 } accept
  • Đ ĐĩŅˆĐĩĐŊĐ° ĐŋŅ€ĐžĐąĐģĐĩĐŧĐ° Ņ ĐŗĐĩĐŊĐĩŅ€Đ°Ņ†Đ¸ĐĩĐš йаКŅ‚ĐēОда Đ´ĐģŅ ŅĐģиŅĐŊиŅ иĐŊŅ‚ĐĩŅ€Đ˛Đ°ĐģОв, в ĐēĐžŅ‚ĐžŅ€Ņ‹Ņ… ĐŋŅ€Đ¸ĐŧĐĩĐŊŅŅŽŅ‚ŅŅ Ņ‚иĐŋŅ‹ Ņ Ņ€Đ°ĐˇĐŊŅ‹Đŧ ĐŋĐžŅ€ŅĐ´ĐēĐžĐŧ ŅĐģĐĩдОваĐŊиŅ йаКŅ‚Ов, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ IPv4 (ŅĐĩŅ‚ĐĩвОК ĐŋĐžŅ€ŅĐ´ĐžĐē ŅĐģĐĩдОваĐŊиŅ йаКŅ‚Ов) и meta mark (ŅĐ¸ŅŅ‚ĐĩĐŧĐŊŅ‹Đš ĐŋĐžŅ€ŅĐ´ĐžĐē ŅĐģĐĩдОваĐŊиŅ йаКŅ‚Ов). table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
  • НаĐģĐ°ĐļĐĩĐŊĐž ŅĐžĐŋĐžŅŅ‚авĐģĐĩĐŊиŅ Ņ€ĐĩĐ´ĐēиŅ… ĐŋŅ€ĐžŅ‚ĐžĐēĐžĐģОв ĐŋŅ€Đ¸ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊии raw-вŅ‹Ņ€Đ°ĐļĐĩĐŊиК, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€: meta l4proto 91 @th,400,16 0x0 accept
  • Đ ĐĩŅˆĐĩĐŊŅ‹ ĐŋŅ€ĐžĐąĐģĐĩĐŧŅ‹ Ņ вĐēĐģŅŽŅ‡ĐĩĐŊиĐĩĐŧ ĐŋŅ€Đ°Đ˛Đ¸Đģ Ņ иĐŊŅ‚ĐĩŅ€Đ˛Đ°ĐģĐ°Đŧи: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
  • ĐŖĐģŅƒŅ‡ŅˆĐĩĐŊ API JSON, в ĐēĐžŅ‚ĐžŅ€ĐžĐŧ ĐŋĐžŅĐ˛Đ¸ĐģĐ°ŅŅŒ ĐŋОддĐĩŅ€ĐļĐēĐ° вŅ‹Ņ€Đ°ĐļĐĩĐŊиК в set- и map-ŅĐŋиŅĐēĐ°Ņ….
  • В Ņ€Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊиŅŅ… Đē python-йийĐģиОŅ‚ĐĩĐēĐĩ nftables Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊĐ° СаĐŗŅ€ŅƒĐˇĐēĐ° ĐŊайОŅ€ĐžĐ˛ ĐŋŅ€Đ°Đ˛Đ¸Đģ Đ´ĐģŅ ОйŅ€Đ°ĐąĐžŅ‚Đēи в Ņ€ĐĩĐļиĐŧĐĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи (ÂĢ-cÂģ) и дОйавĐģĐĩĐŊĐ° ĐŋОддĐĩŅ€ĐļĐēĐ° вĐŊĐĩŅˆĐŊĐĩĐŗĐž ĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊиŅ ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Ņ….
  • В ŅĐģĐĩĐŧĐĩĐŊŅ‚Đ°Ņ… set-ŅĐŋиŅĐēОв Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊĐž дОйавĐģĐĩĐŊиĐĩ ĐēĐžĐŧĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸Đĩв.
  • В byte ratelimit Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊĐž ŅƒĐēаСаĐŊиŅ ĐŊŅƒĐģĐĩвОĐŗĐž СĐŊĐ°Ņ‡ĐĩĐŊиŅ.

āĻ‰āĻ¤ā§āĻ¸: opennet.ru

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨