nftables փաթեթային ֆիլտր 1.0.0 թողարկում

Հրապարակվել է փաթեթային ֆիլտրի nftables 1.0.0 թողարկումը, որը միավորում է փաթեթների զտման միջերեսները IPv4, IPv6, ARP և ցանցային կամուրջների համար (նպատակված է փոխարինել iptables, ip6table, arptables և ebtables): Nftables 1.0.0 թողարկման համար անհրաժեշտ փոփոխությունները ներառված են Linux 5.13 միջուկում: Տարբերակի համարի զգալի փոփոխությունը կապված չէ որևէ հիմնարար փոփոխության հետ, այլ միայն տասնորդական նշումով համարակալման հետևողական շարունակության հետևանք է (նախորդ թողարկումը 0.9.9 էր):

Nftables փաթեթը ներառում է փաթեթի զտիչ բաղադրիչներ, որոնք աշխատում են օգտագործողի տարածքում, մինչդեռ միջուկի մակարդակի աշխատանքը տրամադրվում է nf_tables ենթահամակարգի կողմից, որը Linux միջուկի մաս է կազմում 3.13-ի թողարկումից ի վեր: Միջուկի մակարդակը ապահովում է միայն ընդհանուր պրոտոկոլից անկախ ինտերֆեյս, որն ապահովում է հիմնական գործառույթները փաթեթներից տվյալներ հանելու, տվյալների գործողություններ կատարելու և հոսքի վերահսկման համար:

Ինքնին զտման կանոնները և պրոտոկոլի հատուկ մշակիչները կազմվում են օգտագործողի տարածության բայթկոդի մեջ, որից հետո այս բայթկոդը բեռնվում է միջուկում՝ օգտագործելով Netlink ինտերֆեյսը և գործարկվում միջուկում հատուկ վիրտուալ մեքենայի մեջ, որը նման է BPF-ին (Berkeley Packet Filters): Այս մոտեցումը հնարավորություն է տալիս զգալիորեն նվազեցնել միջուկի մակարդակով աշխատող զտիչ կոդի չափը և վերլուծության կանոնների բոլոր գործառույթները և արձանագրությունների հետ աշխատելու տրամաբանությունը տեղափոխել օգտվողի տարածք:

Հիմնական նորամուծությունները.

  • «*» դիմակ տարրի աջակցությունն ավելացվել է հավաքածուների ցուցակներում, որը գործարկվում է ցանկացած փաթեթի համար, որը չի մտնում հավաքածուում սահմանված այլ տարրերի տակ: աղյուսակ x { map blocklist { type ipv4_addr : verdict flags interval elements = {192.168.0.0/16 :ընդունել, 10.0.0.0/8 :ընդունել, * : drop } } chain y {typ filter hook prerouting priority 0; քաղաքականության ընդունում; ip saddr vmap @blocklist } }
  • Հնարավոր է փոփոխականներ սահմանել հրամանի տողից՝ օգտագործելով «--սահմանել» տարբերակը: # cat test.nft սեղան netdev x { chain y { type filter hook ingress devices = $dev priority 0; քաղաքականության անկում; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Քարտեզների ցուցակներում թույլատրվում է հաստատուն (stateful) արտահայտությունների օգտագործումը՝ table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input {} chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; քաղաքականության ընդունում; iif vmap { "lo" : jump wan_input } } }
  • Ավելացվեց «list hooks» հրամանը՝ տվյալ փաթեթների ընտանիքի համար մշակողների ցուցակը ցուցադրելու համար. { -0 chain ip ab [nf_tables] +0000000010 chain inet mz [nf_tables] } hook forward { -0000000300 selinux_ipv0000000100_forward 0000000300 chain ip 0000000225 chain ip 4 chain ip 0000000000 -0000000225. _ipv4_output } hook postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Հերթի բլոկները թույլ են տալիս jhash, symhash և numgen արտահայտությունները համատեղել՝ փաթեթները բաժանելու համար օգտագործողի տարածքում գտնվող հերթերին: … հերթ դեպի symhash mod 65536 … հերթում դրոշները շրջանցում են numgen inc mod 65536 … հերթ դեպի jhash oif: meta mark mod 32 «հերթը» կարող է նաև համակցվել քարտեզների ցուցակների հետ՝ կամայական ստեղների հիման վրա օգտագործողի տարածքում հերթ ընտրելու համար: ... հերթում դրոշակները շրջանցում են oifname քարտեզին { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Հնարավոր է ընդլայնել փոփոխականները, որոնք ներառում են մի շարք քարտեզներ: սահմանել միջերեսներ = {eth0, eth1 } աղյուսակ ip x {chain y {type filter hook input priority 0; քաղաքականության ընդունում; iifname vmap { lo : ընդունել, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 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 map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } կամ բացահայտ IP հասցեներ և նավահանգիստներ՝ ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3-80 } կամ հստակ IP հասցեներ և նավահանգիստներ. . 192.168.1.2 } կամ IP միջակայքերի և նավահանգիստների համակցություններ՝ ... dnat to ip saddr . tcp dport քարտեզ {80. 10.141.10.2՝ 10.141.10.5-8888. 8999-XNUMX }

Source: opennet.ru

Добавить комментарий