โปรไฟล์ไฟร์วอลล์กับทางออก VPN: ทำไมสาธารณะไม่ใช่เส้นทาง
โปรไฟล์ไฟร์วอลล์เลือกว่าชุดกฎใดมีผล มันไม่บอกว่าอินเทอร์เฟซใดพาแพ็กเก็ตไป และการบล็อกแบบชัดเจนชนะการอนุญาตที่แคบกว่า
กฎฟังดูแม่นยำ: อนุญาตทราฟฟิกในเครื่องบนโปรไฟล์ส่วนตัว และอนุญาตเฉพาะทราฟฟิก VPN บนโปรไฟล์สาธารณะ แต่ไม่ใช่เช่นนั้น เพราะโปรไฟล์เครือข่ายเลือกว่าชุดกฎไฟร์วอลล์ใดมีผล และไม่บอกว่าอะแดปเตอร์ใดพาแพ็กเก็ตไป การถือชื่อโปรไฟล์เป็นข้อกำหนดของเส้นทางคือข้อผิดพลาดที่ทำให้การออกแบบทางออกแบบจำกัดดูเสร็จแล้วทั้งที่ยังไม่เสร็จ
เขียนลำดับการไหลก่อน แล้วจึงตัดสินใจว่ากลไกใดสามารถบังคับแต่ละอย่างได้จริง รายการการไหลนั้นเป็นสิ่งเดียวที่อยู่รอดหลังการเปลี่ยนกฎครั้งถัดไป
หมวดหมู่เลือกกฎ ไม่ใช่เส้นทาง
เมื่อ Windows จัดประเภทเครือข่ายเป็นสาธารณะหรือส่วนตัว ไฟร์วอลล์จะใช้ชุดกฎที่กำหนดค่าไว้สำหรับโปรไฟล์นั้น การจัดประเภทเป็นไปตามเครือข่ายที่อะแดปเตอร์เชื่อมต่อ และชุดกฎตัดสินว่าอะไรได้รับอนุญาตบนเครือข่ายนั้น ข้อเท็จจริงเหล่านี้ไม่มีข้อใดขึ้นกับว่าทราฟฟิกของแอปพลิเคชันใช้ทันเนลหรือไม่ ความเป็นอิสระนั้นคือความยากทั้งหมด
การเลือกเส้นทางทำโดยการกำหนดเส้นทาง ผ่านเมตริกของอินเทอร์เฟซและคำนำหน้าที่ทันเนลติดตั้ง โปรไฟล์จึงอาจถูกติดป้ายว่าสาธารณะขณะที่การเชื่อมต่อของแอปพลิเคชันใช้เส้นทางกายภาพ และไฟร์วอลล์ก็ยังจะรายงานว่าใช้ชุดกฎสาธารณะ
ดังนั้นกฎที่จำกัดเฉพาะโปรไฟล์จึงไม่สามารถหมายถึงเฉพาะทันเนลได้ คุณสมบัติสองอย่างนี้ถูกตัดสินโดยองค์ประกอบที่ต่างกัน และอย่างหนึ่งแทนอีกอย่างไม่ได้
| Flow | What decides it | What a rule can enforce |
|---|---|---|
| VPN client to its endpoint | Routing plus the outer transport | Allow the client process before the tunnel exists |
| Application to an internet host | Interface metric and prefix length | Block the process unless the tunnel interface is up |
| Application to a LAN host | Local subnet route | Allow one destination, not the whole category |
การบล็อกแบบชัดเจนอยู่เหนือการอนุญาตที่แคบกว่า
แนวทางกฎไฟร์วอลล์ของ Microsoft แยกความแตกต่างระหว่างการอนุญาตที่เป็นข้อยกเว้นของการกระทำบล็อกเริ่มต้น กับการบล็อกแบบชัดเจนที่ขัดแย้งกับการอนุญาต การบล็อกแบบชัดเจนชนะความขัดแย้งนั้น และกฎขาออกก็ปฏิบัติตามลำดับความสำคัญเดียวกัน
ดังนั้นสูตรยอดนิยมที่เพิ่มกฎบล็อกทุกอย่างแล้วพึ่งการอนุญาตที่แคบกว่าซึ่งวางไว้ข้างบน จึงไม่ทำสิ่งที่ผู้เขียนคาดหวัง ไฟร์วอลล์ของ Windows ไม่ได้แก้ความขัดแย้งตามลำดับกฎที่ผู้ดูแลระบบกำหนด การบล็อกมีผลทันที และแอปพลิเคชันที่เชื่อมต่อรายงานว่าหมดเวลา กฎที่ดูเหมือนข้อยกเว้นไม่เคยอยู่ในเกมเลย
รูปแบบที่รองรับคือ นโยบายปฏิเสธโดยค่าเริ่มต้นพร้อมกฎอนุญาตที่ได้รับอนุมัติ ซึ่งแต่ละการอนุญาตระบุชื่อโปรแกรม บริการ หรือปลายทางอย่างแม่นยำพอที่จะตรวจสอบได้ การออกแบบนั้นทนต่อการตรวจสอบ เพราะข้อยกเว้นทุกข้อมองเห็นได้ และไม่มีข้อใดขึ้นกับลำดับที่สร้างขึ้น
กฎสองข้อที่ขัดแย้งกันนั้นแย่กว่ากฎข้อเดียว เพราะพฤติกรรมที่ได้นั้นถูกต้องและอธิบายไม่ได้ในเวลาเดียวกัน
ให้เจ้าของเดียวแก่นโยบายขาออก
ไคลเอนต์ VPN ที่รองรับดูแลพฤติกรรมการบล็อกของตัวเองและข้อยกเว้นปลายทางของตัวเองอยู่แล้ว การเพิ่มกฎด้วยมือที่ไม่ประสานกันอาจทำให้ไคลเอนต์นั้นติดอยู่นอกทันเนลที่ต้องใช้ในการตั้งค่า หรือเปิดเส้นทางที่สองทิ้งไว้โดยไม่มีใครสังเกต
ตัดสินใจว่าใครเป็นเจ้าของนโยบายขาออกก่อนเขียนกฎ: การกำหนดค่าของไคลเอนต์เอง นโยบายไฟร์วอลล์ที่จัดการ หรือรายการข้อยกเว้นภายในที่จัดทำเอกสารพร้อมเจ้าของ จากนั้นปรับชั้นต่างๆ ให้สอดคล้องกันแทนที่จะซ้อนการทดลองจนมีบางอย่างเชื่อมต่อได้ เจ้าของที่ระบุชื่อก็คือคนที่คุณถามเมื่อสองชั้นไม่ตรงกัน
รักษาช่องทางกู้คืนไว้ก่อนเปลี่ยนแปลงสิ่งใด เครื่องระยะไกลที่ถูกล็อกออกจากเส้นทางการจัดการของตัวเองเป็นผลลัพธ์ที่แย่กว่าช่องว่างนโยบายที่คุณกำลังปิด กฎกู้คืนพิสูจน์ได้ง่ายกว่าเมื่อเขียนไว้ล่วงหน้า และหาเจอง่ายกว่าเมื่อการเปลี่ยนแปลงผิดพลาดในเวลาที่ไม่มีใครชอบ
ทดสอบผลลัพธ์สี่อย่างแทนการอ่านป้าย
นโยบายดีได้เท่ากับกรณีที่มันแยกแยะได้ ดังนั้นจงถือป้ายโปรไฟล์เป็นจุดเริ่มต้นไม่ใช่ผลลัพธ์ ผลลัพธ์สี่อย่างบอกว่ามันทำงานหรือไม่: คำขอ LAN ที่ตั้งใจสำเร็จ คำขออินเทอร์เน็ตที่ครอบคลุมสำเร็จ คำขอตรงที่ต้องห้ามล้มเหลว และกรณีทันเนลล้มเหลวมีพฤติกรรมตามที่ออกแบบแทนที่จะถอยกลับอย่างเงียบๆ เขียนผลลัพธ์ทั้งสี่ไว้ข้างการเปลี่ยนกฎ แผนทดสอบที่มีสี่กรณีที่ระบุชื่อนั้นสั้นพอที่จะรันทุกครั้งและเฉพาะเจาะจงพอที่จะล้มเหลวอย่างชัดเจน
Get-NetConnectionProfile | Select-Object Name,NetworkCategory,InterfaceAlias Get-NetFirewallProfile | Select-Object Name,DefaultOutboundAction Get-NetFirewallRule -Direction Outbound -Enabled True | Where-Object Action -eq Block | Select-Object DisplayName,Profile
คำสั่งแรกแสดงว่าแต่ละเครือข่ายที่เชื่อมต่อถูกจัดประเภทอย่างไร ซึ่งมักไม่ใช่สิ่งที่ผู้เขียนกฎสันนิษฐาน คำสั่งที่สองแสดงการกระทำเริ่มต้นต่อโปรไฟล์ และคำสั่งที่สามแสดงรายการบล็อกขาออกที่เปิดใช้งาน รวมถึงรายการที่จะลบล้างการอนุญาตที่แคบกว่าอย่างเงียบๆ
รันสี่กรณีอีกครั้งหลังการเปลี่ยนแปลงเครือข่าย เพราะโปรไฟล์อาจถูกจัดประเภทใหม่เมื่อเครื่องเชื่อมต่อกับเครือข่ายอื่น ป้ายโปรไฟล์ที่ตรงกันไม่ใช่หลักฐานว่าเส้นทางคือเส้นทางที่คุณตั้งใจ