nftables packet filter 1.0.0 ထွက်ရှိသည်။

packet filter nftables 1.0.0 ကိုထုတ်ဝေပြီး IPv4၊ IPv6၊ ARP နှင့် network bridges (iptables၊ ip6table၊ arptables နှင့် ebtables) များအတွက် packet filtering interfaces များကို ပေါင်းစည်းပြီး ထုတ်ဝေလိုက်ပါပြီ။ အလုပ်လုပ်ရန်အတွက် nftables 1.0.0 ထွက်ရှိမှုအတွက် လိုအပ်သောပြောင်းလဲမှုများသည် Linux 5.13 kernel တွင်ပါဝင်သည်။ ဗားရှင်းနံပါတ်၏ သိသာထင်ရှားသောပြောင်းလဲမှုသည် မည်သည့်အခြေခံပြောင်းလဲမှုများနှင့်မဆို ဆက်စပ်မှုမရှိသော်လည်း ဒဿမအမှတ်သင်္ကေတတွင် နံပါတ်စဉ်ဆက်သွားခြင်း၏ အကျိုးဆက်တစ်ခုသာဖြစ်သည် (ယခင်ထုတ်လွှတ်မှုသည် 0.9.9)။

nftables ပက်ကေ့ဂျ်တွင် အသုံးပြုသူနေရာလွတ်တွင် လည်ပတ်နေသော ပက်ကက်စစ်ထုတ်သည့် အစိတ်အပိုင်းများ ပါ၀င်ပြီး kernel-level အလုပ်ကို 3.13 ကတည်းက Linux kernel ၏ တစ်စိတ်တစ်ပိုင်းဖြစ်သည့် nf_tables ခွဲစနစ်က ပံ့ပိုးပေးထားသည်။ kernel အဆင့်သည် ပက်ကတ်များမှ ဒေတာထုတ်ယူရန်၊ ဒေတာလည်ပတ်မှုနှင့် စီးဆင်းမှုထိန်းချုပ်မှုအတွက် အခြေခံလုပ်ဆောင်ချက်များကို ပံ့ပိုးပေးသည့် ယေဘူယျပရိုတိုကော-အမှီအခိုကင်းသော အင်တာဖေ့စ်ကို ထောက်ပံ့ပေးသည်။

စစ်ထုတ်ခြင်းဆိုင်ရာ စည်းမျဉ်းများနှင့် ပရိုတိုကော-သီးသန့် ကိုင်တွယ်သူများကို အသုံးပြုသူနေရာရှိ ဘိုက်ကုဒ်အဖြစ် စုစည်းထားပြီး၊ ထို့နောက်တွင် ဤ bytecode ကို Netlink မျက်နှာပြင်ကို အသုံးပြု၍ kernel ထဲသို့ တင်ကာ BPF (Berkeley Packet Filters) ကို အမှတ်ရသည့် အထူး virtual machine တွင် kernel တွင် လုပ်ဆောင်သည်။ ဤချဉ်းကပ်မှုသည် kernel အဆင့်တွင် လုပ်ဆောင်နေသော စစ်ထုတ်ကုဒ်၏ အရွယ်အစားကို သိသာထင်ရှားစွာ လျှော့ချနိုင်ပြီး ပရိုတိုကောများနှင့် လုပ်ဆောင်ရန်အတွက် အသုံးပြုသူနေရာသို့ ခွဲခြမ်းစိတ်ဖြာခြင်းဆိုင်ရာ စည်းမျဉ်းများနှင့် ယုတ္တိဗေဒဆိုင်ရာ လုပ်ငန်းဆောင်တာအားလုံးကို ရွှေ့နိုင်စေပါသည်။

အဓိက တီထွင်ဆန်းသစ်မှုများ-

  • "*" မျက်နှာဖုံးဒြပ်စင်အတွက် ပံ့ပိုးမှုအား သတ်မှတ်စာရင်းများတွင် ပေါင်းထည့်ထားပြီး၊ ၎င်းသည် set တွင် သတ်မှတ်ထားသော အခြားဒြပ်စင်များအောက်တွင် မကျရောက်သော မည်သည့်ပက်ကေ့ဂျ်များအတွက် အစပျိုးထားသည်။ ဇယား x { မြေပုံပိတ်ဆို့စာရင်း { အမျိုးအစား ipv4_addr : စီရင်ချက် အလံများ ကြားကာလ အစိတ်အပိုင်းများ = { 192.168.0.0/16 : လက်ခံ၊ 10.0.0.0/8 : လက်ခံ၊ * : drop } } ကွင်းဆက် y { အမျိုးအစား စစ်ထုတ်မှု ချိတ်ဆက်ခြင်း ဦးစားပေး 0; မူဝါဒလက်ခံ; ip saddr vmap @blocklist } }
  • "--define" option ကိုအသုံးပြု၍ command line မှ variable များကိုသတ်မှတ်ရန်ဖြစ်နိုင်သည်။ # cat test.nft ဇယား netdev x { ကွင်းဆက် y { type filter ချိတ် ingress devices = $dev ဦးစားပေး 0; မူဝါဒကျဆင်းခြင်း၊ } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • မြေပုံစာရင်းများတွင် စဉ်ဆက်မပြတ် (stateful) အသုံးအနှုန်းများကို အသုံးပြုခြင်းကို ခွင့်ပြုသည်- ဇယား inet filter { map portmap { type inet_service : စီရင်ချက် တန်ပြန်ဒြပ်စင်များ = { 22 တန်ပြန်ပက်ကတ်များ 0 bytes 0 : jump ssh_input ၊ * တန်ပြန်ပက်ကတ်များ 0 bytes 0 : drop } } ကွင်းဆက် ssh_input { } ကွင်းဆက် wan_input { tcp dport vmap @portmap } ကွင်းဆက် prerouting { type filter hook prerouting prerouting raw; မူဝါဒလက်ခံ; iif vmap { "lo" : jump wan_input } } }
  • ပေးထားသော ပက်ကတ်မိသားစုအတွက် ကိုင်တွယ်သူစာရင်းကိုပြသရန် "စာရင်းချိတ်" အမိန့်ကို ပေါင်းထည့်ထားသည်- # nft စာရင်းချိတ် ip စက် eth0 မိသားစု ip { ချိတ်ဝင်ခြင်း { +0000000010 ကွင်းဆက် netdev xy [nf_tables] +0000000300 ကွင်းဆက် inet mw [nf_tables ထည့်သွင်းမှု] } { -0000000100 ကွင်းဆက် ip ab [nf_tables] +0000000300 ကွင်းဆက် inet mz [nf_tables] } ရှေ့သို့ ချိတ်ပါ { -0000000225 selinux_ipv4_forward 0000000000 ကွင်းဆက် ip ac [nf_table 0000000225] အထွက် 4_0000000225 ipv4_output } postrouting ချိတ် { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
  • Queue blocks များသည် jhash၊ symhash နှင့် numgen အသုံးအနှုန်းများကို အသုံးပြုသူနေရာရှိ တန်းစီရန် packet များကို ဖြန့်ဝေရန်အတွက် ပေါင်းစပ်ခွင့်ပြုသည်။ … symhash mod 65536 သို့ တန်းစီနေသည် … တန်းစီခြင်းအလံများသည် numgen inc mod 65536 သို့ ကျော်သွားသည် … jhash oif သို့ တန်းစီသည်။ meta mark mod 32 "Queue" သည် မတရားသော့များကို အခြေခံ၍ အသုံးပြုသူနေရာရှိ တန်းစီခြင်းကို ရွေးချယ်ရန်အတွက် မြေပုံစာရင်းများနှင့်လည်း ပေါင်းစပ်နိုင်သည်။ ... တန်းစီအလံများသည် oifname map { "eth0" : 0၊ "ppp0" : 2၊ "eth1" : 2 }
  • သတ်မှတ်စာရင်းတစ်ခုပါ၀င်သော ကိန်းရှင်များကို မြေပုံများစွာတွင် ချဲ့ထွင်နိုင်သည်။ define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; မူဝါဒလက်ခံ; iifname vmap { lo : accept, $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 မြေပုံဆွဲခြင်းများအတွက် ရိုးရှင်းသော syntax လိပ်စာအပိုင်းအခြားများကို သတ်မှတ်ခွင့်ပြုသည်- ... snat မှ ip saddr မြေပုံ { 10.141.11.4 : 192.168.2.2-192.168.2.4 } သို့မဟုတ် ပြတ်သားသော IP လိပ်စာများနှင့် ဆိပ်ကမ်းများ- ... dnat to ip saddr မြေပုံ { 10.141.11.4. : 192.168.2.3. . 80 } သို့မဟုတ် IP အပိုင်းအခြားများနှင့် ဆိပ်ကမ်းများ ပေါင်းစပ်မှုများ- ... dnat မှ ip saddr . tcp dport မြေပုံ { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5 ။ ၈၈၈၈-၈၉၉၉ }

source: opennet.ru

မှတ်ချက် Add