ไฟล์ .ovpn ของคุณสามารถรันโค้ด ไม่ใช่แค่กำหนดเส้นทางทราฟฟิก
โปรไฟล์ที่ระบุตัวช่วย up หรือ down รันโค้ดด้วยสิทธิ์ของคุณ ตรวจสอบพาธ ความเป็นเจ้าของ การทำความสะอาด และการตั้งค่า script-security
คนส่วนใหญ่อ่านไฟล์ .ovpn เหมือนอ่านหน้าตั้งค่าของเราเตอร์ คือ ที่อยู่ เส้นทาง รายการรหัสลับ ส่วนที่รันโค้ดอยู่ใกล้ท้ายไฟล์ ข้างคำสั่งที่ดูเหมือนงานประปา และมันทำงานด้วยสิทธิ์ใดก็ตามที่ไคลเอนต์มีอยู่แล้ว นั่นคือช่องโหว่ที่โปรไฟล์ประมาทหรือเป็นอันตรายใช้ประโยชน์ และยังเป็นช่องโหว่ที่เปลี่ยนตัวช่วย DNS ที่มีประโยชน์ให้กลายเป็นปัญหาซัพพอร์ตในอีกสามสัปดาห์ถัดมา คำสั่งเหตุการณ์ ระดับความปลอดภัย และความเป็นเจ้าของไฟล์เป็นตัวตัดสินว่าจะเกิดอะไรขึ้น ส่วนเนื้อหาของสคริปต์เป็นตัวตัดสินว่าเกิดอะไรจริง ๆ อ่านทั้งสี่อย่างก่อนเชื่อมต่อ
โปรไฟล์ที่รันตัวช่วยคือโปรแกรม ไม่ใช่ไฟล์ตั้งค่า
คำสั่งอย่าง route และ dhcp-option อธิบายสถานะที่ไคลเอนต์ควรสร้างขึ้น และไคลเอนต์ถือว่ามันเป็นข้อมูล สคริปต์ up ต่างออกไป ไคลเอนต์เริ่มมันเป็นโปรเซสและส่งสภาพแวดล้อมที่เต็มไปด้วยรายละเอียดการเชื่อมต่อให้ ดังนั้นอะไรก็ตามที่ผู้เขียนเขียนไว้จะทำงานด้วยสิทธิ์ของบัญชีคุณ บนแล็ปท็อปที่ผู้ใช้เป็นผู้ดูแลระบบ นั่นคือประตูกว้างสำหรับไฟล์ที่มาถึงเป็นไฟล์แนบหรือคัดลอกวางจากกระทู้ฟอรัม ความแตกต่างไม่ใช่เรื่องสไตล์ แต่เป็นความแตกต่างระหว่างการตั้งค่ากับโค้ด
ความเชื่อที่ควรทิ้งไปคือ โปรไฟล์ทำได้เพียงเปลี่ยนเส้นทางทราฟฟิก ตัวช่วยที่รัน ip route add กับตัวที่รัน curl ไปยังโฮสต์ระยะไกลเป็นกลไกเดียวกัน และโปรไฟล์ก็ดูเหมือนกันจากภายนอก ไม่มีอะไรในรูปลักษณ์ของไฟล์บอกคุณว่ามีแบบไหน ดังนั้นการตรวจทานต้องไปถึงตัวสคริปต์เอง
อะไรเป็นตัวกำหนดการรันจริง ๆ และบรรทัดที่เปิดใช้มีหน้าตาอย่างไร
สามสิ่งควบคุมตัวช่วย ได้แก่ คำสั่งเหตุการณ์ที่ตั้งชื่อให้มัน ระดับ script-security ที่อนุญาตมัน และการนำไปใช้ของแพลตฟอร์มไคลเอนต์เอง โปรไฟล์อาจขอฮุกและยังไม่เห็นอะไรเกิดขึ้น เพราะไคลเอนต์มือถือหรือบิลด์เดสก์ท็อปแบบลดรูปอาจไม่ได้นำเหตุการณ์นั้นไปใช้เลย ในทำนองเดียวกัน โปรไฟล์ที่ขอสิทธิ์มากกว่าที่ฟังก์ชันต้องการก็บอกอะไรบางอย่างเกี่ยวกับที่มาของมัน ระดับสิทธิ์คือความสามารถ ไม่ใช่การอนุมัติ บรรทัดที่เปิดใช้มีหน้าตาแบบนี้ โดยมีพาธแทนพาธของคุณ
script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.shระดับ 0 ปฏิเสธโปรแกรมภายนอก และระดับ 1 ซึ่งเป็นค่าเริ่มต้น อนุญาตเฉพาะไฟล์ปฏิบัติการที่ติดมากับไคลเอนต์เท่านั้น ดังนั้นฮุกต้องใช้ 2 หรือสูงกว่า ระดับ 3 มีไว้โดยหลักสำหรับส่งผ่านรหัสผ่านแบบเก่าและควรหลีกเลี่ยง โปรไฟล์ที่มาพร้อมฮุกต้องมีทั้งคำสั่งและระดับนั้น จึงสมเหตุสมผลที่บรรทัดหนึ่งใกล้ท้ายไฟล์จะได้รับการตรวจเช่นเดียวกับบล็อกใบรับรอง คู่มือ OpenVPN แสดงรายการระดับสิทธิ์ และถ้อยคำของคู่มือควรอ่านคู่กับสิ่งที่โปรไฟล์ขอจริง
ความเป็นเจ้าของ พาธ และสิ่งที่ป้อนให้ตัวช่วย
โปรไฟล์ที่คุณไว้วางใจแต่ชี้ไปยังสคริปต์ที่บัญชีอื่นเขียนทับได้ไม่ใช่ข้อตกลงที่ไว้ใจได้ เพราะการตรวจเมื่อวานไม่ได้อธิบายสิ่งที่รันวันนี้แล้ว ตรวจสอบเจ้าของและโหมดของตัวช่วย และตรวจสอบว่าพาธที่ตั้งค่าไว้นำไปยังไฟล์ที่คุณตรวจสอบ ไม่ใช่ชื่อที่สิ่งอื่นสามารถบดบังได้ อาร์กิวเมนต์และสภาพแวดล้อมก็ควรได้รับการมองแบบเดียวกัน ไคลเอนต์ส่งรายละเอียดการเชื่อมต่อให้ฮุก และตัวช่วยที่บันทึกสภาพแวดล้อมทั้งหมดอาจกำลังเขียนข้อมูลรับรองลงในตั๋วซัพพอร์ต ให้เลือกการผสานรวมที่มีเอกสารจากผู้ให้บริการหรือแพลตฟอร์ม มากกว่าสคริปต์ DNS ที่คัดลอกจากโพสต์ที่ไม่เกี่ยวข้อง เพราะผู้จัดการตัวแปลงสองตัวที่แย่งไฟล์เดียวกันทำให้เกิดความล้มเหลวที่ดูเหมือน VPN เสีย
เมื่อคุณรายงานฮุกที่ล้มเหลว ให้ปกปิดสภาพแวดล้อมก่อนวางที่ใด ๆ ดัมป์ที่ช่วยให้คุณดีบักอาจพาโทเคนที่ยืนยันตัวคุณไปด้วย
ความล้มเหลวในการทำความสะอาดจะปรากฏหลังอุโมงค์หายไป
ตัวช่วย up เพิ่มเส้นทางและการตั้งค่าตัวแปลง และตัวช่วย down ควรนำออกอีกครั้ง เมื่อฮุก down หายไป ล้มเหลวเงียบ ๆ หรือไม่เคยรันเพราะไคลเอนต์ถูกฆ่า สิ่งที่ค้างอยู่จะมีอายุยืนกว่าเซสชัน แล้วทราฟฟิกก็ไปตามเส้นทางที่ไม่มีใครวางแผน และชื่อถูกแปลงผ่านตัวแปลงที่ควรถูกนำออกไปแล้ว ขณะที่อุโมงค์เองดูปกติ อาการเหล่านั้นมาหลังการตัดการเชื่อมต่อ จึงมีการโทษเครือข่ายแทนโปรไฟล์
ทดสอบการรื้อถอนเป็นขั้นตอนของมันเอง ยกอุโมงค์ขึ้น บันทึกเส้นทางและตัวแปลง ลดลง แล้วยืนยันว่าทั้งสองหายไป โปรไฟล์ที่เชื่อมต่อสะอาดยังอาจทิ้งสถานะไว้ และรหัสออกศูนย์ของตัวช่วยไม่ได้พิสูจน์ว่าตัวแปลงไปจบที่ที่คุณคิด
การตรวจทานตัวช่วยและการเก็บทางออก
อ่านสคริปต์ตั้งแต่ต้นจนจบเพื่อหาสามอย่าง คำสั่งที่ต้องใช้สิทธิ์ พาธที่เขียนตายตัวซึ่งอาจไม่มีในระบบของคุณ และการเรียกเครือข่ายใด ๆ ที่มันทำ จากนั้นดูว่ามันล้มเหลวอย่างไร เพราะตัวช่วยที่กลืนข้อผิดพลาดเปลี่ยนข้อผิดพลาดในการตั้งค่าให้กลายเป็นปริศนา ถ้าคุณไม่สามารถพูดในประโยคเดียวว่าสคริปต์ทำอะไรและใครเปลี่ยนมันได้ คุณยังไม่พร้อมจะเปิดใช้ โปรไฟล์ที่ขอสิทธิ์มากกว่าที่ประโยคนั้นต้องการคือสัญญาณให้หยุด
เก็บโปรไฟล์ที่ทำงานล่าสุดและตัวช่วยที่มันอ้างถึงไว้ในที่จัดเก็บที่ป้องกัน พร้อมบันทึกทั้งสองเวอร์ชัน เพื่อให้การย้อนกลับเป็นการคัดลอก ไม่ใช่การสร้างใหม่ในจังหวะที่แย่ที่สุด ถ้าตัวช่วยมีอยู่เพียงเพื่อดิสทริบิวชันหรือไคลเอนต์เวอร์ชันที่ไม่ต้องการมันแล้ว ให้ปลดระวางมันในการตั้งค่าที่เป็นเจ้าของค่านั้น แทนการเพิ่มสิทธิ์จนข้อผิดพลาดหยุด นั่นคือทางออก ชิ้นส่วนที่เคลื่อนไหวน้อยลง ไม่ใช่สิทธิ์มากขึ้น