macOS da himoya kaliti orqasidagi paket filtri siyosati qanchalik yaxshi bo’lsa, shunchalik yaxshi, va pf o’sha siyosatni bajaradigan qism. Siyosat bir vaqtning o’zida ikkita qarama-qarshi ish qilishi kerak: tunnel mavjud bo’lishi uchun mijozning serveriga yetib borishiga yo’l qo’yish, va qolgan hamma narsaning to’g’ridan-to’g’ri chiqishini to’xtatish. E’lon qilingan qoidalar to’plamlarining ko’pchiligi ikkinchisini bajaradi va birinchisini unutadi, shuning uchun mashina himoya olish o’rniga aloqani yo’qotadi. Ishlaydigan versiya oxirgi nuqta, hal qiluvchi va tunnelni nomlaydi, ortiqchasini emas.

Paket filtri nimani hal qila oladi, nimani yo’q

pf interfeyslar, manzillar, protokol raqamlari va portlarga qaraydi va shu yerda to’xtaydi. U qaysi jarayon soket ochganini hech qachon bilmaydi, shuning uchun bitta dastur uchun yozilgan ruxsat xuddi shu portga yeta oladigan har bir dastur uchun ruxsatga aylanadi. Shu tarzda saxovatli UDP istisnosi himoya kalitini yana oddiy tarmoqqa aylantiradi. Ilovani biladigan to’sish mijozga yoki tizim kengaytmasiga tegishli, bu faylga emas.

Filtr marshrutlar ham yaratmaydi. Mijoz yiqilganda standart marshrut hali ham o’lik tunnelga ishora qilishi mumkin, va pf buni Wi-Fi ga jimgina qaytish o’rniga to’silgan paketlarga aylantiradi. To’siq kutilgan natija, chetlab o’tiladigan nosozlik emas.

Natijani qoida matnidan ko’ra ko’proq tartib hal qiladi. quick bo’lmasa pf mos kelgandan keyin ham baholashni davom ettiradi va oxirgi mos kelgan qoida g’olib bo’ladi, shuning uchun pastdagi keng o’tish yuqoridagi ehtiyotkor istisnolarni bekor qiladi. O’tishlarni quick bilan belgilash birinchi moslikni yakuniy qiladi, siyosat muallifi odatda shuni nazarda tutadi.

Avval interfeys va oxirgi nuqta faktlarini o’qing

Simsiz interfeyslar har bir Mac da bir xil raqamlanmaydi, va tunnel qurilmasi yuklashlar orasida o’zgarishi mumkin bo’lgan raqam oladi. Mavjud bo’lmagan qurilmani nomlaydigan qoida tahlil paytida muvaffaqiyatsiz bo’ladi, bu baland ovozli va ushlash oson, noto’g’ri mavjud qurilmani nomlaydigan qoida esa toza tahlil qilinadi va siz to’xtatmoqchi bo’lgan trafikni o’tkazadi.

Faktlarni mijoz ulangan paytda to’plang, chunki tunnel qurilmasi faqat o’shanda mavjud. Sizga standart marshrutni ushlab turgan interfeys, mijoz yaratgan qurilma, va u qo’ng’iroq qiladigan serverning manzili va porti kerak. Aynan o’sha oxirgi qiymatni ko’pchilik qoidalar to’plami tashlab ketadi, va uni tashlab ketish nusxalangan to’plamning o’z tunnelini to’sish sababidir.

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

Birinchi buyruq hozir g’olib bo’lgan interfeysni nomlaydi, ikkinchisi yadro biladigan har bir qurilmani sanaydi, uchinchisi tizim ishga tushira oladigan VPN konfiguratsiyalarini ko’rsatadi. O’sha javoblarni yozib oling, keyin mijozning o’z konfiguratsiyasidan server manzili va portini o’qing.

Qoidalar to’plamini tunnel yo’li atrofida yozing

Quyidagi fayl sukut bo’yicha rad etadi va besh narsani yana qabul qiladi: loopback, tunnel qurilmasi, mijozning o’z serveriga yo’li, tunnel paydo bo’lishidan oldin ishlatiladigan hal qiluvchi, va simsiz aloqani foydali ushlab turadigan ikki almashinuv. Interfeys nomlari va server manzili sizning mashinangizdan keladi, shuning uchun tasdiqlagan qiymatlaringizni qo’ying. Tunnel raqami ham siznikiga mos kelmaydi.

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 qatori Mac manzilga ega bo’lishidan oldin manzil so’ragani uchun bor, shuning uchun so’rov foydali manba manzilisiz 68-portdan 67-portga qarab chiqadi. Multicast qatori tizimga simsiz aloqa ishlatishga arziydimi-yo’qmi baholash imkonini beradi, va uni olib tashlash ishlab turgan tarmoqda ham aloqa yo’q deb xabar beradigan mashina yaratadi. Oxirgi nuqta qatori OpenVPN o’z serveriga umuman yetib borishiga imkon beradigan qatordir; usiz block all tashqi qo’l siqishni tashlab yuboradi va tunnel hech qachon ko’tarilmaydi. Hal qiluvchi qatori umumiy DNS ruxsatidan tordir, chunki mashina qiladigan har bir so’rov o’rniga bitta manzil va bitta portni nomlaydi.

O’sha oxirgi nuqta va hal qiluvchi istisnolari mavjud bo’lishi kerak bo’lgan ikkitasidir; qolgan hamma narsa to’silgan holda qoladi. Agar mijoz so’zma-so’z manzilga qo’ng’iroq qilsa, hal qiluvchi qatorini olib tashlang va oxirgi nuqta qatorini saqlang. Agar server manzili o’zgarsa, keyingi ulanishdan oldin o’sha qatorni yangilang, yoki mijozning o’z ilgagidan pf jadvalini to’ldiring va buning o’rniga jadvalni moslang.

Tunnelni tushiring, keyin qayta yuklang

Yuklashdan oldin tahlil qiling, chunki sintaksis xatosi quruq sinovda arzon va masofaviy sessiyada qimmat. Keyin faylni yuklang, filtr o’chirilgan bo’lsa yoqing, va aslida nima kuchda ekanini qayta o’qing. Qayta o’qish marosim emas: boshqa langar siz yozmagan qoidalarni qo’shishi mumkin, shuning uchun chop etilgan to’plamni o’z faylingiz bilan solishtiring.

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

Qoidalar yuklangan holatda tunnelni tushiring va sahifani yuklashga harakat qiling. Oddiy trafik to’xtashi kerak, va mashina uxlab uyg’ongandan keyin ham to’xtagan qolishi kerak, chunki aynan o’sha o’tishda eski holat qaytib kiradi. Qayta ulanib, qoidalar to’plamiga tegmasdan trafik tiklanishini tasdiqlang. Agar tunnel tushirilgan bo’lsa ham brauzer ishlasa, qandaydir qoida siz o’ylagandan kengroq, va qayta o’qish odatda uni nomlaydi.

Qayta yuklash - odamlar o’tkazib yuboradigan qism. macOS yuklanishda /etc/pf.conf ni o’qiydi, lekin faylni o’qish filtrni yoqish bilan bir xil emas, shuning uchun hozir ishlaydigan qoidalar to’plami qayta yuklashdan keyin faol bo’lmasligi mumkin. Keyin sudo pfctl -s info ni ishga tushiring va holat qatori filtrni yoqilgan deb xabar berishini tasdiqlang.

Chiqish va qayta yuklash yo’lini halol tuting

Hamma narsani to’sadigan qoidalar to’plami sizni masofadan boshqaradigan mashinadan tashqarida ham qoldirishi mumkin. Imkoni boricha mahalliy sessiyadan tahrirlang, oldingi faylni yangisining yonida saqlang, va kerak bo’lishidan oldin qaytish yo’lini biling. Quyidagi buyruqlar filtrni o’chiradi va siz saqlagan nusxani qayta yuklaydi, va bu yangi kesib tashlagan tunnelingiz orqali emas, konsoldan ishga tushiriladigan ketma-ketlik. Besh sekundlik qaytish har safar aqlli qoidani yengadi.

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

Barqarorlik uchun pfctl -e ni ishga tushiradigan va yuklanishda faylingizni yuklaydigan launch daemon kerak. Unga boshqa har qanday imtiyozli ish kabi munosabatda bo’ling: mutlaq yo’llar, keyin o’qiy oladigan jurnal, va jismonan yetib borishingiz mumkin bo’lgan mashinada sinov. Jim muvaffaqiyatsiz bo’lgan daemon mashinani himoyasiz va oddiy ko’rinishda qoldiradi.

Bo’shliqlarni hujjatlashtiring, o’z tunnel qurilmasini yaratadigan ikkinchi VPN mijozi bilan boshlang. Sizning qoidalaringiz bitta tunnel interfeysini nomlaydi, shuning uchun ikkinchisi to’silgan holda qoladi yoki keyinroq qo’shilgan keng qoidaga tushadi. Tethering va hotspot interfeyslari faqat ba’zan ko’rinadi va xuddi shu izohga loyiq. Bu bo’shliqlarning hech biri siyosatni chetlab o’tish uchun sabab emas; ular siyosat hali ham amal qiladigan shartlardir.

O'xshash maqolalar