కెర్నల్ స్థాయిలో, ప్యాకెట్ల నుండి డేటాను సంగ్రహించడం, డేటాపై కార్యకలాపాలు చేయడం మరియు ప్రవాహాన్ని నియంత్రించడం కోసం ప్రాథమిక విధులను అందించే సాధారణ ప్రోటోకాల్-ఇండిపెండెంట్ ఇంటర్ఫేస్ మాత్రమే అందించబడుతుంది. ఫిల్టరింగ్ నియమాలు మరియు ప్రోటోకాల్-నిర్దిష్ట హ్యాండ్లర్లు యూజర్-స్పేస్ బైట్కోడ్లో కంపైల్ చేయబడతాయి, ఆ తర్వాత ఈ బైట్కోడ్ నెట్లింక్ ఇంటర్ఫేస్ని ఉపయోగించి కెర్నల్లోకి లోడ్ చేయబడుతుంది మరియు BPF (బర్కిలీ ప్యాకెట్ ఫిల్టర్లు)ని పోలి ఉండే ప్రత్యేక వర్చువల్ మెషీన్లో కెర్నల్లో అమలు చేయబడుతుంది. ఈ విధానం కెర్నల్ స్థాయిలో నడుస్తున్న ఫిల్టరింగ్ కోడ్ పరిమాణాన్ని గణనీయంగా తగ్గించడం మరియు పార్సింగ్ నియమాల యొక్క అన్ని విధులు మరియు ప్రోటోకాల్లతో పని చేసే లాజిక్లను వినియోగదారు స్థలంలోకి తరలించడం సాధ్యం చేస్తుంది.
ప్రధాన ఆవిష్కరణలు:
- చేరికలలో పరిధులకు మద్దతు (కన్కాటేనేషన్, అడ్రస్ల యొక్క నిర్దిష్ట బైండింగ్లు మరియు సరిపోలికను సులభతరం చేసే పోర్ట్లు). ఉదాహరణకు, "వైట్లిస్ట్" సెట్లో ఎలిమెంట్స్ అటాచ్మెంట్గా ఉంటాయి, "ఇంటర్వెల్" ఫ్లాగ్ను పేర్కొనడం వలన సెట్ అటాచ్మెంట్లోని పరిధులను కలిగి ఉండవచ్చని సూచిస్తుంది ("ipv4_addr . ipv4_addr . inet_service" జోడింపు కోసం ఇది మునుపు ఖచ్చితమైన జాబితా చేయడం సాధ్యమైంది. "192.168.10.35. 192.68.11.123" వంటి సరిపోలికలు, మరియు ఇప్పుడు మీరు చిరునామాల సమూహాలను పేర్కొనవచ్చు "80-192.168.10.35."):192.168.10.40-192.68.11.123
టేబుల్ ip foo {
వైట్లిస్ట్ సెట్ చేయండి {
ipv4_addr టైప్ చేయండి. ipv4_addr. inet_service
జెండాల విరామం
మూలకాలు = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80}
}చైన్ బార్ {
టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత ఫిల్టర్; పాలసీ డ్రాప్;
ip saddr. ip నాన్న. tcp dport@whitelist అంగీకరించాలి
}
} - సెట్లు మరియు మ్యాప్-జాబితాలలో, "టైప్" డైరెక్టివ్ను ఉపయోగించడం సాధ్యమవుతుంది, ఇది మ్యాపింగ్ చేసేటప్పుడు మూలకం యొక్క ఆకృతిని నిర్ణయిస్తుంది.
ఉదాహరణకు:టేబుల్ ip foo {
వైట్లిస్ట్ సెట్ చేయండి {
ip saddr రకం
మూలకాలు = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}చైన్ బార్ {
టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత ఫిల్టర్; పాలసీ డ్రాప్;
ip daddr @ వైట్లిస్ట్ అంగీకరించండి
}
}టేబుల్ ip foo {
మ్యాప్ addr2mark {
ip saddr రకం: మెటా మార్క్
మూలకాలు = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - NAT బైండింగ్లలో జోడింపులను ఉపయోగించగల సామర్థ్యం జోడించబడింది, ఇది మ్యాప్ జాబితాలు లేదా పేరున్న సెట్ల ఆధారంగా NAT అనువాదాలను నిర్వచించేటప్పుడు చిరునామా మరియు పోర్ట్ను పేర్కొనడానికి మిమ్మల్ని అనుమతిస్తుంది:
nft యాడ్ రూల్ ip నాట్ ప్రీ dnat ip addr. పోర్ట్ నుండి ip saddr మ్యాప్ { 1.1.1.1 : 2.2.2.2 . ముప్పై }
nft మ్యాప్ ip nat గమ్యస్థానాలను జోడించండి { ipv4_addr అని టైప్ చేయండి. inet_service: ipv4_addr. inet_service\\; }
nft యాడ్ రూల్ ip నాట్ ప్రీ dnat ip addr. పోర్ట్ నుండి ip saddr. tcp dport మ్యాప్ @గమ్యస్థానాలు - నెట్వర్క్ కార్డ్ భుజాలపై కొన్ని ఫిల్టరింగ్ కార్యకలాపాల తొలగింపుతో హార్డ్వేర్ త్వరణానికి మద్దతు. త్వరణం ethtool యుటిలిటీ ("ethtool -K eth0 hw-tc-offload on") ద్వారా ప్రారంభించబడుతుంది, ఆ తర్వాత ఇది "offload" ఫ్లాగ్ని ఉపయోగించి ప్రధాన గొలుసు కోసం nftablesలో యాక్టివేట్ చేయబడుతుంది. Linux 5.6 కెర్నల్ని ఉపయోగిస్తున్నప్పుడు, హార్డ్వేర్ త్వరణం హెడర్ ఫీల్డ్ మ్యాచింగ్ మరియు ఇన్కమింగ్ ఇంటర్ఫేస్ ఇన్స్పెక్షన్ను స్వీకరించడం, వదలడం, డూప్లికేట్ చేయడం (డూప్) మరియు ఫార్వార్డింగ్ (fwd) ప్యాకెట్లతో కలిపి మద్దతు ఇస్తుంది. దిగువ ఉదాహరణలో, 192.168.30.20 చిరునామా నుండి వచ్చే డ్రాపింగ్ ప్యాకెట్ల కార్యకలాపాలు నెట్వర్క్ కార్డ్ స్థాయిలో నిర్వహించబడతాయి, ప్యాకెట్లను కెర్నల్కు పంపకుండా:
# cat file.nft
టేబుల్ నెట్దేవ్ x {
చైన్ y {
రకం ఫిల్టర్ హుక్ ప్రవేశ పరికరం eth0 ప్రాధాన్యత 10; జెండాలు ఆఫ్లోడ్;
ip saddr 192.168.30.20 డ్రాప్
}
}
# nft -f file.nft - నియమాలలో లోపం ఉన్న స్థలం గురించి మెరుగైన సమాచారం.
# nft డిలీట్ రూల్ ip yz హ్యాండిల్ 7
లోపం: నియమాన్ని ప్రాసెస్ చేయడం సాధ్యపడలేదు: అటువంటి ఫైల్ లేదా డైరెక్టరీ లేదు
రూల్ ip yz హ్యాండిల్ 7ని తొలగించండి
^# nft డిలీట్ రూల్ ip xx హ్యాండిల్ 7
లోపం: నియమాన్ని ప్రాసెస్ చేయడం సాధ్యపడలేదు: అటువంటి ఫైల్ లేదా డైరెక్టరీ లేదు
రూల్ ip xx హ్యాండిల్ 7ని తొలగించండి
^# nft టేబుల్ twstని తొలగించండి
లోపం: అటువంటి ఫైల్ లేదా డైరెక్టరీ లేదు; కుటుంబ IPలో టేబుల్ 'పరీక్ష' అని మీరు అనుకుంటున్నారా?
టేబుల్ ట్విస్ట్ను తొలగించండి
^^^^మొదటి ఉదాహరణ సిస్టమ్లో 'y' పట్టిక లేదని చూపిస్తుంది, రెండవది '7' హ్యాండ్లర్ లేదు అని చూపిస్తుంది మరియు మూడవది టేబుల్ పేరును టైప్ చేసేటప్పుడు అక్షరదోష సూచనను చూపుతుంది.
- "meta sdif" లేదా "meta sdifname"ని పేర్కొనడం ద్వారా స్లేవ్ ఇంటర్ఫేస్ని తనిఖీ చేయడానికి మద్దతు జోడించబడింది:
… మెటా sdifname vrf1 …
- షిఫ్ట్ కుడి లేదా ఎడమ ఆపరేషన్ కోసం మద్దతు జోడించబడింది. ఉదాహరణకు, ఇప్పటికే ఉన్న ప్యాకెట్ లేబుల్ను 1 బిట్ ఎడమవైపుకి మార్చడానికి మరియు దిగువ బిట్ను 1కి సెట్ చేయడానికి:
… మెటా మార్క్ సెట్ మెటా మార్క్ lshift 1 లేదా 0x1 …
- పొడిగించిన సంస్కరణ సమాచారాన్ని ప్రదర్శించడానికి "-V" ఎంపికను అమలు చేశారు.
#nft -V
nftables v0.9.4 (జైవ్ ఎట్ ఫైవ్)
cli:రీడ్లైన్
json: అవును
minigmp:సంఖ్య
libxtables: అవును - కమాండ్ల ముందు కమాండ్ లైన్ ఎంపికలు ఇప్పుడు అవసరం. ఉదాహరణకు, మీరు "nft -a list ruleset"ని పేర్కొనాలి మరియు "nft list ruleset -a"ని అమలు చేయడం వలన లోపం ఏర్పడుతుంది.
మూలం: opennet.ru