Op macOS is in nedstopknop mar sa goed as it pakketfilterbelied dat derachter sit, en pf is it part dat dat belied útfiert. It belied moat tagelyk twa tsjinoerstelde dingen dwaan: de klient by syn server litte kinne sadat in tunnel bestean kin, en stopje dat al it oare direkt nei bûten giet. De measte publisearre regelsets dogge it twadde goed en ferjitte it earste, sadat de masine ferbining ferliest ynstee fan beskerming te winnen. De ferzje dy’t wurket neamt it einpunt, de resolfer en de tunnel, en neat mear.

Wat in pakketfilter beslisse kin, en wat net

pf sjocht nei ynterfaces, adressen, protokolnûmers en poarten, en dêr hâldt it op. It leart nea hokker proses in socket iepene hat, sadat in tastimming skreaun foar ien programma in tastimming wurdt foar elk programma dat deselde poarte berikke kin. Sa makket in royaal UDP-útsûndering fan in nedstopknop wer in gewoan netwurk. Blokkearjen mei bewustwêzen fan de applikaasje heart by de klient of by in systeemútwreiding, net by dit bestân.

It filter makket ek gjin rûtes. As de klient falt, kin de standertrûte noch nei in deade tunnel wize, en pf makket dêrfan blokkearre pakketten ynstee fan in stil weromfallen nei Wi-Fi. De blokkade is it bedoelde resultaat, net in stoaring om omhinne te rûnen.

Oardering beslút it resultaat faker as de tekst fan de regel. Sûnder quick bliuwt pf nei in treffer evaluëarjen en wint de lêste regel dy’t past, sadat in breed trochlitten by de boaiem de soarchfâldige útsûnderingen derboppe oerstimt. It markearjen fan de trochlitten mei quick makket de earste treffer definityf, dat is wat in beliedsauteur meastentiids bedoelt.

Lês earst de feiten oer ynterface en einpunt

Draadleaze ynterfaces wurde net op elke Mac itselde nûmere, en it tunnelapparaat krijt in nûmer dat tusken opstarts feroarje kin. In regel dy’t in net-besteand apparaat neamt mislearret by it parsen, wat lûd en maklik te fangen is, wylst in regel dy’t it ferkearde besteande apparaat neamt skjin parset en ferkear tastiet dat jo stopje woene.

Sammele de feiten wylst de klient ferbûn is, want it tunnelapparaat bestiet allinnich dan. Jo hawwe it ynterface nedich dat de standertrûte hâldt, it apparaat dat de klient oanmakke hat, en it adres en de poarte fan de server dy’t it skillet. Krekt dy lêste wearde litte de measte regelsets weil, en it weilitten is wêrom in kopiearre set syn eigen tunnel blokkearret.

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

It earste kommando neamt it ynterface dat no wint, it twadde listet elk apparaat dat de kearn ken, en it tredde toant de VPN-konfiguraasjes dy’t it systeem starte kin. Skriuw dy antwurden op, en lês dan it serveradres en de poarte út de eigen konfiguraasje fan de klient.

Skriuw de regelset om it tunnelpaad hinne

It bestân hjirûnder wegeret standert en lit fiif dingen wer ta: loopback, it tunnelapparaat, it paad fan de klient nei syn server, de resolfer dy’t brûkt wurdt foardat de tunnel bestiet, en de beide útwikselingen dy’t in draadleaze ferbining brûkber hâlde. Ynterfacenammen en it serveradres komme fan jo masine, ferfang dus de wearden dy’t jo befêstige hawwe. It tunnelnûmer sil ek net mei dy fan jo oerienkomme.

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

De DHCP-regel bestiet omdat in Mac om in adres freget foardat er ien hat, sadat it fersyk poarte 68 ferlit rjochting poarte 67 sûnder in brûkber boarneadres. De multicast-regel lit it systeem oardielje oft de draadleaze ferbining it wurdich is, en it fuortheljen derfan makket in masine dy’t gjin ferbining meldt op in wurkjend netwurk. De einpuntregel is wat OpenVPN hielendal by syn server komme lit; sûnder dy regel smyt block all de bûtenste hânskutling fuort en de tunnel komt nea omheech. De resolferregel is smeller as in algemiene DNS-tastimming, want hy neamt ien adres en ien poarte ynstee fan elke fraach dy’t de masine docht.

Dy einpunt- en resolferútsûnderingen binne de beide dy’t der wêze moatte; al it oare bliuwt blokkearre. As de klient in letterlik adres skillet, lit de resolferregel dan weil en hâld de einpuntregel. As it serveradres feroaret, aktualisearje dy regel dan foar de folgjende ferbining, of folje in pf-tabel út de eigen heak fan de klient en kombinearje ynstee dêrmei de tabel.

Nim de tunnel del, start dan opnij

Parse foardat jo lade, want in syntaksflater is goedkeap yn in droege rûn en djoer yn in sesje op ôfstân. Laad dan it bestân, skeakel it filter oan as it út wie, en lês werom wat echt fan krêft is. It weromlêzen is gjin seremoanje: in oare anker kin regels tafoegje dy’t jo net skreaun hawwe, fergelykje dus de printe set mei jo bestân.

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

Mei de regels laden, nim de tunnel del en besykje in side te laden. Gewoan ferkear heart te stopjen, en it heart noch stoppe te wêzen neidat de masine sliept en wekker wurdt, want krekt by dy oergong slûpt ferâldere steat werom. Ferbyn wer en befêstigje dat ferkear weromkomt sûnder de regelset oan te reitsjen. As in browser noch wurket mei de tunnel del, is in regel breder as jo tochten, en it weromlêzen neamt him meastentiids.

It opnij starten is it part dat minsken oerslaan. macOS lêst /etc/pf.conf by it opstarten, mar it bestân lêze is net itselde as it filter oansette, dus in regelset dy’t no wurket kin nei in werstart ynaktyf wêze. Fier dêrnei sudo pfctl -s info út en befêstigje dat de statusrigel it filter as oan meldt.

Hâld de útwei en it werstartpaad earlik

In regelset dy’t alles blokkearret kin jo ek bûten in masine slute dy’t jo op ôfstân beheare. Bewurkje fan in pleatslike sesje as jo kinne, hâld it foarige bestân njonken it nije, en wit de wei werom foardat jo him nedich hawwe. De kommando’s hjirûnder skeakelje it filter út en laad de kopy dy’t jo bewarre hawwe opnij, en dat is de folchoarder foar in konsôle, net oer de tunnel dy’t jo krekt trochsnien hawwe. In weromgong fan fiif sekonden ferslaat elke kear in tûke regel.

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

Fêstigheid freget in launch daemon dy’t pfctl -e rint en jo bestân by it opstarten laadt. Behannelje him as elke oare foarrjochte taak: absolute paden, in log dy’t jo letter lêze kinne, en in test op in masine dy’t jo fysyk berikke kinne. In daemon dy’t stil mislearret lit de masine ûnbeskerme en normaal lykje.

Dokumintearje de gatten, te begjinnen mei in twadde VPN-klient dy’t syn eigen tunnelapparaat makket. Jo regels neame ien tunnelinterface, dus in twadde bliuwt blokkearre of wurdt rekke troch in brede regel dy’t letter tafoege wurdt. Tethering- en hotspot-ynterfaces ferskine mar soms en fertsjinje deselde notysje. Gjin fan dy gatten is in reden om it belied oer te slaan; it binne de betingsten dêr’t it noch jildt.

Relatearre artikelen