วิธีเลิกใช้เซิร์ฟเวอร์ VPN โดยไม่ทิ้งช่องทางเข้าถึงไว้
เริ่มจากแอปไคลเอนต์แล้วไล่ออกไปด้านนอก: เพิกถอนคีย์และบัญชี ปิดตัวรับฟัง แล้วพิสูจน์ว่าไม่มีโปรไฟล์ ระเบียน DNS หรือข้อมูลสำรองใดเข้าถึงได้อีก
ไคลเอนต์ของคุณยังเชื่อมต่อได้ในวันที่ตั๋วเลิกใช้ถูกเปิด โปรไฟล์ยังอยู่ในแอป มันเจรจา และอุโมงค์ก็ขึ้นมาราวกับไม่มีอะไรเปลี่ยน นั่นคือจังหวะที่คุณต้องทำงานย้อนทางกับการสร้างบริการ: เริ่มที่รายการไคลเอนต์ ไล่ออกไปถึงตัวรับฟัง แล้วไปที่ไฟร์วอลล์ และจบที่ข้อมูลรับรองซึ่งอยู่ได้นานกว่าทุกอย่าง ปิด VM เป็นขั้นสุดท้าย ไม่ใช่ขั้นแรก คู่มือนี้ถือว่าคุณมีสิทธิ์เข้าถึงคอนโซลของโฮสต์และมีอำนาจแก้ไขระเบียนไคลเอนต์และ DNS
เริ่มจากรายการไคลเอนต์ก่อน
เปิดสิ่งที่แจกจ่ายโปรไฟล์ของคุณและอ่านรายการก่อนแตะเซิร์ฟเวอร์ ทุกรายการคืออุปกรณ์ที่เชื่อว่าตนมีสิทธิ์เข้าถึง: มือถือ แล็ปท็อป เราเตอร์สาขา คอนเทนเนอร์ที่ซิงก์ทุกคืน ส่งออกรายการนั้นเข้าตั๋ว เพราะเมื่อโฮสต์หายไปจะไม่มี wg show บอกคุณว่าใครเชื่อมต่ออยู่
จัดแต่ละอุปกรณ์เป็นปลายทางทดแทน ไม่จำเป็นแล้ว หรือไม่ทราบ ถังที่ไม่ทราบคือถังที่สำคัญ เพราะนั่นคือโปรไฟล์ที่ใครบางคนจะพบในลิ้นชักอีกหลายเดือนข้างหน้าแล้วลองใช้ ส่งประกาศทางช่องเดียวกับที่คุณใช้ขอสิทธิ์เข้าถึง และใส่วันที่ที่ปลายทางเดิมจะเลิกตอบไว้ในนั้น
เพิกถอนตัวตน ไม่ใช่แค่ไฟล์
การกระทำสองอย่างที่ต่างกันถูกเรียกว่าการเพิกถอนเหมือนกัน ใน WireGuard เพียร์ได้รับอนุญาตก็ต่อเมื่อคีย์สาธารณะของมันปรากฏในส่วน peer ที่มีรายการ AllowedIPs ดังนั้นการลบไฟล์คอนฟิกออกจากแล็ปท็อปจึงไม่เปลี่ยนอะไรบนเซิร์ฟเวอร์ ลบบล็อกเพียร์แล้วนำไฟล์ไปใช้ใหม่โดยไม่ทิ้งเพียร์ที่คุณเก็บไว้ ตามที่wg(8) อธิบายไว้:
wg show
wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
wg syncconf wg0 <(wg-quick strip wg0)wg syncconf คือส่วนที่ช่วยคุณประหยัดช่วงเวลาบำรุงรักษา มันสร้างอินเทอร์เฟซใหม่จากไฟล์ในที่เดิม ดังนั้นการลบเพียร์หนึ่งตัวจึงไม่ฉีกอุโมงค์ที่คนอื่นทั้งหมดใช้อยู่ ถ้าคุณเลิกใช้ทั้งโฮสต์แทนที่จะเป็นเพียร์ตัวเดียว ลำดับก็ยังสำคัญ เพราะคีย์เหล่านั้นอาจถูกไว้วางใจที่อื่น
ด้วยการตั้งค่า X.509 ขั้นตอนการเพิกถอนคือใบรับรอง ไม่ใช่ไฟล์: openssl ca -revoke client.crt แล้วจึง openssl ca -gencrl -out crl.pem สิ่งนี้ได้ผลเฉพาะที่ผู้ตรวจอ่านมัน ซึ่งหมายความว่าOpenVPN เซิร์ฟเวอร์ที่ตั้งค่า crl-verify ไว้และโหลดใหม่ภายหลัง ถ้าเกตเวย์นี้เป็นผู้ใช้รายเดียวของ CA นั้น CRL ก็หมดความสำคัญในวันที่มันตาย ถ้า CA เดียวกันเซ็นให้เกตเวย์ที่สอง ใบรับรองที่คุณไม่เคยเพิกถอนก็ยังทำงานที่นั่น
บัญชีคือกรณีที่สามและเป็นกรณีที่ถูกละเลยบ่อยที่สุด เมื่อเกตเวย์ยืนยันตัวตนผ่าน RADIUS, LDAP หรือผู้ให้บริการตัวตนที่โฮสต์ไว้ บัญชีก็อยู่นอก VPN ปิดใช้งานในไดเรกทอรี การลบส่วนผู้ใช้บนเซิร์ฟเวอร์ยังเหลือข้อมูลรับรองที่ใช้ได้ ซึ่งปลายทางทดแทนจะยอมรับทันทีที่ชี้ไปยังไดเรกทอรีเดียวกัน
ปิดตัวรับฟังและเส้นทางที่ไปถึงมัน
หยุดบริการในแบบที่อยู่รอดหลังรีบูต แล้วยืนยันด้วยรายการซ็อกเก็ต ไม่ใช่สถานะของยูนิต systemctl disable --now wg-quick@wg0 หยุดอินเทอร์เฟซและลบเส้นทางกับกฎที่ wg-quick เพิ่มไว้ systemctl disable --now openvpn-server@server ทำแบบเดียวกันกับอินสแตนซ์ OpenVPN ที่ใช้เทมเพลต ทำตามด้วย ss -lunp และ ss -ltnp ผลลัพธ์ว่างสำหรับพอร์ตเดิมคือหลักฐานเดียวที่ใช้ได้
สิ่งที่ wg-quick เพิ่มไว้ wg-quick ก็ลบออก สิ่งที่คุณเพิ่มด้วยมือยังอยู่: กฎ NAT แบบถาวร การอนุญาตในไฟร์วอลล์ การส่งต่อพอร์ตบนเราเตอร์ กฎ ingress ในกลุ่มความปลอดภัยคลาวด์ ตัวรับฟังของโหลดบาลานเซอร์ สิ่งเหล่านั้นต้องลบอย่างชัดเจน และระเบียน DNS ก็เช่นกัน คือ A, AAAA และ CNAME ใดก็ตามที่ชี้ไปยังชื่อนั้น ชื่อที่แปลงไปยังโฮสต์ที่ตายแล้วล้มเหลวต่างจากชื่อที่ไม่แปลงเลย และความต่างนั้นจะทำให้ใครบางคนเสียเวลาบ่ายหนึ่ง
สำเนาที่คุณลืมคือโคลน สแนปช็อตหรือ VM ที่กู้จากข้อมูลสำรองยังถือคีย์โฮสต์และรายการเพียร์เดิม และถ้ามีอะไรนำมันกลับมาบนที่อยู่เดิม ไคลเอนต์ก็เชื่อมต่อใหม่กับบริการที่คุณคิดว่าเลิกใช้แล้ว ติดป้ายชุดข้อมูลสำรองว่าเป็นของบริการที่ปลดระวางแล้วและกันมันออกจากเส้นทางกู้คืนอัตโนมัติ
ตามสิ่งที่ยังชี้ไปยังปลายทางเดิม
โปรไฟล์ที่แคชไว้อยู่ได้นานกว่า DNS คอนฟิกที่บันทึกไว้พร้อมที่อยู่เป็นตัวเลขยังหมุนสายต่อไปหลังระเบียนหายไป และไคลเอนต์ที่เปิดตลอดเวลาจะลองใหม่ทุกครั้งที่เครือข่ายเปลี่ยน นั่นคือเสียงรบกวนไม่ใช่การเข้าถึง เพราะตัวรับฟังปิดอยู่ แต่การรู้ว่าคุณกำลังดูอันไหนกำหนดว่าคุณจะตอบตั๋วอย่างไร
จากนั้นไล่กวาดสิ่งที่ไม่มีใครจัดไว้ใต้ VPN: การตรวจ uptime ที่หยั่งพอร์ต งานสำรองที่ดึงคอนฟิกจากโฮสต์ ข้อมูลรับรองระบบอัตโนมัติที่ใช้ผลักรายการเพียร์ บัญชีกู้คืนที่สร้างขึ้นเพื่อปลายทางนี้เท่านั้น แต่ละอย่างคือเส้นทางเข้าถึงที่มีอายุและเจ้าของของตัวเอง ดังนั้นแต่ละอย่างจึงได้การตัดสินใจแทนการลบเงียบ ๆ
ตรวจสอบ แล้วจดบันทึก
การเลิกใช้เสร็จสิ้นเมื่อการทดสอบจากภายนอกล้มเหลวอย่างที่คุณคาด การเชื่อมต่อจากเครือข่ายที่คุณไม่ได้ควบคุมไปยังที่อยู่และพอร์ตเดิม ผลลัพธ์ที่ถูกกรองหรือถูกปฏิเสธคือกรณีสำเร็จ ในแอปไคลเอนต์ ยืนยันว่าโปรไฟล์ถูกลบไม่ใช่แค่ปิด และไม่มีโปรไฟล์จัดการใดเพิ่มมันกลับมาเงียบ ๆ
จากนั้นบันทึกสิ่งที่คุณทำ: ปลายทาง วันที่ คีย์และใบรับรองที่เพิกถอน บัญชีที่ปิดใช้งาน ข้อมูลสำรองอยู่ที่ไหน ใครก็ตามที่พบคอนฟิกเก่าครั้งต่อไปต้องตอบให้ได้ว่าเพิกถอนแล้วหรือแค่ลบ โดยไม่ต้องเดา และตารางสั้น ๆ ในตั๋วก็ทำได้
ก่อนปิดตั๋ว:
- โปรไฟล์ไคลเอนต์ถูกลบหรือแทนที่แล้ว อุปกรณ์ที่ไม่ทราบได้รับการแก้ไขแล้ว
- เพียร์ถูกลบและนำคอนฟิกไปใช้ใหม่ หรือใบรับรองถูกเพิกถอนและเผยแพร่ CRL แล้ว
- บัญชีไดเรกทอรีถูกปิดใช้งาน ไม่ใช่แค่ลบไฟล์ในเครื่อง
- บริการถูกปิด ไม่มีตัวรับฟังเหลือบนพอร์ตเดิม
- ไฟร์วอลล์ การส่งต่อพอร์ต กลุ่มความปลอดภัย และระเบียน DNS ถูกลบแล้ว
- ข้อมูลสำรองติดป้ายแล้ว สแนปช็อตถูกกันออกจากเส้นทางกู้คืน
- ข้อมูลรับรองการตรวจสอบและระบบอัตโนมัติถูกเลิกใช้แล้ว
ตรวจสอบปลายทางทดแทนแยกต่างหาก จากไคลเอนต์ที่ไม่เคยมีโปรไฟล์เดิม การทดสอบเดียวนี้บอกคุณว่าคุณเลิกใช้บริการหรือแค่เปลี่ยนชื่อปัญหา