OpenVPN માટે macOS pf કિલ સ્વિચ: બંધ થતા નિયમો
pf નિયમોનો સમૂહ ટનલ નીચે હોય ત્યારે સીધો ટ્રાફિક અવરોધે છે. ક્લાયન્ટનો તેના સર્વર સુધીનો રસ્તો રાખો, પછી ટનલ બંધ કરીને અવરોધ સાબિત કરો.
macOS પર, કિલ સ્વિચ તેની પાછળની પેકેટ ફિલ્ટર નીતિ જેટલી જ સારી હોય છે, અને pf એ ભાગ છે જે તે નીતિ લાગુ કરે છે. નીતિએ એકસાથે બે વિરોધી કામ કરવાં પડે છે: ક્લાયન્ટને તેના સર્વર સુધી પહોંચવા દેવો જેથી ટનલ અસ્તિત્વમાં રહી શકે, અને બાકીનું બધું સીધું બહાર જતું અટકાવવું. પ્રકાશિત મોટાભાગના નિયમ સમૂહો બીજું કરી લે છે અને પહેલું ભૂલી જાય છે, તેથી મશીન સુરક્ષા મેળવવાને બદલે કનેક્ટિવિટી ગુમાવે છે. જે આવૃત્તિ કામ કરે છે તે અંતિમ બિંદુ, રિઝોલ્વર અને ટનલનું નામ આપે છે, અને વધુ કંઈ નહીં.
પેકેટ ફિલ્ટર શું નક્કી કરી શકે છે, અને શું નહીં
pf ઇન્ટરફેસ, સરનામાં, પ્રોટોકોલ નંબર અને પોર્ટ જુએ છે, અને ત્યાં જ અટકે છે. તે ક્યારેય જાણતું નથી કે કઈ પ્રક્રિયાએ સોકેટ ખોલ્યું, તેથી એક પ્રોગ્રામ માટે લખાયેલી પરવાનગી એ જ પોર્ટ સુધી પહોંચી શકે તેવા દરેક પ્રોગ્રામ માટેની પરવાનગી બની જાય છે. આમ ઉદાર UDP અપવાદ કિલ સ્વિચને પાછું સામાન્ય નેટવર્કમાં ફેરવે છે. એપ્લિકેશન-જાગરૂક અવરોધ ક્લાયન્ટ કે સિસ્ટમ એક્સ્ટેન્શનનું કામ છે, આ ફાઇલનું નહીં.
ફિલ્ટર રૂટ પણ બનાવતું નથી. ક્લાયન્ટ પડે ત્યારે ડિફોલ્ટ રૂટ હજી મૃત ટનલ તરફ ઇશારો કરી શકે છે, અને pf તેને Wi-Fi તરફ મૌન પાછા ફરવાને બદલે અવરોધિત પેકેટમાં ફેરવે છે. અવરોધ એ ઇચ્છિત પરિણામ છે, ટાળવાની ખામી નહીં.
ક્રમ નિયમના લખાણ કરતાં વધુ વાર પરિણામ નક્કી કરે છે. quick વિના pf મેળ પછી પણ મૂલ્યાંકન ચાલુ રાખે છે અને છેલ્લો મળતો નિયમ જીતે છે, તેથી નીચેની નજીકનો પહોળો પાસ ઉપરના કાળજીપૂર્વકના અપવાદોને બાતલ કરે છે. પાસને quick તરીકે ચિહ્નિત કરવાથી પહેલો મેળ અંતિમ બને છે, જે નીતિ લેખક સામાન્ય રીતે કહેવા માગે છે.
પહેલાં ઇન્ટરફેસ અને અંતિમ બિંદુની હકીકતો વાંચો
દરેક Mac પર વાયરલેસ ઇન્ટરફેસ સરખી રીતે ક્રમાંકિત થતા નથી, અને ટનલ ઉપકરણને એવો નંબર મળે છે જે બૂટ વચ્ચે બદલાઈ શકે છે. જે નિયમ ન હોય તેવા ઉપકરણનું નામ આપે છે તે પાર્સિંગ વખતે નિષ્ફળ જાય છે, જે ઘોંઘાટીયું અને પકડવું સહેલું છે, જ્યારે ખોટા હાલના ઉપકરણનું નામ આપતો નિયમ સ્વચ્છ રીતે પાર્સ થાય છે અને તમે અટકાવવા માગતા હતા તે ટ્રાફિકને મંજૂરી આપે છે.
હકીકતો ત્યારે એકત્ર કરો જ્યારે ક્લાયન્ટ જોડાયેલો હોય, કારણ કે ટનલ ઉપકરણ માત્ર ત્યારે જ હોય છે. તમારે ડિફોલ્ટ રૂટ ધરાવતું ઇન્ટરફેસ, ક્લાયન્ટે બનાવેલું ઉપકરણ, અને તે જે સર્વરને ડાયલ કરે છે તેનું સરનામું અને પોર્ટ જોઈએ. એ છેલ્લું મૂલ્ય જ મોટાભાગના નિયમ સમૂહો છોડી દે છે, અને તેને છોડી દેવાથી જ કોપી કરેલો સમૂહ પોતાની ટનલ અવરોધે છે.
route -n get default
ifconfig -l
scutil --nc list
પહેલો આદેશ હાલમાં જીતતા ઇન્ટરફેસનું નામ આપે છે, બીજો કર્નલને ખબર હોય તેવા દરેક ઉપકરણની યાદી આપે છે, અને ત્રીજો સિસ્ટમ શરૂ કરી શકે તેવી VPN રૂપરેખાઓ દર્શાવે છે. તે જવાબો લખી લો, પછી ક્લાયન્ટની પોતાની રૂપરેખામાંથી સર્વરનું સરનામું અને પોર્ટ વાંચો.
ટનલના માર્ગ ફરતે નિયમ સમૂહ લખો
નીચેની ફાઇલ ડિફોલ્ટથી નકારે છે અને પાંચ વસ્તુઓ ફરી સ્વીકારે છે: લૂપબેક, ટનલ ઉપકરણ, ક્લાયન્ટનો તેના સર્વર સુધીનો માર્ગ, ટનલ પહેલાં વપરાતું રિઝોલ્વર, અને વાયરલેસ લિંકને વપરાયોગ્ય રાખતા બે વિનિમય. ઇન્ટરફેસ નામો અને સર્વરનું સરનામું તમારા મશીનમાંથી આવે છે, તેથી તમે ચકાસેલા મૂલ્યો મૂકો. ટનલનો નંબર પણ તમારા સાથે મેળ ખાશે નહીં.
set skip on lo0
block all
pass out quick on utun0
# maintain this line when the server address changes
pass out quick on en1 inet proto udp to 203.0.113.10 port 1194
# only the resolver the client uses before the tunnel exists
pass out quick on en1 inet proto udp to 192.0.2.53 port 53
pass out quick on en1 inet proto udp from any port 68 to any port 67
pass out quick on en1 inet proto udp to 224.0.0.251 port 5353
DHCP લાઇન એટલા માટે છે કે Mac પાસે સરનામું હોવાના પહેલાં તે માગે છે, તેથી વિનંતી વપરાયોગ્ય સ્રોત સરનામા વિના પોર્ટ 68 થી પોર્ટ 67 તરફ નીકળે છે. મલ્ટિકાસ્ટ લાઇન સિસ્ટમને નક્કી કરવા દે છે કે વાયરલેસ લિંક વાપરવા લાયક છે કે નહીં, અને તેને દૂર કરવાથી એવું મશીન બને છે જે ચાલુ નેટવર્ક પર કોઈ જોડાણ ન હોવાનું જણાવે છે. અંતિમ બિંદુની લાઇન એ છે જે OpenVPN ને તેના સર્વર સુધી પહોંચવા દે છે; તેના વિના block all બહારના હેન્ડશેકને પડતો મૂકે છે અને ટનલ ક્યારેય ઉપર આવતી નથી. રિઝોલ્વરની લાઇન સામાન્ય DNS પરવાનગી કરતાં સાંકડી છે, કારણ કે તે મશીન કરે છે તે દરેક પ્રશ્નને બદલે એક સરનામું અને એક પોર્ટનું નામ આપે છે.
એ અંતિમ બિંદુ અને રિઝોલ્વરના અપવાદો એ બે છે જે હોવા જ જોઈએ; બાકીનું બધું અવરોધિત રહે છે. જો ક્લાયન્ટ શાબ્દિક સરનામું ડાયલ કરે, તો રિઝોલ્વરની લાઇન કાઢી નાખો અને અંતિમ બિંદુની લાઇન રાખો. જો સર્વરનું સરનામું બદલાય, તો આગલા જોડાણ પહેલાં તે લાઇન અપડેટ કરો, અથવા ક્લાયન્ટના પોતાના હૂકમાંથી pf કોષ્ટક ભરો અને તેના બદલે કોષ્ટક સાથે મેળ કરો.
ટનલ નીચે ઉતારો, પછી રીબૂટ કરો
લોડ કરતાં પહેલાં પાર્સ કરો, કારણ કે વાક્યરચના ભૂલ સૂકી કસોટીમાં સસ્તી અને દૂરના સત્રમાં મોંઘી પડે છે. પછી ફાઇલ લોડ કરો, ફિલ્ટર બંધ હોય તો ચાલુ કરો, અને ખરેખર શું અમલમાં છે તે વાંચો. પાછું વાંચવું વિધિ નથી: બીજું એન્કર તમે ન લખ્યા હોય તેવા નિયમ ઉમેરી શકે છે, તેથી છપાયેલા સમૂહને તમારી ફાઇલ સાથે સરખાવો.
sudo pfctl -n -v -f /etc/pf.conf
sudo pfctl -f /etc/pf.conf
sudo pfctl -e
sudo pfctl -s rules
sudo pfctl -s Anchors
sudo pfctl -a <anchor> -s rules
sudo pfctl -s info
નિયમો લોડ કરેલા હોય તેમ ટનલ નીચે ઉતારો અને પૃષ્ઠ લોડ કરવાનો પ્રયાસ કરો. સામાન્ય ટ્રાફિક અટકવો જોઈએ, અને મશીન સૂઈને જાગ્યા પછી પણ અટકેલો રહેવો જોઈએ, કારણ કે તે સંક્રમણમાં જ જૂની સ્થિતિ પાછી સરકે છે. ફરી જોડાઓ અને ખાતરી કરો કે નિયમ સમૂહને અડ્યા વિના ટ્રાફિક ફરી શરૂ થાય છે. જો ટનલ નીચે હોવા છતાં બ્રાઉઝર હજી કામ કરે, તો કોઈ નિયમ તમે ધાર્યું તેનાથી પહોળો છે, અને પાછું વાંચવું સામાન્ય રીતે તેનું નામ આપે છે.
રીબૂટ એ ભાગ છે જે લોકો છોડી દે છે. macOS બૂટ વખતે /etc/pf.conf વાંચે છે, પણ ફાઇલ વાંચવું એ ફિલ્ટર ચાલુ કરવા જેટલું નથી, તેથી હમણાં કામ કરતો નિયમ સમૂહ રીસ્ટાર્ટ પછી નિષ્ક્રિય હોઈ શકે છે. પછી sudo pfctl -s info ચલાવો અને ખાતરી કરો કે સ્થિતિ લાઇન ફિલ્ટરને સક્રિય જણાવે છે.
બહાર નીકળવાનો અને રીસ્ટાર્ટનો માર્ગ પ્રામાણિક રાખો
બધું અવરોધતો નિયમ સમૂહ તમને દૂરથી સંભાળો છો તે મશીનની બહાર પણ પૂરી શકે છે. જ્યારે શક્ય હોય ત્યારે સ્થાનિક સત્રમાંથી સંપાદિત કરો, અગાઉની ફાઇલ નવીની બાજુમાં રાખો, અને જરૂર પડે તે પહેલાં પાછા ફરવાનો રસ્તો જાણો. નીચેના આદેશો ફિલ્ટર બંધ કરે છે અને તમે રાખેલી નકલ ફરી લોડ કરે છે, અને આ કન્સોલમાંથી ચલાવવાનો ક્રમ છે, તમે હમણાં કાપેલી ટનલ ઉપરથી નહીં. પાંચ સેકન્ડનું પાછા ફરવું દર વખતે ચતુર નિયમને હરાવે છે.
sudo pfctl -d
sudo pfctl -f /etc/pf.conf.previous
sudo pfctl -s rules
ટકાઉપણા માટે લોન્ચ ડેમન જોઈએ જે pfctl -e ચલાવે અને બૂટ વખતે તમારી ફાઇલ લોડ કરે. તેને બીજા કોઈપણ વિશેષાધિકારવાળા કામ જેવું ગણો: પૂર્ણ માર્ગો, પછી વાંચી શકાય તેવો લોગ, અને શારીરિક રીતે પહોંચી શકાય તેવા મશીન પર કસોટી. મૌન રીતે નિષ્ફળ જતું ડેમન મશીનને અસુરક્ષિત અને સામાન્ય દેખાતું છોડી દે છે.
ખાલી જગ્યાઓનું દસ્તાવેજીકરણ કરો, પોતાનું ટનલ ઉપકરણ બનાવતા બીજા VPN ક્લાયન્ટથી શરૂ કરો. તમારા નિયમો એક ટનલ ઇન્ટરફેસનું નામ આપે છે, તેથી બીજું અવરોધિત રહે છે અથવા પછી ઉમેરાયેલા પહોળા નિયમ સાથે મળે છે. ટેથરિંગ અને હોટસ્પોટ ઇન્ટરફેસ ફક્ત ક્યારેક દેખાય છે અને એ જ નોંધને લાયક છે. એ ખાલી જગ્યાઓમાંથી કોઈ પણ નીતિ છોડી દેવાનું કારણ નથી; તે એવી શરતો છે જેના હેઠળ તે હજી લાગુ પડે છે.