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

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

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

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

  • IPsec ပံ့ပိုးမှု၊ ပက်ကတ်၊ IPsec တောင်းဆိုချက် ID နှင့် SPI (Security Parameter Index) တဂ်အပေါ်အခြေခံသည့် ဥမင်လိပ်စာများကို ကိုက်ညီမှုခွင့်ပြုသည်။ ဥပမာအားဖြင့်,

    ... ipsec တွင် ip saddr 192.168.1.0/24
    ... ipsec in spi 1-65536

    လမ်းကြောင်းတစ်ခုသည် IPsec ဥမင်လိုဏ်ခေါင်းမှတဆင့် ဖြတ်သန်းသွားခြင်း ရှိမရှိကိုလည်း စစ်ဆေးနိုင်သည်။ ဥပမာအားဖြင့်၊ IPSec မှတဆင့်မဟုတ်သောအသွားအလာကိုပိတ်ဆို့ရန်-

    … filter output rt ipsec ပျောက်နေသော drop

  • IGMP (Internet Group Management Protocol) အတွက် ပံ့ပိုးမှု။ ဥပမာအားဖြင့်၊ ဝင်လာသော IGMP အဖွဲ့၏ အဖွဲ့ဝင်မှုတောင်းဆိုချက်များကို ဖယ်ပစ်ရန် စည်းမျဉ်းကို သင်အသုံးပြုနိုင်သည်။

    nft add rule netdev foo bar igmp type membership-query counter drop

  • အသွင်ကူးပြောင်းရေးကွင်းဆက်များ (ခုန် / သွားရန်) ကိုသတ်မှတ်ရန် variable များကိုအသုံးပြုရန်ဖြစ်နိုင်ခြေ။ ဥပမာအားဖြင့်:

    dest = ber ကိုသတ်မှတ်သည်။
    ip foo bar jump $dest စည်းမျဉ်းထည့်ပါ။

  • ခေါင်းစီးရှိ TTL တန်ဖိုးများကို အခြေခံ၍ လည်ပတ်မှုစနစ်များ (OS Fingerprint) ကိုခွဲခြားရန် မျက်နှာဖုံးများအတွက် ပံ့ပိုးမှု။ ဥပမာအားဖြင့်၊ ပေးပို့သူ OS ကိုအခြေခံ၍ packet များကို အမှတ်အသားပြုရန်၊ သင်သည် command ကိုသုံးနိုင်သည်-

    ... meta အမှတ်အသား သတ်မှတ် osf ttl skip name map { "Linux" : 0x1၊
    "Windows"- 0x2၊
    "MacOS"- 0x3၊
    "အမည်မသိ" : 0x0 }
    ... osf ttl ဗားရှင်း "Linux:4.20" ကို ကျော်ပါ။

  • ပေးပို့သူ၏ ARP လိပ်စာနှင့် ပစ်မှတ်စနစ်၏ IPv4 လိပ်စာကို ယှဉ်နိုင်မှု။ ဥပမာအားဖြင့်၊ လိပ်စာ 192.168.2.1 မှပေးပို့သော ARP packet ကောင်တာကို တိုးမြှင့်ရန်၊ သင်သည် အောက်ပါစည်းမျဉ်းကို အသုံးပြုနိုင်သည်။

    ဇယား arp x {
    ကွင်းဆက် y {
    အမျိုးအစား filter ချိတ်ထည့်သွင်းမှုဦးစားပေး filter; မူဝါဒလက်ခံ;
    arp saddr ip 192.168.2.1 ကောင်တာပက်ကတ်များ 1 bytes 46
    }
    }

  • ပရောက်စီ (tproxy) မှတဆင့် တောင်းဆိုချက်များကို ပွင့်လင်းမြင်သာစွာ ထပ်ဆင့်ပို့ခြင်းအတွက် ပံ့ပိုးမှု။ ဥပမာအားဖြင့်၊ ခေါ်ဆိုမှုများကို port 80 သို့ proxy port 8080 သို့ ပြန်ညွှန်းရန်-

    ဇယား ip x {
    ကွင်းဆက် y {
    type filter hook prerouting ဦးစားပေး -150; မူဝါဒလက်ခံ;
    tcp dport 80 tproxy :8080 သို့
    }
    }

  • SO_MARK မုဒ်တွင် setsockopt() မှတစ်ဆင့် သတ်မှတ်အမှတ်အသားကို ထပ်မံရယူနိုင်စွမ်းရှိသည့် အမှတ်အသား sockets များအတွက် ပံ့ပိုးမှု။ ဥပမာအားဖြင့်:

    ဇယား inet x {
    ကွင်းဆက် y {
    type filter hook prerouting ဦးစားပေး -150; မူဝါဒလက်ခံ;
    tcp dport 8080 အမှတ်အသား သတ်မှတ် socket အမှတ်အသား
    }
    }

  • ကွင်းဆက်များအတွက် ဦးစားပေးစာသားအမည်များ သတ်မှတ်ခြင်းအတွက် ပံ့ပိုးမှု။ ဥပမာအားဖြင့်:

    nft add chain ip x raw { type filter hook prerouting priority raw; }
    nft add chain ip x filter { type filter hook prerouting priority filter; }
    nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; }

  • SELinux တဂ်များ (Secmark) အတွက် ပံ့ပိုးမှု။ ဥပမာအားဖြင့်၊ SELinux ဆက်စပ်မှုတွင် "sshtag" တဂ်ကို သတ်မှတ်ရန်၊ သင်သည် လုပ်ဆောင်နိုင်သည်-

    nft တွင် secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0" ထည့်ပါ။

    ထို့နောက် စည်းမျဉ်းများတွင် ဤတံဆိပ်ကို အသုံးပြုပါ။

    nft add rule inet filter input tcp dport 22 meta secmark set “sshtag”

    nft add map inet filter symapping { type inet_service : secmark; }
    nft add element inet filter secmapping { 22 : "sshtag" }
    nft add rule inet filter input meta secmark set tcp dport map @secmapping

  • /etc/services ဖိုင်တွင် သတ်မှတ်ထားသည့်အတိုင်း ၎င်းတို့ကို စာသားပုံစံဖြင့် သတ်မှတ်ပေးထားသည့် ဆိပ်ကမ်းများကို သတ်မှတ်နိုင်စွမ်း။ ဥပမာအားဖြင့်:

    nft စည်းမျဉ်းကို xy tcp dport "ssh" ထည့်ရန်
    nft စာရင်းစည်းမျဉ်းများ -l
    ဇယား x {
    ကွင်းဆက် y {
    ...
    tcp dport "ssh"
    }
    }

  • ကွန်ရက်ချိတ်ဆက်မှု အမျိုးအစားကို စစ်ဆေးနိုင်မှု။ ဥပမာအားဖြင့်:

    add rule inet raw prerouting meta iifkind "vrf" ကို လက်ခံပါ။

  • "ဒိုင်းနမစ်" အလံကို ပြတ်သားစွာ သတ်မှတ်ခြင်းဖြင့် အစုံများ၏ အကြောင်းအရာများကို ဒိုင်းနမစ်မွမ်းမံခြင်းအတွက် ပိုမိုကောင်းမွန်သော ပံ့ပိုးမှု။ ဥပမာအားဖြင့်၊ အရင်းအမြစ်လိပ်စာကိုထည့်ရန် set "s" ကို အပ်ဒိတ်လုပ်ရန်နှင့် စက္ကန့် 30 ကြာ packets မရှိပါက entry ကို ပြန်လည်သတ်မှတ်ရန်-

    ဇယား x ကိုထည့်ပါ။
    set xs { ipv4_addr ကိုရိုက်ထည့်ပါ။ အရွယ်အစား 128; 30s အချိန်ကုန်; အလံများ ရွေ့လျားမှု၊ }
    add chain xy { type filter hook input ကို ဦးစားပေး 0; }
    စည်းမျဉ်း xy update @s { ip saddr } ကိုထည့်ပါ

  • သီးခြား timeout condition ကို သတ်မှတ်နိုင်မှု။ ဥပမာအားဖြင့်၊ port 8888 တွင်ရောက်ရှိနေသောပက်ကေ့ခ်ျများအတွက်မူလအချိန်လွန်ကိုကျော်ရန်၊ သင်သတ်မှတ်နိုင်သည်-

    ဇယား ip filter {
    ct aggressive-tcp {
    ပရိုတိုကော tcp;
    l3proto ip;
    မူဝါဒ = {စတင်ခဲ့သည်- 100၊ close_wait- 4၊ ပိတ်သည်- 4}
    }
    ကွင်းဆက်အထွက် {
    ...
    tcp dport 8888 ct အချိန်လွန်သတ်မှတ် "aggressive-tcp"
    }
    }

  • inet မိသားစုအတွက် NAT ပံ့ပိုးမှု-

    inet nat { စားပွဲ၊
    ...
    ip6 daddr dead::2::1 dnat to dead:2::99
    }

  • ပိုမိုကောင်းမွန်သော စာစီစာရိုက်အမှားအစီရင်ခံခြင်း-

    nft add chain filter ကိုစမ်းသပ်ပါ။

    အမှား- ထိုကဲ့သို့သော ဖိုင် သို့မဟုတ် လမ်းညွှန်မရှိပါ။ family ip မှာ table "filter" ကို ဆိုလိုတာလား။
    ကွင်းဆက် filter ကိုထည့်ပါ။
    ^^^^^^

  • အစုံများတွင် အင်တာဖေ့စ်အမည်များကို သတ်မှတ်နိုင်သည်-

    sc ကို သတ်မှတ်ရန် {
    inet_service ကို ရိုက်ထည့်ပါ။ ifname
    အစိတ်အပိုင်းများ = { "ssh" ။ "eth0" }
    }

  • မွမ်းမံထားသော flowtable စည်းမျဉ်းစည်းမျဥ်းများ-

    nft ဇယား x ကိုထည့်ပါ။
    nft add flowtable x ft { ချိတ် ingress ဦးစားပေး 0; ကိရိယာများ = {eth0၊ wlan0 }; }
    ...
    nft add rule x forward ip protocol { tcp, udp } flow add @ft

  • ပိုမိုကောင်းမွန်သော JSON ပံ့ပိုးမှု။

source: opennet.ru

မှတ်ချက် Add