Varnostno stikalo pf v macOS za OpenVPN: pravila, ki se zaprejo
Nabor pravil pf blokira neposreden promet, dokler je tunel spuščen. Ohranite pot odjemalca do njegovega strežnika, nato dokažite blokado z izklopljenim tunelom.
V macOS je varnostno stikalo le tako dobro, kot je politika paketnega filtra za njim, in pf je del, ki to politiko uveljavlja. Politika mora hkrati početi dve nasprotni stvari: spustiti odjemalca do njegovega strežnika, da lahko obstaja tunel, in ustaviti vse drugo pri neposrednem izhodu. Večina objavljenih naborov pravil obvlada drugo in pozabi prvo, zato naprava izgubi povezljivost namesto da bi pridobila zaščito. Različica, ki deluje, poimenuje končno točko, razreševalnik in tunel, in nič več.
Kaj lahko paketni filter odloči in česa ne
pf gleda vmesnike, naslove, številke protokolov in vrata, in tam se ustavi. Nikoli ne izve, kateri proces je odprl vtičnico, zato dovoljenje, napisano za en program, postane dovoljenje za vsak program, ki lahko doseže ista vrata. Tako radodarna izjema UDP spremeni varnostno stikalo nazaj v običajno omrežje. Blokiranje zavedno aplikacije pripada odjemalcu ali sistemskemu razširitvi, ne tej datoteki.
Filter tudi ne ustvarja poti. Ko odjemalec pade, lahko privzeta pot še vedno kaže na mrtev tunel, in pf to spremeni v blokirane pakete namesto v tiho vrnitev na Wi-Fi. Blokada je predvideni rezultat, ne okvara, ki bi se ji bilo treba izogniti.
Vrstni red odloči izid pogosteje kot besedilo pravila. Brez quick pf nadaljuje z ocenjevanjem po ujemanju in zmaga zadnje ujemajoče se pravilo, zato širok prehod pri dnu razveljavi skrbne izjeme nad njim. Označitev prehodov z quick naredi prvo ujemanje dokončno, kar avtor politike običajno misli.
Najprej preberite dejstva o vmesniku in končni točki
Brezžični vmesniki niso na vsakem Macu oštevilčeni enako, naprava tunela pa dobi številko, ki se med zagoni lahko spremeni. Pravilo, ki poimenuje neobstoječo napravo, ne uspe pri razčlenjevanju, kar je glasno in lahko ujamemo, medtem ko se pravilo, ki poimenuje napačno obstoječo napravo, razčleni čisto in prepusti promet, ki ste ga hoteli ustaviti.
Zbirajte dejstva, dokler je odjemalec povezan, ker naprava tunela obstaja le takrat. Potrebujete vmesnik, ki drži privzeto pot, napravo, ki jo je ustvaril odjemalec, ter naslov in vrata strežnika, ki ga kliče. Prav to zadnjo vrednost večina naborov pravil izpusti, in zaradi izpuščanja kopiran nabor blokira svoj lastni tunel.
route -n get default
ifconfig -l
scutil --nc list
Prvi ukaz poimenuje vmesnik, ki zdaj zmaguje, drugi našteje vsako napravo, ki jo jedro pozna, tretji pa pokaže konfiguracije VPN, ki jih sistem lahko zažene. Zapišite te odgovore, nato preberite naslov in vrata strežnika iz odjemalčeve lastne konfiguracije.
Napišite nabor pravil okoli poti tunela
Spodnja datoteka privzeto zavrača in znova spusti pet stvari: loopback, napravo tunela, pot odjemalca do njegovega strežnika, razreševalnik, ki se uporablja preden tunel obstaja, in dve izmenjavi, ki ohranjata brezžično povezavo uporabno. Imena vmesnikov in naslov strežnika prihajajo z vašega računalnika, zato zamenjajte potrjene vrednosti. Tudi številka tunela se ne bo ujemala z vašo.
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
Vrstica DHCP obstaja, ker Mac prosi za naslov, preden ga ima, zato zahteva zapusti vrata 68 proti vratom 67 brez uporabnega izvornega naslova. Vrstica multicast omogoča sistemu, da presodi, ali je brezžično povezavo vredno uporabljati, in njena odstranitev ustvari napravo, ki v delujočem omrežju poroča ni povezave. Vrstica končne točke je tisto, kar OpenVPN sploh omogoča doseči njegov strežnik; brez nje block all zavrže zunanji rokovanje in tunel se nikoli ne dvigne. Vrstica razreševalnika je ožja od splošnega dovoljenja DNS, ker poimenuje en naslov in ena vrata namesto vsake poizvedbe, ki jo opravi naprava.
Ti izjemi za končno točko in razreševalnik sta tisti dve, ki morata obstajati; vse drugo ostane blokirano. Če odjemalec kliče dobesedni naslov, odstranite vrstico razreševalnika in obdržite vrstico končne točke. Če se naslov strežnika spremeni, posodobite tisto vrstico pred naslednjo povezavo, ali napolnite tabelo pf iz odjemalčevega lastnega kavlja in namesto tega ujemajte tabelo.
Spustite tunel, nato znova zaženite
Razčlenite pred nalaganjem, ker je sintaktična napaka poceni pri suhem zagonu in draga v oddaljeni seji. Nato naložite datoteko, vklopite filter, če je bil izklopljen, in preberite, kaj je v resnici v veljavi. Ponovno branje ni ceremonija: drugo sidro lahko doda pravila, ki jih niste napisali, zato primerjajte natisnjeni nabor s svojo datoteko.
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
Z naloženimi pravili spustite tunel in poskusite naložiti stran. Običajni promet bi se moral ustaviti in bi moral ostati ustavljen tudi po tem, ko naprava zaspi in se prebudi, ker se prav pri tem prehodu vrne zastarelo stanje. Znova se povežite in potrdite, da se promet nadaljuje brez dotikanja nabora pravil. Če brskalnik še deluje s spuščenim tunelom, je neko pravilo širše, kot ste mislili, in ponovno branje ga običajno poimenuje.
Ponovni zagon je del, ki ga ljudje izpustijo. macOS bere /etc/pf.conf ob zagonu, a branje datoteke ni isto kot vklop filtra, zato nabor pravil, ki zdaj deluje, je lahko po ponovnem zagonu neaktiven. Nato zaženite sudo pfctl -s info in potrdite, da statusna vrstica poroča filter kot vklopljen.
Ohranite izhod in pot ponovnega zagona poštena
Nabor pravil, ki blokira vse, vas lahko tudi zaklene iz naprave, ki jo upravljate na daljavo. Urejajte iz lokalne seje, ko lahko, imejte prejšnjo datoteko ob novi in poznajte vrnitev, preden jo potrebujete. Spodnji ukazi izklopijo filter in znova naložijo kopijo, ki ste jo shranili, in to je zaporedje za konzolo, ne skozi tunel, ki ste ga pravkar prerezali. Vrnitev v petih sekundah premaga pametno pravilo vsakič.
sudo pfctl -d
sudo pfctl -f /etc/pf.conf.previous
sudo pfctl -s rules
Trajnost zahteva zagonskega demona, ki izvaja pfctl -e in ob zagonu naloži vašo datoteko. Obravnavajte ga kot vsako drugo privilegirano opravilo: absolutne poti, dnevnik, ki ga lahko preberete pozneje, in preizkus na napravi, do katere se fizično lahko dokopljete. Demon, ki tiho odpove, pusti napravo nezaščiteno in videti običajno.
Dokumentirajte vrzeli, začenši z drugim odjemalcem VPN, ki ustvari svojo napravo tunela. Vaša pravila poimenujejo en vmesnik tunela, zato drugi ostane blokiran ali ga ujame široko pravilo, dodano pozneje. Vmesniki za tethering in hotspot se pojavljajo le včasih in si zaslužijo isto opombo. Nobena od teh vrzeli ni razlog za preskok politike; to so pogoji, pod katerimi še vedno velja.