OpenVPN-д зориулсан macOS pf хамгаалалтын унтраалга: хаагдах дүрэм
pf дүрмийн багц нь туннель доош байх үед шууд урсгалыг хаадаг. Клиентийн сервер рүүгээ хүрэх замыг хадгалж, дараа нь туннелийг унтрааж хаалтыг батлаарай.
macOS дээр хамгаалалтын унтраалга нь ард нь байгаа пакет шүүлтүүрийн бодлогоос илүү сайн байж чадахгүй, pf бол тэр бодлогыг хэрэгжүүлдэг хэсэг юм. Бодлого нэгэн зэрэг хоёр эсрэг зүйл хийх ёстой: клиент өөрийн серверт хүрч туннель оршин тогтнох боломж олгох, бусад бүхнийг шууд гарахаас зогсоох. Нийтлэгдсэн дүрмийн багцуудын ихэнх нь хоёр дахь ажлыг хийж, эхнийхийг мартдаг тул машин хамгаалалт олохын оронд холболтоо алддаг. Ажилладаг хувилбар нь төгсгөлийн цэг, шийдэгч, туннелийг нэрлэдэг, үүнээс өөр юу ч биш.
Пакет шүүлтүүр юу шийдэж чадах, юуг чадахгүй
pf интерфейс, хаяг, протоколын дугаар, порт зэргийг хардаг, тэндээ зогсдог. Аль процесс сокет нээснийг хэзээ ч мэддэггүй тул нэг програмын төлөө бичсэн зөвшөөрөл тэр портод хүрч чадах бүх програмын зөвшөөрөл болдог. Ингэж өгөөмөр UDP үл хамаарах зүйл хамгаалалтын унтраалгыг дахин энгийн сүлжээ болгодог. Аппликейшныг мэддэг хаалт нь клиент эсвэл системийн өргөтгөлд хамаарна, энэ файлд биш.
Шүүлтүүр маршрут ч үүсгэдэггүй. Клиент унах үед анхдагч маршрут нас барсан туннель рүү заасаар байж болох бөгөөд pf үүнийг Wi-Fi руу чимээгүй буцахын оронд хаагдсан пакет болгоно. Хаалт нь зориудын үр дүн, тойрч гарах ёстой эвдрэл биш.
Үр дүнг дүрмийн текстээс илүү дараалал ихэвчлэн шийддэг. quick байхгүй бол pf тохирсны дараа ч үнэлгээг үргэлжлүүлж, хамгийн сүүлд тохирсон дүрэм ялдаг тул доорх өргөн нэвтрүүлэг дээрх болгоомжтой үл хамаарах зүйлсийг хүчингүй болгоно. Нэвтрүүлгийг quick гэж тэмдэглэвэл эхний тохирол эцсийн болно, бодлогын зохиолч ихэвчлэн үүнийг хэлэх гэдэг.
Эхлээд интерфейс ба төгсгөлийн цэгийн баримтыг уншаарай
Утасгүй интерфейсүүд Mac бүр дээр ижил дугаарлагддаггүй, туннелийн төхөөрөмж ачааллуудын хооронд өөрчлөгдөж болох дугаар авдаг. Байхгүй төхөөрөмжийг нэрлэсэн дүрэм задлан шинжилгээнд унадаг, энэ нь чанга бөгөөд барихад хялбар, харин буруу байгаа төхөөрөмжийг нэрлэсэн дүрэм цэвэр задлагдаж, таны зогсоохыг хүссэн урсгалыг зөвшөөрдөг.
Баримтуудыг клиент холбогдсон үед цуглуулаарай, учир нь туннелийн төхөөрөмж зөвхөн тэр үед байдаг. Танд анхдагч маршрутыг барьж буй интерфейс, клиентийн үүсгэсэн төхөөрөмж, мөн түүний залгах серверийн хаяг болон порт хэрэгтэй. Яг энэ сүүлчийн утгыг ихэнх дүрмийн багц орхидог, үүнийг орхих нь хуулсан багц өөрийн туннелийг хаах шалтгаан юм.
route -n get default
ifconfig -l
scutil --nc list
Эхний команд нь одоо ялж буй интерфейсийг нэрлэдэг, хоёр дахь нь цөмд мэдэгдэх бүх төхөөрөмжийг жагсаадаг, гурав дахь нь систем ажиллуулж чадах VPN тохиргоог харуулдаг. Тэдгээр хариултыг бичээд, дараа нь клиентийн өөрийн тохиргооноос серверийн хаяг, портыг уншаарай.
Дүрмийн багцыг туннелийн зам тойруулан бичээрэй
Доорх файл анхдагчаар татгалзаж, таван зүйлийг дахин нэвтрүүлдэг: loopback, туннелийн төхөөрөмж, клиентийн өөрийн сервер рүүгээ хүрэх зам, туннель үүсэхээс өмнө ашиглагдах шийдэгч, мөн утасгүй холбоосыг ашигтай байлгах хоёр солилцоо. Интерфейсийн нэр, серверийн хаяг таны машинаас ирдэг тул баталгаажуулсан утгуудаа тавь. Туннелийн дугаар ч таныхтай тохирохгүй.
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 мөр нь Mac хаягтай болохоос өмнө хаяг асуудаг тул байдаг, тиймээс хүсэлт ашигтай эх хаяггүйгээр 68 портоос 67 порт руу гардаг. Multicast мөр нь утасгүй холбоосыг ашиглах нь үнэ цэнэтэй эсэхийг системд дүгнүүлдэг, үүнийг хасахад ажиллаж буй сүлжээнд ч холболтгүй гэж мэдээлдэг машин үүсдэг. Төгсгөлийн цэгийн мөр нь OpenVPN өөрийн серверт ер нь хүрэх боломж олгодог; үүнгүйгээр block all гадаад гар барилтыг хаяж, туннель хэзээ ч босохгүй. Шийдэгчийн мөр нь ерөнхий DNS зөвшөөрлөөс нарийн, учир нь машин хийх бүх асуулгын оронд нэг хаяг, нэг портыг нэрлэдэг.
Төгсгөлийн цэг ба шийдэгчийн эдгээр үл хамаарах зүйлс бол байх ёстой хоёр нь; бусад бүхэн хаагдсан хэвээр. Хэрэв клиент шууд утгат хаяг руу залгаж байвал шийдэгчийн мөрийг хасч, төгсгөлийн цэгийн мөрийг үлдээ. Хэрэв серверийн хаяг өөрчлөгдвөл дараагийн холболтын өмнө тэр мөрийг шинэчил, эсвэл клиентийн өөрийн дэгээнээс pf хүснэгт дүүргэж, оронд нь хүснэгтийг тохируул.
Туннелийг буулгаад дараа нь дахин ачаал
Ачаалахаас өмнө задлан шинжил, учир нь синтаксийн алдаа хуурай туршилтад хямд, алсын сессэд үнэтэй. Дараа нь файлыг ачаалж, шүүлтүүр унтарсан бол асааж, үнэхээр хүчин төгөлдөр юу байгааг буцааж унш. Буцааж унших нь ёслол биш: өөр зангуу таны бичээгүй дүрмийг нэмж болох тул хэвлэсэн багцыг өөрийн файлтай харьцуул.
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
Дүрмүүд ачаалагдсан байхад туннелийг буулгаад хуудас ачаалахыг оролдоорой. Энгийн урсгал зогсох ёстой, машин унтаж сэрсний дараа ч зогссон хэвээр байх ёстой, учир нь тэр шилжилтэд хуучирсан төлөв дахин шурган ордог. Дахин холбогдож, дүрмийн багцыг хөндөхгүйгээр урсгал сэргэж буйг батал. Хэрэв туннель буусан байхад хөтөч ажиллаж байвал зарим дүрэм таны бодсоноос өргөн байна, буцааж унших нь ихэвчлэн түүнийг нэрлэдэг.
Дахин ачаалах нь хүмүүсийн алгасдаг хэсэг. macOS ачаалах үед /etc/pf.conf уншдаг, гэхдээ файлыг унших нь шүүлтүүрийг асаахтай ижил биш тул одоо ажиллаж буй дүрмийн багц дахин ачаалсны дараа идэвхгүй байж болно. Дараа нь sudo pfctl -s info ажиллуулж, төлөвийн мөр шүүлтүүрийг асаалттай гэж мэдээлж буйг батал.
Гарах болон дахин ачаалах замыг шударгаар хадгал
Бүгдийг хаадаг дүрмийн багц таныг алсаас удирдаж буй машинаас ч гаргаж болно. Боломжтой үед локал сессээс засварлаж, өмнөх файлыг шинэ файлын хажууд хадгалж, буцах замыг хэрэгтэй болохоос өмнө мэд. Доорх командууд шүүлтүүрийг унтрааж, хадгалсан хуулбарыг дахин ачаална, энэ нь дөнгөж тасалсан туннелээр биш, консолоос ажиллуулах дараалал юм. Таван секундын буцаалт бүр удаа ухаалаг дүрмийг ялдаг.
sudo pfctl -d
sudo pfctl -f /etc/pf.conf.previous
sudo pfctl -s rules
Тогтвортой байдалд pfctl -e ажиллуулж, ачаалах үед таны файлыг ачаалдаг launch daemon хэрэгтэй. Бусад эрх бүхий ажил шиг хандаарай: үнэмлэхүй зам, дараа нь уншиж болох лог, биечлэн хүрч болох машин дээрх туршилт. Чимээгүйгээр бүтэлгүйтсэн демон машиныг хамгаалалтгүй, хэвийн харагдах байдлаар үлдээдэг.
Цоорхойнуудыг баримтжуул, эхлээд өөрийн туннелийн төхөөрөмж үүсгэдэг хоёр дахь VPN клиентээс эхэл. Таны дүрмүүд нэг туннелийн интерфейсийг нэрлэдэг тул хоёр дахь нь хаагдсан хэвээр үлдэнэ эсвэл дараа нэмэгдсэн өргөн дүрэмд баригдана. Tethering болон hotspot интерфейс зөвхөн заримдаа гарч ирдэг бөгөөд мөн адил тэмдэглэл хүртэх ёстой. Эдгээр цоорхойн аль нь ч бодлогыг алгасах шалтгаан биш; тэдгээр нь бодлого хараахан хүчинтэй байгаа нөхцөл юм.