Proxmox VE Distributed Firewall และการทำ Micro-segmentation ด้วย Security Group
คู่มือปฏิบัติการเปิดใช้งานและตั้งค่ากำแพงไฟล์แบบกระจายบน Proxmox VE 9.2 ครอบคลุมโครงสร้างสามระดับของกฎ การใช้ Security Group และ IP Set เพื่อแบ่งส่วนเครือข่ายภายใน หลักการเขียนกฎอย่างปลอดภัยไม่ให้ล็อกตัวเองออกจากระบบ และการตรวจสอบชุดกฎที่ระบบสร้างขึ้นจริง
ปัญหาและโจทย์
เมื่อเครื่องเสมือนทั้งหมดในศูนย์ข้อมูลเชื่อมต่ออยู่บนเครือข่ายเดียวกันและสามารถติดต่อกันได้โดยเสรี การป้องกันภัยจึงถูกจำกัดอยู่ที่กำแพงไฟล์ชายขอบขององค์กรเท่านั้น หากเครื่องเสมือนใดเครื่องหนึ่งถูกเจาะ การเคลื่อนที่ภายในเครือข่าย (Lateral Movement) ไปยังระบบอื่นจะทำได้แทบจะทันที
องค์กรมักแก้ปัญหานี้ด้วยการแยก VLAN แต่การควบคุมภายใน VLAN เดียวยังต้องพึ่งอุปกรณ์เครือข่ายภายนอก ซึ่งมีข้อจำกัดด้านแบนด์วิดท์และไม่สามารถมองเห็นข้อมูลระดับเครื่องเสมือนได้ การบังคับนโยบายให้เครื่องพิมพ์เครื่องหนึ่งคุยได้เฉพาะเซิร์ฟเวอร์งานบัญชี จึงกลายเป็นงานที่ต้องตั้งค่าบนอุปกรณ์หลายตัวและดูแลยาก
นอกจากนี้ การทดสอบว่ากฎที่ตั้งไว้ทำงานจริงหรือไม่ มักทำได้เพียงรอให้เกิดเหตุการณ์จริง ซึ่งไม่ใช่แนวทางที่ยอมรับได้ในระบบที่ให้บริการตลอดเวลา
แนวทางการแก้ปัญหา: กำแพงไฟล์ที่ทำงานบนทุกโหนด
Proxmox VE มีระบบกำแพงไฟล์ที่เก็บคอนฟิกไว้บนระบบไฟล์ของคลัสเตอร์ แต่ให้บริการโดยเซอร์วิสที่ทำงานบนทุกโหนด แนวทางนี้ให้การแยกกันระหว่างเครื่องเสมือนอย่างสมบูรณ์ และให้แบนด์วิดท์สูงกว่าการส่งทราฟฟิกทั้งหมดไปยังอุปกรณ์กลาง การรองรับทั้ง IPv4 และ IPv6 ทำได้โดยโปร่งใส ไม่ต้องดูแลชุดกฎสองชุดแยกกัน
1. สามโซนที่กำหนดกฎได้
- Host Zone: ทราฟฟิกเข้าและออกจากโหนด หรือทราฟฟิกที่โหนดส่งต่อ กำหนดได้ทั้งระดับศูนย์ข้อมูลและระดับโหนด โดยกฎระดับโหนดมีความสำคัญเหนือกว่า
- VM Zone: ทราฟฟิกของเครื่องเสมือนและคอนเทนเนอร์ กำหนดได้เฉพาะทิศทางเข้าและออก
- VNet Zone: ทราฟฟิกที่วิ่งผ่านเครือข่าย SDN VNet ซึ่งเป็นทราฟฟิกที่ถูกส่งต่อทั้งหมด จึงกำหนดได้เฉพาะทิศทาง forward
2. ที่เก็บคอนฟิกและส่วนประกอบที่ช่วยลดงาน
- Security Group: ชุดกฎที่นิยามไว้ระดับคลัสเตอร์ แล้วนำไปเรียกใช้ซ้ำในเครื่องเสมือนหลายเครื่องได้
- IP Set: กลุ่มของที่อยู่ IP ที่ตั้งชื่อไว้ เพื่อใช้อ้างอิงในกฎแทนการไล่ระบุทีละรายการ
- IP Alias: ตั้งชื่อให้เครือข่ายหรือที่อยู่ IP แล้วนำชื่อนั้นไปใช้ในกฎและใน IP Set
- Macro: ชุดกฎสำเร็จรูปสำหรับบริการที่ใช้บ่อย ช่วยลดความผิดพลาดในการเปิดพอร์ตด้วยมือ
ข้อเท็จจริงเรื่อง Backend ที่ต้องเข้าใจก่อนออกแบบ: ระบบกำแพงไฟล์ค่าเริ่มต้นของ Proxmox VE ทำงานบนพื้นฐาน iptables และไม่รองรับกฎทิศทาง forward รวมถึงกฎระดับ VNet ส่วนทางเลือกที่ใช้ nftables ซึ่งอยู่ในสถานะ Tech Preview เป็นตัวที่รองรับกฎสองประเภทนั้น การตั้งกฎ forward หรือกฎบน VNet บน Backend ค่าเริ่มต้นจะไม่ถูกนำไปใช้และไม่มีผลใด ๆ
ขั้นตอนการตั้งค่ากำแพงไฟล์แบบกระจาย
ขั้นที่ 1: เตรียมความพร้อมก่อนเปิดใช้งาน
กำแพงไฟล์ของ Proxmox VE ถูกปิดไว้โดยค่าเริ่มต้น และเมื่อเปิดใช้งานแล้ว ทราฟฟิกไปยังโหนดทั้งหมดจะถูกบล็อกโดยค่าเริ่มต้น โดยมีข้อยกเว้นสำหรับทราฟฟิกจากเครือข่ายท้องถิ่นไปยังเว็บอินเทอร์เฟซ SSH และบริการสำคัญบางรายการ ก่อนเปิดใช้งานจึงต้องเตรียมพร้อมดังนี้
- เปิดการเชื่อมต่อ SSH ค้างไว้หนึ่งชุด กับโหนดที่จะแก้ไข เพื่อให้ยังเข้าถึงได้หากมีสิ่งผิดพลาดเกิดขึ้น
- เตรียมที่อยู่ IP ของผู้ดูแลระบบจากระยะไกล เพื่อสร้างกฎอนุญาตเข้าสู่เว็บอินเทอร์เฟซที่พอร์ต 8006 และ SSH ที่พอร์ต 22
- ตรวจสอบค่าเครือข่ายท้องถิ่นที่ระบบตรวจพบอัตโนมัติ เพื่อยืนยันว่าระบบใช้ค่าใดในการสร้างกฎอนุญาตสำหรับการสื่อสารของคลัสเตอร์
# ตรวจสอบค่าเครือข่ายท้องถิ่นที่ระบบใช้สร้างกฎพื้นฐานของคลัสเตอร์ pve-firewall localnet # ตัวอย่างผลลัพธ์ local hostname: node1 local IP address: 192.168.2.100 network auto detect: 192.168.0.0/20 using detected local_network: 192.168.0.0/20
ขั้นที่ 2: เปิดใช้งานกำแพงไฟล์ระดับคลัสเตอร์
คอนฟิกระดับคลัสเตอร์จัดเก็บที่ไฟล์ /etc/pve/firewall/cluster.fw ซึ่งเป็นระบบไฟล์ที่กระจายไปทุกโหนดโดยอัตโนมัติ โครงสร้างของไฟล์ประกอบด้วยส่วนต่าง ๆ ได้แก่ ส่วนตัวเลือก ส่วนกฎ ส่วนนิยาม IP Set ส่วนนิยาม Security Group และส่วนชื่อเรียก IP
# /etc/pve/firewall/cluster.fw [OPTIONS] # เปิดใช้งานกำแพงไฟล์ทั้งคลัสเตอร์ (ค่าเริ่มต้นคือปิด) enable: 1 # นโยบายเริ่มต้นของทราฟฟิกขาเข้าและขาออก policy_in: DROP policy_out: ACCEPT
ขั้นที่ 3: สร้าง IP Set สำหรับกลุ่มที่อยู่ที่ใช้บ่อย
เอกสารทางการแนะนำวิธีที่ลดความผิดพลาดได้ดีที่สุดสำหรับงานเปิดสิทธิ์จากระยะไกล คือการสร้าง IP Set ชื่อ management แล้วใส่ที่อยู่ IP ของผู้ดูแลระบบทั้งหมดไว้ในนั้น ระบบจะสร้างกฎที่จำเป็นสำหรับเข้าถึงเว็บอินเทอร์เฟซให้โดยอัตโนมัติ
# /etc/pve/firewall/cluster.fw [IPSET management] 10.10.0.0/24 203.0.113.15 [ALIASES] # ตั้งชื่อเรียกเครือข่ายภายในองค์กร internal_net 10.10.0.0/16
ขั้นที่ 4: สร้าง Security Group เพื่อแบ่งส่วนการเข้าถึง
Security Group นิยามไว้ที่ระดับคลัสเตอร์ แล้วนำไปเรียกใช้ในกฎของเครื่องเสมือนแต่ละเครื่องได้ ทำให้ปรับนโยบายที่จุดเดียวแล้วมีผลกับทุกเครื่องที่อ้างอิงกลุ่มนั้น
# /etc/pve/firewall/cluster.fw # นิยามกลุ่มสำหรับเว็บเซิร์ฟเวอร์ [group webserver] IN ACCEPT -p tcp -dport 80 IN ACCEPT -p tcp -dport 443 # /etc/pve/firewall/100.fw # นำกลุ่มไปใช้กับเครื่องเสมือนรหัส 100 [RULES] GROUP webserver
ขั้นที่ 5: เขียนกฎระดับเครื่องเสมือนพร้อมตัวกรองที่แม่นยำ
รูปแบบของกฎคือ ทิศทาง ตามด้วยการกระทำ หรือใช้ชื่อ Macro พร้อมการกระทำในวงเล็บ แล้วจึงตามด้วยตัวกรองเพิ่มเติม กฎที่ไม่ต้องการให้ทำงานชั่วคราวสามารถปิดไว้ได้โดยเติมเครื่องหมายขีดตั้งไว้ข้างหน้า
# /etc/pve/firewall/100.fw [RULES] # อนุญาต SSH เฉพาะจากที่อยู่ที่กำหนด IN SSH(ACCEPT) -i net0 -source 10.0.0.1-10.0.0.10 IN SSH(ACCEPT) -i net0 -source +management # ปิดกฎไว้ชั่วคราวโดยไม่ต้องลบ |IN SSH(ACCEPT) -i net0 # นโยบายปิดกั้นทราฟฟิกอื่นทั้งหมด IN DROP OUT ACCEPT
ตัวกรองที่ใช้บ่อยคือการจำกัดที่อยู่ต้นทางและปลายทาง (รองรับทั้งที่อยู่เดียว ช่วงที่อยู่ รายการที่อยู่ IP Set และชื่อเรียก IP) การจำกัดพอร์ตปลายทางซึ่งรับได้ทั้งชื่อบริการและหมายเลข รวมถึงช่วงพอร์ต การระบุโปรโตคอล และการกำหนดระดับการบันทึกบันทึกของแต่ละกฎ
สิ่งที่ต้องไม่ลืมคือ กำแพงไฟล์ของเครื่องเสมือนจะเริ่มทำงานได้ต้องเปิดใช้งานที่ระดับเครื่องเสมือนก่อน และต้องเปิดที่การ์ดเครือข่ายแต่ละใบของเครื่องเสมือนด้วย เพราะแต่ละอินเทอร์เฟซมีสวิตช์เปิดปิดของตัวเอง ซึ่งช่วยให้เลือกป้องกันเฉพาะบางอินเทอร์เฟซได้
ขั้นที่ 6: ตรวจสอบและแก้ไขปัญหา
ตรวจสอบสถานะของเซอร์วิสกำแพงไฟล์และชุดกฎที่ระบบสร้างขึ้นจริงได้จากบรรทัดคำสั่ง และในกรณีที่ใช้งาน Backend แบบ nftables ซึ่งเป็นทางเลือกในสถานะ Tech Preview จะมีคำสั่งเฉพาะสำหรับตรวจสอบชุดกฎและการดีบัก
# ตรวจสอบสถานะเซอร์วิสกำแพงไฟล์ค่าเริ่มต้น pve-firewall status pve-firewall start pve-firewall stop # เปิดใช้ Backend แบบ nftables: เพิ่มบรรทัดนี้ใน /etc/pve/nodes//host.fw [OPTIONS] nftables: 1 # ตรวจสอบผลการทำงานของ Backend แบบ nftables systemctl status proxmox-firewall nft list ruleset
ความเสี่ยงสูงสุดของงานนี้: การเปิดกำแพงไฟล์แล้วไม่มีกฎอนุญาตสำหรับทราฟฟิกที่จำเป็น อาจทำให้ผู้ดูแลระบบสูญเสียการเข้าถึงโหนดทั้งหมด การเตรียมช่องทาง SSH ค้างไว้ก่อนแก้ไข และการทดสอบบนคลัสเตอร์จำลองก่อนใช้งานจริง จึงเป็นขั้นตอนที่ไม่ควรข้าม
ขอบเขตและศักยภาพบริการ: โมเดล Micro-segmentation ที่ใช้ได้จริง
| ระดับการแบ่งส่วน | วัตถุประสงค์หลัก | เครื่องมือที่ใช้ | สิ่งที่ต้องทราบ |
|---|---|---|---|
| ระดับโหนด | จำกัดการเข้าถึงระบบจัดการโหนด | กฎระดับ Host Zone และ IP Set ชื่อ management | กฎระดับโหนดมีความสำคัญเหนือกฎระดับศูนย์ข้อมูล |
| ระดับบทบาทบริการ | ให้เครื่องเสมือนกลุ่มเดียวกันใช้นโยบายร่วมกัน | Security Group ที่นิยามใน cluster.fw | ปรับที่จุดเดียวแล้วมีผลกับทุกเครื่องที่อ้างอิงกลุ่มนั้น |
| ระดับเครื่องเสมือน | ควบคุมทราฟฟิกเข้าและออกของแต่ละเครื่อง | กฎใน /etc/pve/firewall/<รหัสเครื่อง>.fw | ต้องเปิดใช้งานกำแพงไฟล์ที่ตัวเครื่องและที่การ์ดเครือข่ายแต่ละใบ |
| ระดับเครือข่าย SDN | ควบคุมทราฟฟิกระหว่างเครื่องภายใน VNet | กฎทิศทาง forward บนไฟล์คอนฟิกของ VNet | ใช้ได้เฉพาะกับ Backend แบบ nftables ซึ่งอยู่ในสถานะ Tech Preview |
| การควบคุมตามตัวตนเครื่อง | ป้องกันการปลอมแปลงที่อยู่และการเปลี่ยน MAC | ตัวกรอง ipfilter และ macfilter ในไฟล์ของเครื่องเสมือน | ตัวกรอง MAC เปิดใช้เป็นค่าเริ่มต้น ส่วนตัวกรอง IP ต้องเปิดเอง |
ผลลัพธ์และประโยชน์
- จำกัดการลุกลามของเหตุการณ์: เมื่อเครื่องเสมือนถูกเจาะ การเคลื่อนที่ไปยังระบบอื่นถูกจำกัดด้วยนโยบายที่นิยามไว้ล่วงหน้า
- ลดภาระอุปกรณ์เครือข่าย: การควบคุมเกิดขึ้นที่ระดับโฮสต์ virtualization โดยตรง ไม่ต้องส่งทราฟฟิกไปกรองที่อุปกรณ์กลาง
- ดูแลนโยบายจากจุดเดียว: การปรับ Security Group มีผลกับทุกเครื่องที่อ้างอิงทันที ลดความคลาดเคลื่อนระหว่างระบบ
- รองรับ IPv4 และ IPv6 พร้อมกัน: ไม่ต้องดูแลชุดกฎแยกกันสำหรับสองโปรโตคอล
จุดเด่นของเรา
- วางนโยบายจากผังการเชื่อมต่อจริง: เราสำรวจว่ากระบวนการทางธุรกิจแต่ละกระบวนการต้องสื่อสารกับระบบใด แล้วจึงแปลงเป็น Security Group ที่ตรวจสอบได้
- ทดสอบก่อนเปิดใช้งานจริง: จำลองการเปิดกำแพงไฟล์บนคลัสเตอร์ทดสอบ เพื่อยืนยันว่าไม่มีช่องทางที่จำเป็นถูกปิดกั้นโดยไม่ตั้งใจ
- เตรียมแผนกู้คืนการเข้าถึง: จัดทำขั้นตอนฉุกเฉินสำหรับกรณีที่ไม่สามารถเข้าสู่ระบบจัดการได้ พร้อมช่องทางสำรองที่ทดสอบแล้ว
- เชื่อมโยงกับกรอบความมั่นคงปลอดภัย: ออกแบบนโยบายให้สอดคล้องกับฟังก์ชัน Protect และ Detect ของกรอบ NIST Cybersecurity Framework ที่องค์กรอ้างอิง
ต้องการแบ่งส่วนเครือข่ายภายในระบบเสมือนขององค์กรหรือไม่
หากองค์กรของคุณต้องการจำกัดการเคลื่อนที่ภายในเครือข่าย หรือกำลังเตรียมความพร้อมด้านการควบคุมการเข้าถึงตามข้อกำหนดของอุตสาหกรรม บน Proxmox Virtual Environment ทีมวิศวกรของเราพร้อมร่วมออกแบบนโยบายกำแพงไฟล์แบบกระจายให้สอดคล้องกับโครงสร้างระบบของท่าน