టన్నెల్ ఆపకుండా ఒక OpenVPN క్లయింట్ను LAN నుండి బ్లాక్ చేయండి
క్లయింట్ టన్నెల్ చిరునామాను దాని సర్టిఫికెట్కు పిన్ చేయండి, FORWARD శీర్షం వద్ద దాని LAN ట్రాఫిక్ను పడవేయండి, ఆపై IPv6, ట్రాక్ చేసిన సెషన్లు మరియు రీబూట్ తర్వాత మనుగడను ధృవీకరించండి.
మీ OpenVPN సర్వర్లోని ఒక క్లయింట్ LAN యాక్సెస్ కోల్పోవాలి, మిగిలిన అన్ని టన్నెల్లు అమలులో ఉండాలి. దీన్ని వెతికితే, ఉత్తమ సమాధానం సాధారణంగా డీమన్ దీన్ని చేయలేదు అని చెబుతుంది, అది సగం మాత్రమే నిజం: OpenVPN లో ప్రతి క్లయింట్కు ఫైర్వాల్ లేదు, కానీ టన్నెల్ను ముగించే హోస్ట్ ఇప్పటికే ప్యాకెట్లను ఫిల్టర్ చేస్తుంది. ముఖ్యమైన రెండు నిర్ణయాలు మీరు బ్లాక్ చేసే గుర్తింపు మరియు నియమం యొక్క స్థానం. ఈ రెండింటినీ సరిగా చేస్తే మార్పు పరీక్షించి తీసివేయగల ఒక పంక్తి అవుతుంది.
నియమం రాయడానికి ముందు క్లయింట్ను పిన్ చేయండి
OpenVPN పూల్ నుండి టన్నెల్ చిరునామాలను అద్దెకు ఇస్తుంది, కాబట్టి 10.8.0.6 వ్యక్తి కాదు, సీటు. సెషన్ ముగిసినప్పుడు అద్దె తిరిగి వస్తుంది మరియు తదుపరి కనెక్షన్కు ఇవ్వవచ్చు, అంటే ఆ చిరునామాపై రాసిన నియమం సీటును అనుసరిస్తుంది, వినియోగదారుని కాదు. కాబట్టి మొదట మీరు నిజంగా ఏమి బ్లాక్ చేస్తున్నారో నిర్ణయించండి: చిన్న ప్రయోగానికి చిరునామా, లేదా బయట ఉంచాలనుకునే వ్యక్తి సర్టిఫికెట్.
చిరునామాను సర్టిఫికెట్కు కట్టడానికి, client-config-dir పేర్కొనే డైరెక్టరీలో ఫైల్ సృష్టించి, ఫైల్కు సర్టిఫికెట్ యొక్క common name సరిగ్గా ఇవ్వండి. అందులో ఒక సూచన పెట్టండి, ifconfig-push 10.8.0.6 255.255.255.0, ఆ క్లయింట్ తిరిగి కనెక్ట్ అయినప్పుడు కూడా అదే టన్నెల్ చిరునామాను ఉంచుకుంటుంది. ఇది అమలు కావడానికి రెండు సెట్టింగ్లు ఉండాలి: సర్వర్ కాన్ఫిగరేషన్లో client-config-dir ప్రకటించబడాలి, మరియు పంపే చిరునామా సర్వర్ రూట్ చేయగల సబ్నెట్లో ఉండాలి. ఒకటి తప్పినా ఫైల్ ఎటువంటి లోపం లేకుండా నిర్లక్ష్యం చేయబడుతుంది, ఇది తదుపరి ఫైర్వాల్ పరీక్షను తప్పుదారి పట్టిస్తుంది.
తాత్కాలిక బ్లాక్ పూల్ చిరునామాను ఉపయోగించవచ్చు, ఆ సమయంలో ఏ సెషన్ దాన్ని కలిగి ఉందో టికెట్ నమోదు చేస్తే సరిపోతుంది.
క్రమం డ్రాప్ నడుస్తుందో లేదో నిర్ణయిస్తుంది
టన్నెల్ మరియు LAN మధ్య ఫార్వర్డ్ చేసే Linux గేట్వేలో ప్యాకెట్లు FORWARD చైన్ గుండా వెళ్తాయి. క్రింది ఆదేశాన్ని వాక్యంగా చదవండి: FORWARD శీర్షం వద్ద చొప్పించి, tun0 నుండి వచ్చే, ఆ ఒకే హోస్ట్ నుండి, LAN సబ్నెట్ వైపు లక్ష్యంగా ఉన్న ట్రాఫిక్ను సరిపోల్చి పడవేయండి.
iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP-I నియమాన్ని నడిపిస్తుంది. -A తో జోడిస్తే అది టన్నెల్ సబ్నెట్కు ఉన్న ఏదైనా విస్తృత అనుమతి క్రింద పడుతుంది మరియు ఎప్పుడూ ప్యాకెట్ను చూడదు. స్థానాన్ని iptables -vnL FORWARD --line-numbers తో ధృవీకరించి, కౌంటర్లను కూడా చదవండి: పైన ఉన్న డ్రాప్ ఏమీ లెక్కించకపోతే ట్రాఫిక్ మరో మార్గం నుండి వస్తోంది.
గేట్వే యొక్క స్వంత LAN చిరునామా మరో మార్గం. బాక్స్కే పంపిన ప్యాకెట్లు INPUT లోకి వెళ్తాయి, FORWARD లోకి కాదు, కాబట్టి క్లయింట్ LAN హోస్ట్ను కోల్పోయినా రౌటర్ నిర్వహణ పేజీని తెరవగలదు. అది ముఖ్యమైనప్పుడు సరిపోలే INPUT నియమాన్ని జోడించండి.
ఫిల్టర్ చూడలేనిది
ప్యాకెట్ మూల్యాంకనం జరిగినప్పుడు ఫిల్టరింగ్ జరుగుతుంది, కాబట్టి స్థాపించిన TCP సెషన్ మూసివేయబడే లేదా రీసెట్ అయ్యే వరకు కొనసాగవచ్చు. బ్లాక్ వెంటనే పనిచేయాలంటే, నియమం చొప్పించిన తర్వాత ఆ మూలం యొక్క ట్రాక్ చేసిన ఫ్లోలను conntrack -D -s 10.8.0.6 తో శుభ్రం చేయండి. కొన్ని సెకన్ల అతివ్యాప్తి ఆమోదయోగ్యమైతే ఆ ఎంపికను నమోదు చేయండి, అంతర్లీనంగా వదలకండి. ఏ సందర్భంలోనైనా, తదుపరి వ్యక్తి ఈ నియమం సజీవ ట్రాఫిక్ను ఆపుతుందో లేదా కొత్త కనెక్షన్లను మాత్రమే అని తెలుసుకోవాలి.
పీర్ల మధ్య ట్రాఫిక్ ఎప్పుడూ హోస్ట్ ఫైర్వాల్ను తాకదు. client-to-client ప్రారంభించి ఉంటే OpenVPN ఆ ప్యాకెట్లను డీమన్ లోపల పంపుతుంది, కాబట్టి FORWARD లేదా INPUT వాటిని చూడవు. ఏకైక పరిష్కారాలు client-to-client ఆపివేయడం లేదా పీర్లు ఒకరినొకరు చేరుకోగలరని అంగీకరించడం; iptables నియమం ఆ ట్రాఫిక్ను చూడదు.
IPv6, ఫర్మ్వేర్ మరియు రీబూట్ తర్వాత మనుగడ
IPv4 నియమం IPv6 గురించి ఏమీ చెప్పదు. టన్నెల్ మరియు LAN రెండు కుటుంబాలను మోసుకెళ్తే, సమానమైన నియమం ip6tables లో లేదా ఆ హోస్ట్పై విధానాన్ని కలిగి ఉన్న nftables నియమ సముదాయంలో ఉండాలి. రౌటర్ ఫర్మ్వేర్ తరచుగా netfilter ను తన స్వంత అమూర్తీకరణ వెనుక దాచుతుంది, కాబట్టి ఫోరమ్ నుండి కాపీ చేసిన సింటాక్స్ మరియు పట్టిక పేర్లు వర్తించకపోవచ్చు.
OpenWrt లో నమోదిత మార్గం ఫైర్వాల్ కాన్ఫిగరేషన్ నమోదు, చేతిరాత iptables పంక్తి కాదు, మరియు చేతిరాత పంక్తి ఫైర్వాల్ తిరిగి లోడ్ అయినప్పుడు మాయమవచ్చు. ఇతర పంపిణీలు నియమాలను netfilter-persistent, బూట్ యూనిట్ లేదా విక్రేత నిల్వ ద్వారా పునరుద్ధరిస్తాయి, ఆ యంత్రాంగాలు పరస్పరం మార్చుకోగలిగినవి కావు. మీరు ఎంచుకున్నదాన్ని రీబూట్తో నిరూపించండి, ఎందుకంటే తిరిగి లోడ్ చేయడం వేరే మార్గాన్ని సాధన చేస్తుంది.
మార్గం వారీగా ధృవీకరించి, ఆపై శుభ్రంగా వెనక్కి తీసుకోండి
ప్రతి మార్గాన్ని విడిగా పరీక్షించండి, ఎందుకంటే ఒక విజయవంతమైన తనిఖీ మిగిలినవాటిని దాస్తుంది. బ్లాక్ చేసిన క్లయింట్ టన్నెల్ ద్వారా ఇంటర్నెట్ను చేరుకోవాలి కానీ LAN హోస్ట్పై విఫలం కావాలి, రెండవ క్లయింట్ అదే హోస్ట్ను చేరుకోవాలి, గేట్వే చిరునామా మరియు పీర్ మార్గం ఒక్కొక్కటి స్వంత పరిశీలన అవసరం. ఫలితాలను నియమం పక్కన రాయండి, తదుపరి మార్పుకు ఆధారం ఉంటుంది. క్రింది పట్టిక టికెట్లో ఉంచదగిన సముదాయం.
| మార్గం | నియమంతో ఆశించినది | విఫలమైనప్పుడు |
|---|---|---|
| బ్లాక్ చేసిన క్లయింట్ LAN హోస్ట్ వైపు | సమాధానం లేదు | నియమం అనుమతి క్రింద ఉంది, లేదా మూలం సరిపోలడం లేదు |
| బ్లాక్ చేసిన క్లయింట్ ఇంటర్నెట్ వైపు | tun0 ద్వారా పనిచేస్తుంది | నియమం చాలా విస్తృతం, గమ్యం సరిపోలిక లేదు |
| రెండవ క్లయింట్ అదే LAN హోస్ట్ వైపు | పనిచేస్తుంది | నియమం ఉద్దేశించిన హోస్ట్ కంటే ఎక్కువ సరిపోలింది |
| బ్లాక్ చేసిన క్లయింట్ గేట్వే LAN చిరునామా వైపు | సరిపోలే INPUT నియమంతో మాత్రమే బ్లాక్ | INPUT నియమం లేదు |
| బ్లాక్ చేసిన క్లయింట్ పీర్ టన్నెల్ చిరునామా వైపు | ఇప్పటికీ పనిచేస్తుంది | client-to-client ప్రారంభించి ఉంది మరియు ఫైర్వాల్ పరిధి వెలుపల ఉంది |
వెనక్కి తీసుకోవడం అనేది లక్షణం ప్రకారం తొలగించడం, ఫ్లష్ కాదు: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP సరిగ్గా ఆ నమోదును తీసివేసి చైన్ మిగిలిన భాగాన్ని చెక్కుచెదరకుండా ఉంచుతుంది. బూట్లో నియమాలను పునరుద్ధరించే ఏ ఫైల్ నుండైనా అదే పంక్తిని తీసివేయండి, దాన్ని తిరిగి లోడ్ చేయండి, క్లయింట్ మళ్లీ LAN హోస్ట్ను చేరుకుంటుందని నిర్ధారించండి. FORWARD ఫ్లష్ చేస్తే మీరు రాయని నియమాలూ రద్దవుతాయి, ఇది వెనక్కి తీసుకోవడాన్ని రెండవ సంఘటనగా మారుస్తుంది.
టికెట్ మూసివేసే ముందు మూడు విషయాలను నిర్ధారించండి: పిన్ చేసిన చిరునామా సర్టిఫికెట్తో సరిపోతుంది, నియమం అనుమతుల పైన ఉంది మరియు కౌంటర్ సున్నా కాదు, మరియు స్థిరత్వ ఫైల్లో మీరు పరీక్షించిన అదే నియమం ఉంది. ఇవి ఏదైనా లేకపోతే, బ్లాక్ అనేది shell సెషన్లో ఒక మాయ.