นำเข้าโปรไฟล์ในไคลเอนต์เดสก์ท็อป แล้วความล้มเหลวแรกมักเป็นบรรทัดที่ไคลเอนต์ปฏิเสธที่จะปฏิบัติตาม: ฮุกสคริปต์ที่มันจะไม่รัน หรือค่า script-security ที่มันเห็นว่าเปิดกว้างเกินไป การเพิ่มตัวเลขจะทำให้กล่องโต้ตอบหายไป แต่ก็ยังขยายขอบเขตสิ่งที่โปรไฟล์นั้นได้รับอนุญาตให้เรียกใช้บนเครื่องของคุณด้วย ซึ่งเป็นเรื่องแปลกที่จะให้เพียงเพื่อปิดคำเตือน ติดตามการนำเข้าจนถึงไดเรกทีฟ แล้วการตัดสินใจจะชัดเจนขึ้น

จากกล่องนำเข้าถึงไดเรกทีฟ

โปรไฟล์คือไฟล์ข้อความที่มีไดเรกทีฟ และไคลเอนต์อ่านมันก่อนที่อุโมงค์ใดจะเกิดขึ้น ไดเรกทีฟอย่าง up, down หรือ tls-verify ระบุชื่อโปรแกรมภายนอกที่ OpenVPN ควรเรียกใช้ในเวลาที่กำหนด ไม่ว่า OpenVPN จะยินยอมเรียกใช้หรือไม่เป็นการตั้งค่าแยกต่างหากชื่อ script-security และโปรไฟล์มักตั้งค่านั้นด้วย

ดังนั้นคำเตือนจึงไม่เกี่ยวกับการเข้ารหัสหรือใบรับรอง แต่เกี่ยวกับไฟล์คอนฟิกูเรชันที่ขอให้ไคลเอนต์เรียกใช้บางอย่างบนโฮสต์ และไคลเอนต์ที่ตรวจสอบว่าระดับสิทธิ์ปัจจุบันของมันอนุญาตคำขอนั้นหรือไม่

ในขั้นนี้ความล้มเหลวสองแบบดูคล้ายกัน โปรไฟล์ที่ขอระดับที่ไคลเอนต์จะไม่ให้จะสร้างการปฏิเสธ โปรไฟล์ที่ขอระดับที่ไคลเอนต์ให้แต่สคริปต์หายไปกลับสร้างความล้มเหลวขณะรันแทน และทั้งสองถูกทำให้สับสนในกระทู้สนับสนุน อย่างหนึ่งเป็นคำถามเรื่องสิทธิ์ อีกอย่างเป็นคำถามเรื่องการแพ็กเกจ

แต่ละระดับเปิดอะไรจริง

ระดับ 0 ห้ามการเรียกโปรแกรมภายนอกโดยสิ้นเชิง ซึ่งสอดคล้องสำหรับไคลเอนต์ที่กำหนดอินเทอร์เฟซของตัวเองโดยไม่ต้องพึ่งความช่วยเหลือ และไม่สอดคล้องสำหรับไคลเอนต์ที่เรียกใช้ระบบปฏิบัติการ ระดับ 1 ซึ่งเป็นค่าเริ่มต้น อนุญาตไฟล์เรียกใช้ที่มีมาในตัวซึ่งการกำหนดอินเทอร์เฟซและเส้นทางต้องการ ทั้งสองระดับไม่รันสิ่งใดที่ผู้ใช้จัดหาให้

LevelWhat OpenVPN may executeWhat it exposes
0No external programs at allInterface and route setup must not depend on helpers
1 (default)Built-in helpers such as ip, ifconfig, route or netshPrivileged commands the platform already ships
2Built-in helpers plus user-defined scriptsWhatever the named script does with the client's privileges
3Everything above, plus passwords in environment variablesCredentials visible to child processes and their logs

ระดับ 2 คือพรมแดนที่น่าสนใจ เพราะมันยอมรับสคริปต์ที่ผู้ใช้กำหนดเอง จากจุดนั้นสิทธิพิเศษของไคลเอนต์ใช้กับโค้ดที่คุณอาจไม่เคยอ่าน ถูกเรียกในเวลาที่คุณไม่ได้เลือก ในสภาพแวดล้อมที่มีรายละเอียดการเชื่อมต่อ ระดับ 3 ไปไกลกว่านั้นและอนุญาตให้ส่งรหัสผ่านผ่านตัวแปรสภาพแวดล้อม ซึ่งเป็นเหตุผลที่คู่มืออธิบายว่าอาจไม่ปลอดภัย

ไม่มีตัวเลขใดเหล่านี้เป็นการตั้งค่าความแข็งแกร่ง โปรไฟล์ที่ระดับ 3 ไม่มีการเข้ารหัสที่ดีกว่าที่ระดับ 1 เลย มันมีพื้นที่การเรียกใช้ที่ใหญ่กว่าเท่านั้น และอุโมงค์ก็เหมือนกัน

ตัดสินว่าโปรไฟล์สมควรได้รับอะไร

ถามก่อนว่าสคริปต์มีไว้ทำอะไร แล้วจึงถามว่าต้องการระดับใด ฮุกที่ดันการตั้งค่า DNS หรือซ่อมเส้นทางหลังเชื่อมต่อ เป็นเหตุผลที่ชอบธรรมในการเรียกใช้บางอย่าง ฮุกที่เรียกไบนารีที่ไม่รู้จักในไดเรกทอรีชั่วคราวเป็นเหตุผลให้หยุด

เส้นทางของสคริปต์สำคัญพอ ๆ กับตัวสคริปต์ เส้นทางสัมพัทธ์ถูกแก้เทียบกับไดเรกทอรีที่ไคลเอนต์ใช้ และไดเรกทอรีที่เขียนได้เปลี่ยนการนำเข้าครั้งเดียวให้เป็นช่องเรียกใช้ถาวร เส้นทางแบบสัมบูรณ์ในไดเรกทอรีที่ผู้ใช้แก้ไม่ได้คือรูปแบบที่ควรเลือกใช้

สคริปต์ยังสืบทอดสภาพแวดล้อมของไคลเอนต์ ซึ่งเป็นที่อยู่ของข้อมูลรับรองและเมทาดาทาการเชื่อมต่อ การสืบทอดนั้นเองที่ทำให้ระดับ 3 อันตรายเมื่อใช้ร่วมกับสคริปต์ที่บันทึกสภาพแวดล้อมของมัน และนั่นคือเหตุผลที่ดัมป์การวินิจฉัยจากไคลเอนต์ที่เปิดสคริปต์ควรได้รับการมองครั้งที่สองก่อนนำไปแปะในตั๋วสนับสนุน ล้างสภาพแวดล้อมก่อนแชร์

grep -nE 'script-security|^up |^down |tls-verify' client.ovpn

เปลี่ยนเพียงอย่างเดียว แล้วเฝ้าดูการรื้อถอนด้วย

หากโปรไฟล์ต้องการสคริปต์จริง ๆ ให้เปลี่ยนเฉพาะระดับและเฉพาะโปรไฟล์นั้น รันไคลเอนต์ในเบื้องหน้าโดยมีเอาต์พุตละเอียด เพื่อให้ข้อผิดพลาดของสคริปต์เองมองเห็นได้ แทนที่จะถูกกลืนโดยตัวจัดการบริการ

openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default

ทดสอบวงจรชีวิตทั้งหมด ไม่ใช่แค่การเชื่อมต่อ ฮุกขาเข้าที่ล้มเหลวทำให้เส้นทางยังชี้ไปยังอุโมงค์ที่ตายแล้ว ซึ่งสร้างเครื่องที่ดูเหมือนเชื่อมต่ออยู่แต่ไปไม่ถึงไหน ก่อนประกาศว่าการเปลี่ยนแปลงเสร็จสิ้น ให้เชื่อมต่อใหม่หนึ่งครั้งและตัดการเชื่อมต่อหนึ่งครั้ง แล้วตรวจตารางเส้นทางหลังแต่ละครั้ง

เก็บสำเนาของโปรไฟล์ต้นฉบับไว้ หากไคลเอนต์แพลตฟอร์มไม่ได้ใช้โมเดลสคริปต์เดียวกัน การลบไดเรกทีฟจนกว่าการนำเข้าจะสำเร็จอาจลบการผสานรวม DNS หรือเส้นทางที่อุโมงค์ต้องการ และการเชื่อมต่อที่ได้จะยืนยันตัวตนได้อย่างสมบูรณ์แบบแต่ไม่สามารถแก้ชื่ออะไรได้เลย

การตัดสินใจที่ควรบันทึกนั้นแคบ: สคริปต์ใด ที่เส้นทางใด ให้สิทธิ์ที่ระดับใด สำหรับโปรไฟล์ใด ทุกอย่างอื่นในโปรไฟล์ไม่เปลี่ยนแปลง และนั่นคือประโยคที่ผู้ตรวจสอบสามารถตรวจได้

บทความที่เกี่ยวข้อง