āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° 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