Pada macOS, suis pembunuh hanya sebaik dasar penapis paket di belakangnya, dan pf ialah bahagian yang menguatkuasakan dasar itu. Dasar itu mesti melakukan dua perkara bertentangan sekali gus: membenarkan klien mencapai pelayannya supaya terowong boleh wujud, dan menghentikan segala yang lain daripada keluar terus. Kebanyakan set peraturan yang diterbitkan berjaya pada yang kedua dan lupa yang pertama, jadi mesin kehilangan sambungan dan bukannya mendapat perlindungan. Versi yang berfungsi menamakan titik akhir, penyelesai dan terowong, dan tidak lebih.

Apa yang penapis paket boleh putuskan, dan apa yang tidak

pf melihat antara muka, alamat, nombor protokol dan port, dan berhenti di situ. Ia tidak pernah tahu proses mana yang membuka soket, jadi kebenaran yang ditulis untuk satu program menjadi kebenaran untuk setiap program yang boleh mencapai port yang sama. Itulah cara pengecualian UDP yang murah hati mengembalikan suis pembunuh kepada rangkaian biasa. Penyekatan peka-aplikasi milik klien atau sambungan sistem, bukan fail ini.

Penapis juga tidak mencipta laluan. Apabila klien jatuh, laluan lalai mungkin masih menunjuk ke terowong mati, dan pf mengubahnya menjadi paket tersekat dan bukannya kembali senyap ke Wi-Fi. Sekatan ialah hasil yang dimaksudkan, bukan kerosakan yang perlu dielakkan.

Urutan lebih kerap menentukan hasil daripada teks peraturan. Tanpa quick, pf terus menilai selepas padanan dan peraturan terakhir yang sepadan menang, jadi laluan lebar di bawah mengatasi pengecualian berhati-hati di atasnya. Menandakan laluan dengan quick menjadikan padanan pertama muktamad, yang biasanya dimaksudkan oleh pengarang dasar.

Baca dahulu fakta antara muka dan titik akhir

Antara muka wayarles tidak bernombor sama pada setiap Mac, dan peranti terowong mendapat nombor yang boleh berubah antara but. Peraturan yang menamakan peranti yang tidak wujud gagal semasa penghuraian, yang kuat bunyinya dan mudah ditangkap, manakala peraturan yang menamakan peranti sedia ada yang salah dihuraikan dengan bersih dan membenarkan trafik yang anda mahu hentikan.

Kumpulkan fakta semasa klien bersambung, kerana peranti terowong hanya wujud ketika itu. Anda perlukan antara muka yang memegang laluan lalai, peranti yang dicipta klien, serta alamat dan port pelayan yang didailnya. Nilai terakhir itulah yang paling kerap ditinggalkan oleh set peraturan, dan meninggalkannya ialah sebab set yang disalin menyekat terowongnya sendiri.

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

Perintah pertama menamakan antara muka yang menang sekarang, yang kedua menyenaraikan setiap peranti yang diketahui kernel, dan yang ketiga menunjukkan konfigurasi VPN yang boleh dimulakan sistem. Catat jawapan itu, kemudian baca alamat dan port pelayan daripada konfigurasi klien sendiri.

Tulis set peraturan di sekeliling laluan terowong

Fail di bawah menolak secara lalai dan menerima semula lima perkara: loopback, peranti terowong, laluan klien ke pelayannya, penyelesai yang digunakan sebelum terowong wujud, dan dua pertukaran yang memastikan pautan wayarles boleh digunakan. Nama antara muka dan alamat pelayan datang dari mesin anda, jadi gantikan nilai yang anda sahkan. Nombor terowong juga tidak akan sepadan dengan anda.

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

Baris DHCP wujud kerana Mac meminta alamat sebelum memilikinya, jadi permintaan keluar dari port 68 menuju port 67 tanpa alamat sumber yang boleh digunakan. Baris multicast membolehkan sistem menilai sama ada pautan wayarles patut digunakan, dan mengeluarkannya menghasilkan mesin yang melaporkan tiada sambungan pada rangkaian yang berfungsi. Baris titik akhir ialah yang membolehkan OpenVPN mencapai pelayannya langsung; tanpanya block all menggugurkan jabat tangan luar dan terowong tidak pernah naik. Baris penyelesai lebih sempit daripada kebenaran DNS umum, kerana ia menamakan satu alamat dan satu port dan bukannya setiap pertanyaan yang dibuat mesin.

Pengecualian titik akhir dan penyelesai itu ialah dua yang mesti ada; semua yang lain kekal tersekat. Jika klien mendail alamat literal, buang baris penyelesai dan kekalkan baris titik akhir. Jika alamat pelayan berubah, kemas kini baris itu sebelum sambungan seterusnya, atau isi jadual pf daripada cangkuk klien sendiri dan padankan jadual itu sebagai gantinya.

Turunkan terowong, kemudian but semula

Huraikan sebelum memuatkan, kerana ralat sintaks murah dalam ujian kering dan mahal dalam sesi jauh. Kemudian muatkan fail, hidupkan penapis jika ia mati, dan baca semula apa yang sebenarnya berkuat kuasa. Pembacaan semula bukan upacara: sauh lain boleh menambah peraturan yang tidak anda tulis, jadi bandingkan set yang dicetak dengan fail anda.

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

Dengan peraturan dimuatkan, turunkan terowong dan cuba memuatkan halaman. Trafik biasa sepatutnya berhenti, dan ia sepatutnya kekal berhenti selepas mesin tidur dan bangun, kerana peralihan itulah tempat keadaan basi meresap masuk semula. Sambung semula dan sahkan trafik pulih tanpa menyentuh set peraturan. Jika pelayar masih berfungsi semasa terowong turun, ada peraturan yang lebih luas daripada sangkaan anda, dan pembacaan semula biasanya menamakannya.

But semula ialah bahagian yang orang langkau. macOS membaca /etc/pf.conf semasa but, tetapi membaca fail bukanlah sama dengan menghidupkan penapis, jadi set peraturan yang berfungsi sekarang boleh menjadi tidak aktif selepas mula semula. Jalankan sudo pfctl -s info selepas itu dan sahkan baris status melaporkan penapis sebagai dihidupkan.

Kekalkan laluan keluar dan laluan mula semula dengan jujur

Set peraturan yang menyekat segala-galanya juga boleh mengunci anda keluar dari mesin yang anda urus dari jauh. Sunting dari sesi setempat apabila boleh, simpan fail sebelumnya di sebelah yang baru, dan ketahui cara kembali sebelum anda memerlukannya. Perintah di bawah mematikan penapis dan memuat semula salinan yang anda simpan, dan itulah urutan untuk dijalankan dari konsol, bukan melalui terowong yang baru anda potong. Pemulihan lima saat mengalahkan peraturan pintar setiap kali.

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

Kegigihan memerlukan daemon pelancar yang menjalankan pfctl -e dan memuatkan fail anda semasa but. Layannya seperti mana-mana kerja istimewa lain: laluan mutlak, log yang boleh anda baca kemudian, dan ujian pada mesin yang boleh anda capai secara fizikal. Daemon yang gagal senyap meninggalkan mesin tanpa perlindungan dan kelihatan normal.

Dokumenkan jurang, bermula dengan klien VPN kedua yang mencipta peranti terowongnya sendiri. Peraturan anda menamakan satu antara muka terowong, jadi yang kedua kekal tersekat atau ditangkap oleh peraturan luas yang ditambah kemudian. Antara muka tethering dan hotspot hanya muncul kadang-kadang dan wajar mendapat nota yang sama. Tiada satu pun jurang itu menjadi alasan untuk melangkau dasar; itulah syarat ia masih bertahan.

Artikel berkaitan