ఒక సంవత్సరం అభివృద్ధి తర్వాత
కెర్నల్ స్థాయి సాధారణ ప్రోటోకాల్-స్వతంత్ర ఇంటర్ఫేస్ను మాత్రమే అందిస్తుంది, ఇది ప్యాకెట్ల నుండి డేటాను సంగ్రహించడం, డేటా కార్యకలాపాలు చేయడం మరియు ఫ్లో నియంత్రణ కోసం ప్రాథమిక విధులను అందిస్తుంది.
ఫిల్టరింగ్ లాజిక్ మరియు ప్రోటోకాల్-నిర్దిష్ట హ్యాండ్లర్లు యూజర్ స్పేస్లో బైట్కోడ్గా కంపైల్ చేయబడతాయి, ఆ తర్వాత ఈ బైట్కోడ్ నెట్లింక్ ఇంటర్ఫేస్ని ఉపయోగించి కెర్నల్లోకి లోడ్ చేయబడుతుంది మరియు BPF (బర్కిలీ ప్యాకెట్ ఫిల్టర్లు)ని గుర్తుచేసే ప్రత్యేక వర్చువల్ మెషీన్లో అమలు చేయబడుతుంది. ఈ విధానం కెర్నల్ స్థాయిలో అమలవుతున్న ఫిల్టరింగ్ కోడ్ పరిమాణాన్ని గణనీయంగా తగ్గించడానికి మరియు ప్రోటోకాల్లతో పని చేయడానికి పార్సింగ్ నియమాలు మరియు లాజిక్ల యొక్క అన్ని విధులను వినియోగదారు స్థలంలోకి తరలించడానికి మిమ్మల్ని అనుమతిస్తుంది.
ప్రధాన ఆవిష్కరణలు:
- IPsec మద్దతు, ప్యాకెట్, IPsec అభ్యర్థన ID మరియు SPI (సెక్యూరిటీ పారామీటర్ ఇండెక్స్) ట్యాగ్ ఆధారంగా టన్నెల్ చిరునామాల సరిపోలికను అనుమతిస్తుంది. ఉదాహరణకి,
... ipsec in ip saddr 192.168.1.0/24
... ipsec in spi 1-65536ఒక మార్గం IPsec సొరంగం గుండా వెళుతుందో లేదో తనిఖీ చేయడం కూడా సాధ్యమే. ఉదాహరణకు, IPSec ద్వారా కాకుండా ట్రాఫిక్ను నిరోధించడానికి:
… ఫిల్టర్ అవుట్పుట్ RT ipsec డ్రాప్ లేదు
- IGMP (ఇంటర్నెట్ గ్రూప్ మేనేజ్మెంట్ ప్రోటోకాల్) కోసం మద్దతు. ఉదాహరణకు, ఇన్కమింగ్ IGMP గ్రూప్ మెంబర్షిప్ అభ్యర్థనలను విస్మరించడానికి మీరు ఒక నియమాన్ని ఉపయోగించవచ్చు
nft యాడ్ రూల్ netdev foo bar igmp రకం సభ్యత్వం-ప్రశ్న కౌంటర్ డ్రాప్
- పరివర్తన గొలుసులను నిర్వచించడానికి వేరియబుల్లను ఉపయోగించే అవకాశం (జంప్ / గోటో). ఉదాహరణకి:
dest = ber నిర్వచించు
నియమం ip foo బార్ జంప్ $dest జోడించండి - హెడర్లోని TTL విలువల ఆధారంగా ఆపరేటింగ్ సిస్టమ్లను (OS ఫింగర్ప్రింట్) గుర్తించడానికి మాస్క్లకు మద్దతు. ఉదాహరణకు, పంపినవారి OS ఆధారంగా ప్యాకెట్లను గుర్తించడానికి, మీరు ఆదేశాన్ని ఉపయోగించవచ్చు:
... మెటా మార్క్ సెట్ osf ttl పేరు మ్యాప్ను దాటవేయి { "Linux" : 0x1,
"Windows": 0x2,
"MacOS": 0x3,
"తెలియదు" : 0x0}
... osf ttl skip వెర్షన్ "Linux:4.20" - పంపినవారి ARP చిరునామా మరియు లక్ష్య సిస్టమ్ యొక్క IPv4 చిరునామాతో సరిపోలగల సామర్థ్యం. ఉదాహరణకు, 192.168.2.1 చిరునామా నుండి పంపిన ARP ప్యాకెట్ల కౌంటర్ని పెంచడానికి, మీరు ఈ క్రింది నియమాన్ని ఉపయోగించవచ్చు:
టేబుల్ ఆర్ప్ x {
చైన్ y {
టైప్ ఫిల్టర్ హుక్ ఇన్పుట్ ప్రాధాన్యత ఫిల్టర్; విధానం అంగీకరించాలి;
arp saddr ip 192.168.2.1 కౌంటర్ ప్యాకెట్లు 1 బైట్లు 46
}
} - ప్రాక్సీ (tproxy) ద్వారా అభ్యర్థనలను పారదర్శకంగా ఫార్వార్డ్ చేయడానికి మద్దతు ఉదాహరణకు, కాల్లను పోర్ట్ 80కి ప్రాక్సీ పోర్ట్ 8080కి మళ్లించడానికి:
పట్టిక ip x {
చైన్ y {
టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత -150; విధానం అంగీకరించాలి;
tcp dport 80 tproxy to :8080
}
} - SO_MARK మోడ్లో setsockopt() ద్వారా సెట్ మార్క్ను మరింత పొందగల సామర్థ్యంతో సాకెట్లను గుర్తించడానికి మద్దతు. ఉదాహరణకి:
పట్టిక inet x {
చైన్ y {
టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత -150; విధానం అంగీకరించాలి;
tcp dport 8080 మార్క్ సెట్ సాకెట్ మార్క్
}
} - గొలుసుల కోసం ప్రాధాన్యత గల వచన పేర్లను పేర్కొనడానికి మద్దతు. ఉదాహరణకి:
nft యాడ్ చైన్ ip x రా {టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత ముడి; }
nft యాడ్ చైన్ ip x ఫిల్టర్ {టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్య ఫిల్టర్; }
nft చైన్ ip x filter_later {టైప్ ఫిల్టర్ హుక్ ప్రీరౌటింగ్ ప్రాధాన్యత ఫిల్టర్ + 10; } - SELinux ట్యాగ్లకు మద్దతు (Secmark). ఉదాహరణకు, SELinux సందర్భంలో "sshtag" ట్యాగ్ని నిర్వచించడానికి, మీరు అమలు చేయవచ్చు:
nft సెక్మార్క్ inet ఫిల్టర్ sshtag "system_u:object_r:ssh_server_packet_t:s0"ని జోడించండి
ఆపై నియమాలలో ఈ లేబుల్ని ఉపయోగించండి:
nft యాడ్ రూల్ inet ఫిల్టర్ ఇన్పుట్ tcp dport 22 మెటా సెక్మార్క్ సెట్ “sshtag”
nft యాడ్ మ్యాప్ inet ఫిల్టర్ సెక్మ్యాపింగ్ {టైప్ inet_service : secmark; }
nft యాడ్ ఎలిమెంట్ inet ఫిల్టర్ సెక్మ్యాపింగ్ {22 : "sshtag"}
nft యాడ్ రూల్ inet ఫిల్టర్ ఇన్పుట్ మెటా సెక్మార్క్ సెట్ tcp dport మ్యాప్ @secmapping - ప్రోటోకాల్లకు కేటాయించిన పోర్ట్లను టెక్స్ట్ రూపంలో పేర్కొనగల సామర్థ్యం, అవి /etc/services ఫైల్లో నిర్వచించబడ్డాయి. ఉదాహరణకి:
nft యాడ్ రూల్ xy tcp dport "ssh"
nft జాబితా నియమాలు -l
పట్టిక x {
చైన్ y {
...
tcp dport "ssh"
}
} - నెట్వర్క్ ఇంటర్ఫేస్ రకాన్ని తనిఖీ చేసే సామర్థ్యం. ఉదాహరణకి:
మెటా iifkind "vrf" అంగీకరించే నియమాన్ని జోడించు inet రా ప్రీరౌటింగ్
- “డైనమిక్” ఫ్లాగ్ను స్పష్టంగా పేర్కొనడం ద్వారా సెట్ల కంటెంట్లను డైనమిక్గా అప్డేట్ చేయడానికి మెరుగైన మద్దతు. ఉదాహరణకు, "s" సెట్ని అప్డేట్ చేయడానికి సోర్స్ అడ్రస్ని జోడించడానికి మరియు 30 సెకన్ల పాటు ప్యాకెట్లు లేకుంటే ఎంట్రీని రీసెట్ చేయడానికి:
పట్టిక xని జోడించండి
సెట్ xs జోడించండి {రకం ipv4_addr; పరిమాణం 128; గడువు 30లు; జెండాలు డైనమిక్; }
చైన్ xy జోడించండి {టైప్ ఫిల్టర్ హుక్ ఇన్పుట్ ప్రాధాన్యత 0; }
రూల్ xy నవీకరణ @s { ip saddr }ని జోడించండి - ప్రత్యేక సమయం ముగిసే పరిస్థితిని సెట్ చేయగల సామర్థ్యం. ఉదాహరణకు, పోర్ట్ 8888కి వచ్చే ప్యాకెట్ల డిఫాల్ట్ గడువును భర్తీ చేయడానికి, మీరు పేర్కొనవచ్చు:
టేబుల్ ఐపి ఫిల్టర్ {
ct సమయం ముగిసింది దూకుడు-tcp {
ప్రోటోకాల్ tcp;
l3ప్రోటో ip;
విధానం = {స్థాపితం: 100, క్లోజ్_వెయిట్: 4, క్లోజ్: 4}
}
చైన్ అవుట్పుట్ {
...
tcp dport 8888 ct సమయం ముగిసింది సెట్ "దూకుడు-tcp"
}
} - inet కుటుంబానికి NAT మద్దతు:
టేబుల్ ఇనెట్ నాట్ {
...
ip6 daddr చనిపోయిన::2::1 dnat నుండి చనిపోయిన:2::99
} - మెరుగైన అక్షర దోష నివేదన:
nft చైన్ ఫిల్టర్ పరీక్షను జోడించండి
లోపం: అటువంటి ఫైల్ లేదా డైరెక్టరీ లేదు; మీరు కుటుంబ IPలో టేబుల్ "ఫిల్టర్" అని చెప్పారా?
చైన్ ఫిల్టర్ పరీక్షను జోడించండి
^^^^^^ - సెట్లలో ఇంటర్ఫేస్ పేర్లను పేర్కొనే సామర్థ్యం:
sc {ని సెట్ చేయండి
inet_service టైప్ చేయండి. ఉంటే పేరు
మూలకాలు = { "ssh" . "eth0"}
} - నవీకరించబడిన ఫ్లోటేబుల్ నియమాల సింటాక్స్:
nft పట్టిక xని జోడించండి
nft జోడింపు ఫ్లోటేబుల్ x ft {హుక్ ప్రవేశ ప్రాధాన్యత 0; పరికరాలు = { eth0, wlan0 }; }
...
nft యాడ్ రూల్ x ఫార్వర్డ్ ip ప్రోటోకాల్ {tcp, udp } ఫ్లో యాడ్ @ft - మెరుగైన JSON మద్దతు.
మూలం: opennet.ru