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

packet filter nftables 1.0.7 ကိုထုတ်ဝေပြီး IPv4၊ IPv6၊ ARP နှင့် network bridges (iptables၊ ip6table၊ arptables နှင့် ebtables) များအတွက် packet filtering interface များကို ပေါင်းစည်းပြီး ထုတ်ဝေထားပါသည်။ nftables ပက်ကေ့ဂျ်တွင် အသုံးပြုသူနေရာလွတ်တွင် လည်ပတ်နေသော ပက်ကက်စစ်ထုတ်သည့် အစိတ်အပိုင်းများ ပါ၀င်ပြီး kernel-level အလုပ်ကို 3.13 ကတည်းက Linux kernel ၏ တစ်စိတ်တစ်ပိုင်းဖြစ်သည့် nf_tables ခွဲစနစ်က ပံ့ပိုးပေးထားသည်။ kernel အဆင့်သည် ပက်ကတ်များမှ ဒေတာထုတ်ယူရန်၊ ဒေတာလည်ပတ်မှုနှင့် စီးဆင်းမှုထိန်းချုပ်မှုအတွက် အခြေခံလုပ်ဆောင်ချက်များကို ပံ့ပိုးပေးသည့် ယေဘူယျပရိုတိုကော-အမှီအခိုကင်းသော အင်တာဖေ့စ်ကို ထောက်ပံ့ပေးသည်။

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

အဓိကပြောင်းလဲမှုများ-

  • Linux kernel 6.2+ အသုံးပြုသည့် စနစ်များအတွက်၊ vxlan၊ geneve၊ gre နှင့် gretap protocol mappings များအတွက် ပံ့ပိုးမှုကို ထည့်သွင်းထားပြီး၊ ရိုးရှင်းသောအသုံးအနှုန်းများကို encapsulated packets များတွင် စစ်ဆေးရန် ခွင့်ပြုထားပါသည်။ ဥပမာအားဖြင့်၊ VxLAN မှ nested packet တစ်ခု၏ ခေါင်းစီးရှိ IP လိပ်စာကို စစ်ဆေးရန် ယခု စည်းမျဉ်းများကို သင်အသုံးပြုနိုင်ပြီ (VxLAN ခေါင်းစီးကို ပထမဆုံး de-encapsulate လုပ်ရန် မလိုအပ်ဘဲ filter ကို vxlan0 interface သို့ ချည်နှောင်ထားသည်): ... udp dport 4789 vxlan ip protocol udp ... udp dport 4789 vxlan ip saddr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip saddr . vxlan ip daddr { 4.3.2.1 . ၄.၃.၂.၁ }
  • သတ်မှတ်စာရင်းဒြပ်စင်၏ တစ်စိတ်တစ်ပိုင်းကို ဖျက်လိုက်ပြီးနောက် အကြွင်းအကျန်များကို အလိုအလျောက် ပေါင်းစည်းခြင်းအတွက် ပံ့ပိုးကူညီမှုအား အကောင်အထည်ဖော်ခဲ့ပြီး၊ ၎င်းသည် ရှိပြီးသားအပိုင်းအခြားတစ်ခုမှ ဒြပ်စင်တစ်ခု သို့မဟုတ် အပိုင်းအခြားတစ်ခု၏ အစိတ်အပိုင်းကို ဖျက်နိုင်သည် (ယခင်က အပိုင်းအခြားတစ်ခုကို လုံးလုံးဖျက်နိုင်သည်)။ ဥပမာအားဖြင့်၊ အပိုင်းအခြား 25-24 နှင့် 30-40 ရှိသော set list မှ element 50 ကို ဖယ်ရှားပြီးနောက်၊ list သည် 24၊ 26-30 နှင့် 40-50 တွင် ကျန်ရှိနေမည်ဖြစ်သည်။ 5.10+ kernel ၏ တည်ငြိမ်သော အကိုင်းအခက်များကို ပြုပြင်ထိန်းသိမ်းမှုများတွင် အလိုအလျောက်ပေါင်းစပ်ခြင်းအတွက် လိုအပ်သော ပြင်ဆင်မှုများကို ပံ့ပိုးပေးမည်ဖြစ်ပါသည်။ # nft စာရင်းစည်းမျဉ်းဇယား ip x { set y { typeof tcp dport flags interval auto-merge element = { 24-30၊ 40-50 } } } # nft delete element ip xy { 25 } # nft list ruleset table ip x { set y { tcp dport အလံ အမျိုးအစား ကြားကာလ အလိုအလျောက် ပေါင်းစည်းသည့် အစိတ်အပိုင်းများ = { 24၊ 26-30၊ 40-50 } } }
  • လိပ်စာဘာသာပြန်ဆိုခြင်း (NAT) ကို ပုံဖော်သည့်အခါ အဆက်အသွယ်များနှင့် အပိုင်းအခြားများကို အသုံးပြုခွင့်ပေးသည်။ table ip nat { chain prerouting { type nat hook prerouting priority dstnat; မူဝါဒလက်ခံ; dnat to ip daddr။ tcp dport မြေပုံ { 10.1.1.136 . 80: 1.1.2.69 ။ 1024၊ 10.1.1.10-10.1.1.20။ 8888-8889: 1.1.2.69။ 2048-2049 } မြဲ } }
  • စည်းမျဉ်းဒြပ်စင် သို့မဟုတ် သတ်မှတ်စာရင်းကို နောက်ဆုံးအသုံးပြုသည့်အချိန်ကို သိရှိနိုင်စေမည့် "နောက်ဆုံး" စကားရပ်အတွက် ပံ့ပိုးမှု ထပ်လောင်းထည့်ထားသည်။ အင်္ဂါရပ်ကို Linux kernel 5.14 ဖြင့် စတင်အသုံးပြုနိုင်သည်။ ဇယား ip x { set y { ip daddr အမျိုးအစား။ tcp dport အရွယ်အစား 65535 အလံများ ရွေ့လျားမှု၊ နောက်ဆုံးအချိန်ကုန်ဆုံးချိန် 1h } ကွင်းဆက် z { အမျိုးအစား ဇကာချိတ် အထွက် ဦးစားပေး စစ်ထုတ်မှု; မူဝါဒလက်ခံ; update @y { ip daddr . tcp dport } } } # nft စာရင်း set ip xy ဇယား ip x { set y { typeof ip daddr . tcp dport အရွယ်အစား 65535 အလံများ ရွေ့လျားမှု၊ နောက်ဆုံးအချိန်ကုန်ဆုံးချိန် 1h အစိတ်အပိုင်းများ = { 172.217.17.14 . 443 နောက်ဆုံးအသုံးပြုခဲ့သည့် 1s591ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m58s409ms၊ 172.67.69.19 သက်တမ်းကုန်ဆုံးသည်။ နောက်ဆုံးအသုံးပြုခဲ့သော 443 4s636ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m55s364ms၊ 142.250.201.72 ကုန်ဆုံးသည်။ နောက်ဆုံးအသုံးပြုခဲ့သော 443 4s748ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m55s252ms၊ 172.67.70.134 ကုန်ဆုံးသည်။ နောက်ဆုံးအသုံးပြုခဲ့သော 443 4s688ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m55s312ms၊ 35.241.9.150 ကုန်ဆုံးသည်။ 443 နောက်ဆုံးအသုံးပြုထားသော 5s204ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m54s796ms၊ 138.201.122.174 ကုန်ဆုံးသည်။ နောက်ဆုံးအသုံးပြုခဲ့သော 443 4s537ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m55s463ms၊ 34.160.144.191 ကုန်ဆုံးသည်။ 443 နောက်ဆုံးအသုံးပြုထားသော 5s205ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m54s795ms၊ 130.211.23.194 ကုန်ဆုံးသည်။ နောက်ဆုံးအသုံးပြုခဲ့သော 443 4s436ms အချိန်လွန် 1h ကုန်ဆုံးသည် 59m55s564ms } } }
  • သတ်မှတ်စာရင်းများတွင် quotas သတ်မှတ်ရန် စွမ်းရည်ကို ပေါင်းထည့်ထားသည်။ ဥပမာအားဖြင့်၊ ပစ်မှတ် IP လိပ်စာတစ်ခုစီအတွက် အသွားအလာခွဲတမ်းကို ဆုံးဖြတ်ရန်၊ သတ်မှတ်နိုင်သည်- ဇယား netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" ဦးစားပေး filter; မူဝါဒလက်ခံ; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes element = { 8.8.8.8. 10000 ခွဲတမ်း 196 mbytes ကျော်သည် 0 bytes ကိုအသုံးပြုထားသည် } } ကွင်းဆက် y { type filter hook egress device “ethXNUMX” ဦးစားပေး filter; မူဝါဒလက်ခံ; ip daddr @y drop } }
  • သတ်မှတ်စာရင်းများတွင် ကိန်းသေများကို အသုံးပြုခြင်းကို ခွင့်ပြုထားသည်။ ဥပမာအားဖြင့်၊ ဦးတည်ရာလိပ်စာနှင့် VLAN ID ကိုစာရင်းသော့အဖြစ်အသုံးပြုသောအခါ၊ သင်သည် VLAN နံပါတ် (daddr . 123) ကို တိုက်ရိုက်သတ်မှတ်နိုင်သည်): table netdev t { set s { typeof ether saddr . vlan id အရွယ်အစား 2048 အလံများ ရွေ့လျားမှု၊ အချိန်ကုန်ဆုံးချိန် 1m } ကွင်းဆက် c { အမျိုးအစား filter ချိတ်ကိရိယာ eth0 ဦးစားပေး 0; မူဝါဒလက်ခံ; ether အမျိုးအစား != 8021q update @s { ether daddr . 123 } ကောင်တာ } }
  • အရာဝတ္ထုများကို ခြွင်းချက်မရှိ ဖျက်ရန် "destroy" အမိန့်အသစ်ကို ပေါင်းထည့်ခဲ့သည် (ဖျက်ပစ်သည့် အမိန့်နှင့် မတူဘဲ ပျောက်ဆုံးနေသော အရာဝတ္ထုကို ဖျက်ရန် ကြိုးစားသောအခါတွင် ENOENT မထုတ်ပေးပါ)။ အလုပ်လုပ်ရန် အနည်းဆုံး Linux kernel 6.3-rc လိုအပ်သည်။ ဇယား ip filter ကိုဖျက်စီးပါ။

source: opennet.ru

မှတ်ချက် Add