ืžื”ื“ื•ืจืช ืžืกื ืŸ ืžื ื•ืช nftables 1.0.6

ืคื•ืจืกืžื” ืžื”ื“ื•ืจืช ืžืกื ืŸ ื”ืžื ื•ืช nftables 1.0.6, ื”ืžืื—ื“ืช ืžืžืฉืงื™ ืกื™ื ื•ืŸ ืžื ื•ืช ืขื‘ื•ืจ IPv4, IPv6, ARP ื•ื’ืฉืจื™ ืจืฉืช (ืฉืžื˜ืจืชื ืœื”ื—ืœื™ืฃ iptables, ip6table, arptables ื•-ebtables). ื—ื‘ื™ืœืช nftables ื›ื•ืœืœืช ืจื›ื™ื‘ื™ ืžืกื ืŸ ืžื ื•ืช ื”ืคื•ืขืœื™ื ื‘ื—ืœืœ ื”ืžืฉืชืžืฉ, ื‘ืขื•ื“ ืฉืจืžืช ื”ืœื™ื‘ื” ืžืกื•ืคืงืช ืขืœ ื™ื“ื™ ืชืช-ื”ืžืขืจื›ืช nf_tables, ืฉื”ื™ื™ืชื” ื—ืœืง ืžืœื™ื‘ืช ืœื™ื ื•ืงืก ืžืื– ื’ืจืกื” 3.13. ื‘ืจืžืช ื”ืงืจื ืœ, ืžืกื•ืคืง ืจืง ืžืžืฉืง ื’ื ืจื™ ื‘ืœืชื™ ืชืœื•ื™ ื‘ืคืจื•ื˜ื•ืงื•ืœ ื”ืžืกืคืง ืคื•ื ืงืฆื™ื•ืช ื‘ืกื™ืกื™ื•ืช ืœื—ื™ืœื•ืฅ ื ืชื•ื ื™ื ืžืžื ื•ืช, ื‘ื™ืฆื•ืข ืคืขื•ืœื•ืช ืขืœ ื ืชื•ื ื™ื ื•ืฉืœื™ื˜ื” ื‘ื–ืจื™ืžื”.

ื›ืœืœื™ ื”ืกื™ื ื•ืŸ ืขืฆืžื ื•ื”ืžื˜ืคืœื™ื ื”ืกืคืฆื™ืคื™ื™ื ืœืคืจื•ื˜ื•ืงื•ืœ ืžื•ืจื›ื‘ื™ื ืœืชื•ืš bytecode ืฉืœ ืžืจื—ื‘ ื”ืžืฉืชืžืฉ, ื•ืœืื—ืจ ืžื›ืŸ ืงื•ื“ ื‘ื™ืช ื–ื” ื ื˜ืขืŸ ืœืชื•ืš ื”ืœื™ื‘ื” ื‘ืืžืฆืขื•ืช ืžืžืฉืง Netlink ื•ืžื‘ื•ืฆืข ื‘ืงืจื ืœ ื‘ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืžื™ื•ื—ื“ืช ื”ื“ื•ืžื” ืœ-BPF (Berkeley Packet Filters). ื’ื™ืฉื” ื–ื• ืžืืคืฉืจืช ืœื”ืงื˜ื™ืŸ ืžืฉืžืขื•ืชื™ืช ืืช ื’ื•ื“ืœ ืงื•ื“ ื”ืกื™ื ื•ืŸ ื”ืคื•ืขืœ ื‘ืจืžืช ื”ืงืจื ืœ ื•ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ื—ื•ืงื™ ื”ื ื™ืชื•ื— ื•ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ืขื‘ื•ื“ื” ืขื ืคืจื•ื˜ื•ืงื•ืœื™ื ืœืžืจื—ื‘ ื”ืžืฉืชืžืฉ.

ืฉื™ื ื•ื™ื™ื ืขื™ืงืจื™ื™ื:

  • ื‘ืื•ืคื˜ื™ืžื™ื–ืฆื™ื™ืช ื”ื›ืœืœื™ื ื”ื ืงืจืืช ื‘ืขืช ืฆื™ื•ืŸ ื”ืืคืฉืจื•ืช "-o/--optimize", ื”ื•ื’ื“ืจื” ืืจื™ื–ื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ื›ืœืœื™ื ืขืœ ื™ื“ื™ ืฉื™ืœื•ื‘ื ื•ื”ืžืจืชื ืœืจืฉื™ืžื•ืช ืžืคื•ืช ื•-ืกื˜. ืœื“ื•ื’ืžื”, ื”ื›ืœืœื™ื ื”ื # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; ื™ืจื™ื“ืช ืžื“ื™ื ื™ื•ืช; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 ืงื‘ืœ meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 ืงื‘ืœ meta iifname eth1 ip saddr 1.1.1.2 ip ืกืddr 2.2.3.0 ืงื‘ืœ ืขื. 24 .1 ip daddr 1.1.1.2-2.2.4.0 accept meta iifname eth2.2.4.10 ip saddr 2 ip daddr 1.1.1.3 accept } } ืœืื—ืจ "nft -o -c -f ruleset.nft" ื™ื•ืžืจ ืœืกื˜ ื”ื‘ื: ื—ื•ืงื™ื. nft:2.2.2.5:4-17: meta iifname eth74 ip saddr 1 ip daddr 1.1.1.1 accept ruleset.nft:2.2.2.3:5-17: meta iifname eth74 ip saddr 1 ip daddr 1.1.1.2.nft: accept ruleset 2.2.2.4:6-17: meta iifname eth77 ip saddr 1 ip daddr 1.1.1.2/2.2.3.0 accept ruleset.nft:24:7-17: meta iifname eth83 ip saddr 1 ip daddr 1.1.1.2-2.2.4.0. accept ruleset.nft:2.2.4.10:8-17: meta iifname eth74 ip saddr 2 ip daddr 1.1.1.3 accept into: iifname . ip saddr . ip daddr { eth2.2.2.5. 1. 1.1.1.1, eth2.2.2.3 . 1. 1.1.1.2, eth2.2.2.4 . 1. 1.1.1.2/2.2.3.0, eth24 . 1. 1.1.1.2-2.2.4.0, eth2.2.4.10 . 2. 1.1.1.3 } ืงื‘ืœ
  • ื›ืœื™ ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื™ื›ื•ืœ ื’ื ืœืจื›ื– ื›ืœืœื™ื ืฉื›ื‘ืจ ืžืฉืชืžืฉื™ื ื‘-setlists ืคืฉื•ื˜ื™ื ืœืฆื•ืจื” ืงื•ืžืคืงื˜ื™ืช ื™ื•ืชืจ, ื›ื’ื•ืŸ: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; ื™ืจื™ื“ืช ืžื“ื™ื ื™ื•ืช; iifname "lo" accept ct state fixed,related accept comment "In traffic we origin, we trust" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp32768 iifname "enp65535s0f31" ip saddr { 6, 64.59.144.17} ip daddr 64.59.150.133 udp sport 10.0.0.149 udp dport 53-32768 ืงื‘ืœ } } ืœืื—ืจ ื”ืคืขืœืช "c-ft" ื—ื‘ื™ืœื” ื–ื• - ft ื™ื”ื™ื” like this : ruleset.nft:65535:6-22: iifname "enp149s0f31" ip saddr { 6, 209.115.181.102 } ip daddr 216.197.228.230 udp sport 10.0.0.149 dnft.123 ืงื‘ืœ ื—ื•ืงื™ื 32768 dnft.65535 7 22 : iifname "enp143s0f31" ip saddr { 6, 64.59.144.17 } ip daddr 64.59.150.133 udp sport 10.0.0.149 udp dport 53-32768 accept into: iifname. ip saddr . ip daddr . udp ืกืคื•ืจื˜. udp dport {enp65535s0f31. 6 . 209.115.181.102 . 10.0.0.149 . 123-32768, enp65535s0f31 . 6 . 216.197.228.230 . 10.0.0.149 . 123-32768, enp65535s0f31 . 6. 64.59.144.17 . 10.0.0.149 . 53-32768, enp65535s0f31 . 6. 64.59.150.133 . 10.0.0.149 . 53-32768 } ืงื‘ืœ
  • ืคืชืจ ื‘ืขื™ื” ืขื ื™ืฆื™ืจืช ืงื•ื“ ื‘ืชื™ื ืœืžื™ื–ื•ื’ ืžืจื•ื•ื—ื™ื ื”ืžืฉืชืžืฉื™ื ื‘ืกื•ื’ื™ื ื‘ืขืœื™ ืงืฆื” ืฉื•ื ื”, ื›ื’ื•ืŸ IPv4 (ืื ื“ื™ืืŸ ืจืฉืช) ื•ืžื˜ื ืกื™ืžืŸ (ืื ื“ื™ืืŸ ืžืขืจื›ืช). table ip x { map w { typeof ip saddr . ืžื˜ื ืกื™ืžืŸ: ืจื›ื™ื‘ื™ ืžื•ื ื” ืžืจื•ื•ื—ื™ ืคืกืง ื“ื™ืŸ ืžื“ื’ื™ื = {127.0.0.1-127.0.0.4. 0x123434-0xb00122 : ืงื‘ืœ, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; ื™ืจื™ื“ืช ืžื“ื™ื ื™ื•ืช; ip saddr. ืžื˜ื ืกื™ืžืŸ vmap @w } }
  • ืžื™ืคื•ื™ื™ ืคืจื•ื˜ื•ืงื•ืœ ื ื“ื™ืจื™ื ืžืฉื•ืคืจื™ื ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ื‘ื™ื˜ื•ื™ื™ื ื’ื•ืœืžื™ื™ื, ืœื“ื•ื’ืžื”: meta l4proto 91 @th,400,16 0x0 accept
  • ืชื™ืงื ื• ื‘ืขื™ื•ืช ืขื ื”ืคืขืœืช ื›ืœืœื™ื ื‘ืžืจื•ื•ื—ื™ื: ื”ื•ืกืฃ ื›ืœืœ xy tcp sport { 3478-3497, 16384-16387 } counter accept
  • ื”-API ืฉืœ JSON ืฉื•ืคืจ ื›ื“ื™ ืœืชืžื•ืš ื‘ื‘ื™ื˜ื•ื™ื™ื ื‘ืจืฉื™ืžื•ืช ืกื˜ ื•ืžืคื•ืช.
  • ื‘ื”ืจื—ื‘ื•ืช ืœืกืคืจื™ื™ืช nftables python, ืžื•ืชืจ ืœื˜ืขื•ืŸ ืขืจื›ื•ืช ื›ืœืœื™ื ืœืขื™ื‘ื•ื“ ื‘ืžืฆื‘ ืฆ'ืง ("-c") ื•ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื”ื’ื“ืจืช ืžืฉืชื ื” ื—ื™ืฆื•ื ื™.
  • ื”ื•ืกืคืช ื”ืขืจื•ืช ืžื•ืชืจืช ื‘ืืœืžื ื˜ื™ื ืฉืœ ืกื˜-ืœื™ืกื˜ื™ื.
  • ืžื•ืชืจ ืœืฆื™ื™ืŸ ืขืจืš ืืคืก ื‘-byte ratelimit.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”