Kwenye macOS, kiswichi cha usalama ni bora tu kadri sera ya kichujio cha pakiti iliyo nyuma yake, na pf ni sehemu inayotekeleza sera hiyo. Sera lazima ifanye mambo mawili kinyume kwa wakati mmoja: kumruhusu mteja kufikia seva yake ili handaki iweze kuwepo, na kuzuia kila kitu kingine kuondoka moja kwa moja. Seti nyingi za kanuni zilizochapishwa hufanikiwa kwa la pili na kusahau la kwanza, kwa hiyo mashine hupoteza muunganisho badala ya kupata ulinzi. Toleo linalofanya kazi hutaja mwisho, kitatuzi na handaki, na hakuna zaidi.

Kichujio cha pakiti kinaweza kuamua nini, na nini hakiwezi

pf huangalia violesura, anwani, namba za itifaki na bandari, na huishia hapo. Haijui kamwe ni mchakato gani uliofungua soketi, kwa hiyo ruhusa iliyoandikwa kwa programu moja huwa ruhusa kwa kila programu inayoweza kufikia bandari hiyo hiyo. Ndiyo jinsi msamaha wa UDP ulio wazi unavyorudisha kiswichi cha usalama kuwa mtandao wa kawaida. Uzuiaji unaofahamu programu ni wa mteja au kiendelezi cha mfumo, si faili hii.

Kichujio pia hakiundi njia. Mteja anapoanguka, njia chaguo-msingi inaweza bado kuelekeza handaki iliyokufa, na pf hubadilisha hiyo kuwa pakiti zilizozuiwa badala ya kurudi kimyakimya kwenye Wi-Fi. Uzuiaji ndio matokeo yaliyokusudiwa, si hitilafu ya kuepuka.

Mpangilio huamua matokeo mara nyingi zaidi kuliko maandishi ya kanuni. Bila quick, pf huendelea kutathmini baada ya ulinganifu na kanuni ya mwisho inayolingana hushinda, kwa hiyo upitishaji mpana chini hubatilisha misamaha makini juu yake. Kuweka alama ya quick kwenye upitishaji hufanya ulinganifu wa kwanza kuwa wa mwisho, na ndivyo mwandishi wa sera hukusudia.

Soma kwanza ukweli wa violesura na mwisho

Violesura visivyo na waya havina namba sawa kwenye kila Mac, na kifaa cha handaki hupata namba inayoweza kubadilika kati ya kuwasha. Kanuni inayotaja kifaa kisichopo hushindwa wakati wa kuchanganua, jambo ambalo ni la sauti na rahisi kukamata, wakati kanuni inayotaja kifaa kisichofaa kilichopo huchanganuliwa safi na huruhusu trafiki uliyokusudia kuzuia.

Kusanya ukweli wakati mteja ameunganishwa, kwa sababu kifaa cha handaki huwepo wakati huo tu. Unahitaji violesura vinavyoshikilia njia chaguo-msingi, kifaa kilichoundwa na mteja, na anwani na bandari ya seva anayoipiga. Thamani hiyo ya mwisho ndiyo ambayo seti nyingi za kanuni huiacha, na kuiacha ndiyo sababu seti iliyonakiliwa huzuia handaki yake yenyewe.

route -n get default
ifconfig -l
scutil --nc list

Amri ya kwanza hutaja violesura vinavyoshinda sasa, ya pili huorodhesha kila kifaa kinachojulikana na kerneli, na ya tatu huonyesha usanidi wa VPN ambao mfumo unaweza kuanzisha. Andika majibu hayo, kisha soma anwani na bandari ya seva kutoka usanidi wa mteja mwenyewe.

Andika seti ya kanuni kuzunguka njia ya handaki

Faili iliyo hapa chini inakataa kwa chaguo-msingi na kuruhusu tena mambo matano: loopback, kifaa cha handaki, njia ya mteja kuelekea seva yake, kitatuzi kinachotumika kabla handaki haijawepo, na mabadilishano mawili yanayohifadhi kiungo kisivyo na waya kuwa kinachoweza kutumika. Majina ya violesura na anwani ya seva hutoka kwenye mashine yako, kwa hiyo badilisha thamani ulizothibitisha. Namba ya handaki pia haitalingana na yako.

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

Mstari wa DHCP upo kwa sababu Mac huomba anwani kabla ya kuwa nayo, kwa hiyo ombi hutoka bandari 68 kuelekea bandari 67 bila anwani chanzo inayoweza kutumika. Mstari wa multicast humruhusu mfumo kuamua ikiwa kiungo kisivyo na waya kinafaa kutumika, na kuiondoa huzalisha mashine inayoripoti hakuna muunganisho kwenye mtandao unaofanya kazi. Mstari wa mwisho ndio OpenVPN humruhusu kufikia seva yake kabisa; bila hiyo, block all hutupa salamu ya nje na handaki haipanda kamwe. Mstari wa kitatuzi ni mwembamba kuliko ruhusa ya jumla ya DNS, kwa sababu hutaja anwani moja na bandari moja badala ya kila swali ambalo mashine hufanya.

Misamaha hiyo ya mwisho na kitatuzi ndiyo mawili ambayo lazima yawepo; kila kitu kingine hubaki kimezuiwa. Ikiwa mteja anapiga anwani halisi, ondoa mstari wa kitatuzi na ubakize mstari wa mwisho. Ikiwa anwani ya seva inabadilika, sasisha mstari huo kabla ya muunganisho unaofuata, au jaza jedwali la pf kutoka ndoano ya mteja mwenyewe na ulinganishe jedwali badala yake.

Shusha handaki, kisha anzisha upya

Changanua kabla ya kupakia, kwa sababu hitilafu ya sintaksia ni rahisi katika jaribio kavu na ghali katika kikao cha mbali. Kisha pakia faili, washa kichujio ikiwa kilikuwa kimezimwa, na soma tena kile kilicho madarakani kwa kweli. Kusoma tena si tambiko: nanga nyingine inaweza kuongeza kanuni ambazo hukuandika, kwa hiyo linganisha seti iliyochapishwa na faili yako.

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

Kanuni zikiwa zimepakiwa, shusha handaki na ujaribu kupakia ukurasa. Trafiki ya kawaida inapaswa kusimama, na inapaswa kubaki imesimama baada ya mashine kulala na kuamka, kwa sababu ni katika mpito huo hali ya zamani huingia tena. Unganisha tena na uthibitishe kuwa trafiki inaendelea bila kugusa seti ya kanuni. Ikiwa kivinjari bado kinafanya kazi handaki ikiwa chini, kanuni fulani ni pana kuliko ulivyodhani, na kusoma tena kawaida huitaja.

Kuanzisha upya ni sehemu ambayo watu huiruka. macOS husoma /etc/pf.conf wakati wa kuwasha, lakini kusoma faili si sawa na kuwasha kichujio, kwa hiyo seti ya kanuni inayofanya kazi sasa inaweza kuwa isiyotumika baada ya kuanzisha upya. Kisha endesha sudo pfctl -s info na uthibitishe kuwa mstari wa hali unaripoti kichujio kikiwa kimewashwa.

Hifadhi njia ya kutoka na ya kuanzisha upya kwa uaminifu

Seti ya kanuni inayozuia kila kitu inaweza pia kukufungia nje ya mashine unayoisimamia kwa mbali. Hariri kutoka kikao cha ndani unapoweza, hifadhi faili ya awali kando ya mpya, na ujue njia ya kurudi kabla ya kuihitaji. Amri zilizo hapa chini huzima kichujio na kupakia tena nakala uliyohifadhi, na huo ndio mpangilio wa kuendesha kutoka konsoli, si kupitia handaki uliyoikata hivi punde. Kurudi kwa sekunde tano hushinda kanuni ya akili kila wakati.

sudo pfctl -d
sudo pfctl -f /etc/pf.conf.previous
sudo pfctl -s rules

Uendelevu unahitaji daemon ya kuanzisha inayoendesha pfctl -e na kupakia faili yako wakati wa kuwasha. Ichukulie kama kazi nyingine yoyote ya upendeleo: njia kamili, kumbukumbu unayoweza kusoma baadaye, na jaribio kwenye mashine unayoweza kufikia kimaumbile. Daemon inayoshindwa kimyakimya huiacha mashine bila ulinzi na ikaonekana kawaida.

Andika mapengo, ukianza na mteja wa pili wa VPN anayeunda kifaa chake cha handaki. Kanuni zako hutaja violesura kimoja cha handaki, kwa hiyo cha pili hubaki kimezuiwa au kinashikwa na kanuni pana iliyoongezwa baadaye. Violesura vya tethering na hotspot huonekana mara chache tu na vinastahili dokezo lile lile. Hakuna pengo lolote la hayo lililo sababu ya kuruka sera; ni masharti ambayo bado inashikilia.

Makala zinazohusiana