เครื่องมือ macOS ตัวไหนบังคับให้แอปเดียวออกผ่าน VPN เท่านั้นได้?
ขอบเขตแบบ VPN เท่านั้นต้องมีทั้งเส้นทางและการปฏิเสธ เปรียบเทียบโปรไฟล์รายแอป พร็อกซี ตัวกรอง และ PF แล้วทดสอบแอปที่คุณสนใจเพียงตัวเดียว
บรรทัดเดียวในเอกสารความต้องการ — “แอปนี้ใช้ VPN ได้ และไม่มีอะไรอื่น” — ขออย่างเงียบ ๆ ซึ่งกลไกสองอย่างที่ไม่มีสวิตช์ตัวเดียวมอบให้ได้ ทราฟฟิกต้องการเส้นทางผ่านอุโมงค์ที่ตั้งใจไว้ และทราฟฟิกที่จะออกไปตรง ๆ ต้องถูกปฏิเสธ เครื่องมือที่ทำอย่างหนึ่งได้ดีและอีกอย่างไม่ได้เลยมีอยู่ทั่วไป การเปรียบเทียบที่ถามเพียงว่าอะไรบล็อกได้หรือไม่จึงตอบครึ่งหนึ่งของคำถามอย่างมั่นใจ เขียนขอบเขตก่อน แล้วเลือกองค์ประกอบที่ครอบคลุมทั้งสองครึ่งของมัน
สองความต้องการที่ซ่อนอยู่ในประโยคเดียว
การนำทางคือส่วนที่ใส่การเชื่อมต่อไปยังอุโมงค์หรือพร็อกซี การปฏิเสธคือส่วนที่หยุดการเชื่อมต่อเดิมไม่ให้ออกไปทางเส้นทางอื่น องค์ประกอบต่าง ๆนำไปใช้ มันล้มเหลวต่างกัน และผลิตภัณฑ์อาจยอดเยี่ยมในอย่างหนึ่งโดยไม่พูดถึงอีกอย่างเลย
| Approach | Steers traffic | Refuses direct egress | Knows the app identity |
|---|---|---|---|
| Per-app VPN profile | Yes, for the apps it names | Only if a filter or firewall also blocks | Yes, within its own rules |
| Application proxy setting | Partly, for requests that honour it | No | No |
| Content filter | No | Yes | Yes, if the filter is written that way |
| Local PF ruleset | No | Yes, by address and port | Not reliably |
อ่านตารางเป็นรายการตรวจสอบไม่ใช่การจัดอันดับ ไม่มีแถวใดเติมทั้งสองคอลัมน์กลาง และแถวที่ครอบคลุมทั้งสองคือสององค์ประกอบที่ร่วมมือกัน ฝ่ายหนึ่งถือเส้นทาง อีกฝ่ายถือการปฏิเสธ คอลัมน์อัตลักษณ์สำคัญด้วยเหตุผลอื่น เพราะกฎที่ไม่สามารถระบุชื่อแอปได้ก็บังคับใช้กฎเกี่ยวกับแอปนั้นไม่ได้ สิ่งที่คุณติดตั้งต้องตอบทั้งสามข้อ ไม่เช่นนั้นขอบเขตในเอกสารความต้องการก็ไม่ใช่ขอบเขตบนเครื่อง
การนำทางอย่างเดียวทิ้งทางออกไว้
การตั้งค่าพร็อกซีของแอปเป็นตัวอย่างที่ชัดที่สุดของการนำทางโดยไม่มีการปฏิเสธ มันนำทางคำขอจากแอปที่เคารพพร็อกซีของระบบ และไม่ครอบคลุมสิ่งอื่นใด กระบวนการช่วยเหลือ ตัวอัปเดต บริการเบื้องหลัง หรือโปรโตคอลอื่นสามารถเดินเส้นทางของตัวเองโดยไม่เคยอ่านการตั้งค่านั้นเลย ดังนั้นการเลือกปลายทาง SOCKS ในแผงเดียวจึงไม่ได้สร้างนโยบายห้ามออกตรงสำหรับแอปพลิเคชัน ถ้าความต้องการเกี่ยวกับแอปทั้งหมด ให้ถามว่ากฎระบุองค์ประกอบใดจริง ๆ
โปรไฟล์ VPN รายแอปนำทางได้ดีกว่าพร็อกซี เพราะแพลตฟอร์มเป็นผู้ตัดสินว่าแอปใดเข้าสู่อุโมงค์ แทนที่แต่ละแอปจะตัดสินเอง ถึงกระนั้นมันก็ไม่ปฏิเสธสิ่งใด โปรไฟล์ให้เส้นทาง และทราฟฟิกที่ไม่ตรงกับเส้นทางนั้นก็ใช้เส้นทางปกติ ช่องว่างนั้นคือจุดที่องค์ประกอบที่สองได้ที่ของมัน และนั่นคือเหตุผลที่ผลิตภัณฑ์ที่ดูเหมือนสวิตช์ตัวเดียวมักเป็นสองตัว
การปฏิเสธอย่างเดียวทำให้แอปพัง
เอกสารของ Apple เกี่ยวกับตัวกรองเนื้อหา อธิบายคำตัดสินอนุญาตหรือบล็อกต่อทราฟฟิกขณะผ่านสแต็กเครือข่าย คำตัดสินนั้นไม่ใช่อุโมงค์และไม่ใช่การเชื่อมต่อพร็อกซี เพราะมันตัดสินว่าบางสิ่งดำเนินต่อได้หรือไม่ ไม่ใช่ไปที่ใด ตัวกรองเดียวบังคับใช้การปฏิเสธได้อย่างสมบูรณ์และทิ้งแอปพลิเคชันไว้ใช้ไม่ได้ พร้อมบันทึกที่สะอาดและไม่มีคำอธิบาย คำตัดสินของตัวกรองหยุดการเชื่อมต่อได้แต่ไม่เคยให้อุโมงค์ ดังนั้นการจับคู่กับการนำทางจึงเป็นการตัดสินใจออกแบบ ไม่ใช่ส่วนเสริมที่เป็นทางเลือก
ชุดกฎ PF ที่จัดการในเครื่องตั้งอยู่ที่อีกปลายของสเปกตรัมนั้น เป็นการตัดสินใจสนับสนุนที่ชอบธรรมบนเครื่องที่ผู้ดูแลเป็นเจ้าของ และไม่ใช่รากฐานของผลิตภัณฑ์ที่แจกจ่ายได้โดยอัตโนมัติ เพราะผู้ที่เป็นเจ้าของชุดกฎก็เป็นเจ้าของปฏิสัมพันธ์กับผู้ใช้ไฟร์วอลล์รายอื่น เส้นทางการอัปเกรด และการกู้คืนเมื่อกฎผิด การเพิ่ม PF ให้ผลิตภัณฑ์ไม่ได้ลบคำถามเรื่องความเป็นเจ้าของนั้น แต่กำหนดมัน
การติดตั้งเป็นตัวตัดสินว่ากฎจะยังอยู่พรุ่งนี้หรือไม่
วิธีที่ Network Extension ถูกติดตั้งบนแพลตฟอร์ม Apple ขึ้นอยู่กับประเภทผู้ให้บริการ การแพ็กเกจ และเวอร์ชันระบบปฏิบัติการที่อยู่ตรงหน้าคุณ ส่วนขยายแอปบน macOS ทำงานในบริบทผู้ใช้และสิ้นสุดเมื่อผู้ใช้รายนั้นออกจากระบบ ขณะที่ส่วนขยายระบบมีบริบททั่วโลกที่ไม่ขึ้นกับเซสชัน หากการป้องกันต้องอยู่รอดหลังออกจากระบบ ความแตกต่างนั้นคือการออกแบบทั้งหมด ไม่ใช่เชิงอรรถ ยืนยันเส้นทางการติดตั้งก่อนสัญญาเรื่องพฤติกรรม เพราะโค้ดเดียวกันลงจอดต่างกันตามประเภทส่วนขยายที่ส่งไป
ความพร้อมของซอร์สเป็นเรื่องแยกจากการบังคับใช้ การอ่านที่เก็บโค้ดบอกคุณว่าบางสิ่งถูกนำไปใช้อย่างไร ไม่ใช่ว่าไบนารีที่ติดตั้งได้รับอนุญาตให้ทำอะไรบนเครื่องนี้ การลงนาม การติดตั้ง และการอนุญาตยังใช้อยู่ และคำแนะนำที่สร้างขึ้นรอบส่วนขยายเคอร์เนลที่ล้าสมัยหรือกลฉีดไลบรารีอธิบายแพลตฟอร์มอื่นและท่าทีความเสี่ยงอื่น ไม่ว่าจะเคยทำงานได้ดีเพียงใด
กรณีตอบรับที่ระบุชื่อแอป
เลือกการกระทำเดียวที่แอปพลิเคชันทำเอง บันทึกที่อยู่ที่มันควรไปถึงและที่อยู่นั้นเป็น IPv4 หรือ IPv6 แล้วทำการกระทำเดิมซ้ำในสถานะอนุมัติที่ไม่มีอุโมงค์ การรันครั้งที่สองต้องสร้างการปฏิเสธที่ประกาศไว้ ไม่ใช่การลองใหม่ตรง ๆ อย่างเงียบ ๆ นั่นคือครึ่งที่คนปล่อยไว้ไม่ระบุ และเป็นครึ่งเดียวที่พิสูจน์ว่าการปฏิเสธมีอยู่จริง รันมันก่อนเมื่อมีอุโมงค์ เพื่อให้ความแตกต่างระหว่างสองผลลัพธ์มาจากอุโมงค์ที่หายไปเท่านั้น
จากนั้นไล่ผ่านการเปลี่ยนสถานะที่ความต้องการระบุ การรีสตาร์ตแอป กระบวนการช่วยเหลือที่ถูกกระตุ้น อุโมงค์ที่เชื่อมต่อใหม่ เครื่องที่เปลี่ยนเครือข่าย และการออกจากระบบหรือรีบูตในที่ที่เกี่ยวข้อง หน้า IP สาธารณะของเบราว์เซอร์ไม่ใช่การทดสอบซ็อกเก็ตของแอปอื่น จึงแทนที่อันนี้ไม่ได้ ในที่ที่ไม่มีวิธีติดตั้งที่รองรับครอบคลุมพฤติกรรมจริงของแอป สภาพแวดล้อมแยกที่ได้รับอนุญาตซึ่งมีเกตเวย์ชัดเจนและไม่มีทางออกอื่นคือการตัดสินใจกักกันที่มีค่าใช้จ่ายในการจัดการของตัวเอง ไม่ใช่สิ่งทดแทนกล่องเลือก
ปิดท้ายด้วยการเขียนสี่รายการ แอปประกอบด้วยองค์ประกอบใด ใครถือการนำทาง ใครถือการปฏิเสธ และสถานะที่กฎยังต้องใช้บังคับ ที่เก็บโค้ดสาธารณะเป็นเกณฑ์การเลือกได้หนึ่งข้อ แต่ไม่ใช่หนึ่งในสี่ข้อนั้น และรายการเหล่านั้นเป็นตัวตัดสินว่าเครื่องมือที่กำหนดตรงตามความต้องการด้านเครือข่ายหรือไม่