eBPF/XDP คืออะไร ทำไมถึงเปลี่ยนเกมการป้องกัน DDoS
ถ้าคุณเคยดูแลเซิร์ฟเวอร์ที่โดน DDoS คุณน่าจะรู้ดีว่า iptables กับ nftables มีขีดจำกัด พอโดนโจมตีหนักๆ ระดับล้าน packets ต่อวินาที CPU พุ่ง เซิร์ฟเวอร์ตอบสนองช้า หรือล่มไปเลย เทคโนโลยีที่เข้ามาแก้ปัญหานี้คือ eBPF (extended Berkeley Packet Filter) ร่วมกับ XDP (eXpress Data Path) ซึ่งทำงานในระดับลึกที่สุดของ Linux Kernel โดยไม่ต้องรอให้ packet เดินทางผ่าน Kernel Stack ทั้งหมด
eBPF เปรียบเหมือนการติดตั้งโปรแกรมขนาดเล็กเข้าไปใน Kernel ได้โดยตรง โดยไม่ต้องเขียน Kernel Module เอง ทำให้สามารถตรวจสอบ กรอง และจัดการ network traffic ได้อย่างยืดหยุ่น ส่วน XDP คือจุดที่ eBPF program ทำงานเร็วที่สุด เพราะดักจับ packet ตั้งแต่ระดับ Network Driver ก่อนที่ข้อมูลจะเข้าสู่ Kernel Network Stack ด้วยซ้ำ
หากคุณกำลังมองหาเซิร์ฟเวอร์ที่ต้องรับมือกับ traffic หนัก การเข้าใจเทคโนโลยีนี้จะช่วยให้คุณวางแผนป้องกันได้ดีขึ้นอย่างมาก
XDP ทำงานที่ระดับ Driver ยังไง
โดยปกติเมื่อ packet เข้ามาที่ Network Interface Card (NIC) มันจะเดินทางผ่านหลายชั้น ตั้งแต่ driver ไปจนถึง Kernel Network Stack แล้วค่อยถูกส่งต่อไปยัง application ทุกชั้นที่ผ่านใช้ CPU และหน่วยความจำ ยิ่ง packet เดินทางลึกเท่าไหร่ ยิ่งใช้ทรัพยากรมาก
XDP เข้ามาตัดวงจรนี้ โดยดักจับ packet ตั้งแต่ชั้นแรกสุดคือ NIC Driver เลย ก่อนที่จะมีการสร้าง socket buffer (skb) ด้วยซ้ำ ทำให้สามารถตัดสินใจได้ทันทีว่าจะทำอะไรกับ packet นั้น โดยมี 4 actions หลัก ได้แก่ XDP_DROP ที่ทิ้ง packet ทันทีโดยไม่ต้องประมวลผลอะไรเพิ่มเลย, XDP_PASS ที่ส่งต่อให้ Kernel Stack ทำงานตามปกติ, XDP_TX ที่ส่ง packet กลับออกทาง interface เดิมซึ่งเหมาะสำหรับสร้าง response กลับ, และ XDP_REDIRECT ที่ส่งต่อไปยัง interface อื่นเหมาะสำหรับ load balancing
ความสามารถในการ DROP packet ตั้งแต่ระดับ driver นี้เองที่ทำให้ XDP สามารถป้องกัน DDoS ได้อย่างมีประสิทธิภาพมาก เพราะ packet ที่เป็นอันตรายจะถูกทิ้งก่อนที่จะกิน resource ของระบบ
ทำไม XDP ถึงเร็วกว่า iptables ถึง 100 เท่า
หลายคนอาจสงสัยว่าทำไม XDP ถึงเร็วกว่า iptables ได้มากขนาดนี้ คำตอบอยู่ที่ตำแหน่งการทำงาน iptables ทำงานอยู่ใน Netfilter Framework ซึ่งอยู่กลาง Kernel Network Stack ทำให้ทุก packet ต้องผ่านกระบวนการสร้าง socket buffer จัดการ routing table และตรวจสอบ rule chain ทั้งหมดก่อน กว่าจะถึง iptables ก็ใช้ CPU ไปมากแล้ว ด้วยเหตุนี้ iptables จึงรับมือได้ประมาณ 1 ล้าน packets ต่อวินาทีต่อ core โดยใช้ CPU ถึง 70 เปอร์เซ็นต์
ในทางตรงข้าม XDP ทำงานที่จุดแรกสุดก่อนกระบวนการเหล่านั้นทั้งหมด ทำให้รับมือได้สูงถึง 100 ล้าน packets ต่อวินาทีต่อ core โดยใช้ CPU เพียง 5 เปอร์เซ็นต์เท่านั้น nftables ซึ่งเป็นรุ่นใหม่กว่า iptables ก็ยังรับได้เพียง 2 ล้าน packets ต่อ core เท่านั้น ส่วน IDS อย่าง Suricata ที่ทำงานใน Userspace รับได้แค่ 5 แสน packets ต่อ core โดยใช้ CPU เกือบเต็ม
ความแตกต่างนี้เปรียบเหมือนการตั้งด่านตรวจที่ประตูทางเข้าเทียบกับการตั้งด่านกลางเมือง ยิ่งดักจับได้เร็วเท่าไหร่ ยิ่งประหยัดทรัพยากรมากเท่านั้น
ตัวอย่างการใช้ XDP ป้องกัน DDoS
เพื่อให้เห็นภาพชัดขึ้น นี่คือตัวอย่างโค้ด eBPF/XDP สำหรับป้องกัน UDP Amplification Attack ซึ่งเป็นรูปแบบ DDoS ที่พบบ่อยที่สุดรูปแบบหนึ่ง
SEC("xdp")
int xdp_amp_protect(struct xdp_md *ctx) {
struct udphdr *udp = parse_udp(ctx);
if (!udp) return XDP_PASS;
__u16 sport = bpf_ntohs(udp->source);
// Block DNS, NTP, SSDP, Memcached amplification
if (sport == 53 || sport == 123 || sport == 1900 || sport == 11211)
return XDP_DROP;
return XDP_PASS;
}
โค้ดนี้ตรวจสอบ source port ของ UDP packet ถ้ามาจาก port ที่มักถูกใช้ในการโจมตีแบบ amplification เช่น DNS (53), NTP (123), SSDP (1900) หรือ Memcached (11211) ก็จะ DROP ทิ้งทันที ทั้งหมดนี้เกิดขึ้นที่ระดับ driver ก่อนที่ packet จะเข้าสู่ระบบ ทำให้ไม่สิ้นเปลืองทรัพยากรเลย
สำหรับองค์กรที่ต้องการระบบป้องกัน DDoS แบบครบวงจร การใช้ XDP เป็นด่านแรกร่วมกับระบบป้องกันชั้นอื่นๆ ถือเป็นแนวทางที่มีประสิทธิภาพสูง
Use Cases จริงในการป้องกัน DDoS
การป้องกัน DDoS ด้วย XDP ไม่ได้จำกัดแค่การ block port เดียว ในระบบ production จริง มักใช้แบบ multi-stage pipeline โดยชั้นแรกคือ XDP ทำหน้าที่กรอง Layer 2 และ Layer 3 ซึ่งสามารถ drop ได้ถึง 99 เปอร์เซ็นต์ของ traffic ที่เป็นอันตราย จากนั้นชั้นที่สองใช้ TC eBPF ทำ rate limiting ที่ Layer 4 สำหรับ traffic ที่ผ่านเข้ามา และชั้นสุดท้ายใช้ nftables หรือ application-level firewall จัดการกับ traffic ที่เหลือ
รูปแบบการโจมตีที่ XDP รับมือได้ดีเป็นพิเศษ ได้แก่ UDP Flood ที่ส่ง packet จำนวนมหาศาลเข้ามา, Amplification Attack ที่ใช้บริการอย่าง DNS หรือ NTP เป็นตัวขยายปริมาณ traffic, SYN Flood ที่ส่ง TCP SYN request จำนวนมากเพื่อกินทรัพยากรของเซิร์ฟเวอร์ และ Token Bucket Rate Limiting ที่ใช้จำกัดอัตราการส่ง packet จาก IP ใดๆ
ตัวเลข Performance จากการใช้งานจริง
จากการทดสอบกับฮาร์ดแวร์จริง ใช้ NIC รุ่น Intel E810 ความเร็ว 25Gbps เมื่อเจอ UDP Flood ขนาด 80 ล้าน packets ต่อวินาที XDP สามารถ drop ได้ถึง 78 ล้าน packets ต่อวินาที คิดเป็น 97.5 เปอร์เซ็นต์ โดยใช้ CPU เพียง 8 cores ที่โหลดแค่ 12 เปอร์เซ็นต์ ที่สำคัญคือไม่มี packet ใดผ่านเข้าไปถึง Kernel Stack เลย
ตัวเลขเหล่านี้แสดงให้เห็นว่าเซิร์ฟเวอร์เพียงเครื่องเดียวที่ติดตั้ง XDP สามารถรับมือกับการโจมตี DDoS ขนาดใหญ่ได้ โดยไม่กระทบ performance ของ application ที่ให้บริการอยู่เลย สำหรับเซิร์ฟเวอร์ VPS ที่ต้องการ performance สูงและความปลอดภัย การมี XDP เป็น layer ป้องกันช่วยให้มั่นใจได้ว่าบริการจะไม่สะดุดแม้เจอการโจมตี
ใครใช้ eBPF/XDP ในระดับ Production
เทคโนโลยีนี้ไม่ใช่แค่ทฤษฎี บริษัทเทคโนโลยีระดับโลกหลายรายใช้ eBPF/XDP เป็นแกนหลักในการป้องกัน DDoS แล้ว Cloudflare ใช้ XDP เป็นด่านแรกในระบบ DDoS mitigation ของพวกเขา โดยสามารถ drop traffic ที่เป็นอันตรายได้ตั้งแต่ edge server ก่อนจะถึง application Facebook หรือ Meta ใช้ eBPF/XDP อย่างกว้างขวางในระบบ load balancing ที่ชื่อ Katran ซึ่งรองรับ traffic มหาศาลของผู้ใช้หลายพันล้านคน นอกจากนี้ Cilium ซึ่งเป็น networking solution ยอดนิยมสำหรับ Kubernetes ก็ใช้ eBPF เป็นพื้นฐานในการจัดการ network policy และ security
ข้อกำหนดสำหรับการใช้งาน XDP
ก่อนนำ XDP ไปใช้งาน ต้องแน่ใจว่าระบบรองรับ โดย Kernel ต้องเป็นเวอร์ชัน 5.15 ขึ้นไปที่เปิด BTF (BPF Type Format), NIC driver ต้องรองรับ XDP เช่น ixgbe, i40e, ice หรือ mlx5, ต้องติดตั้ง libbpf เวอร์ชัน 1.0 ขึ้นไป และควรตั้งค่า auto-reload ผ่าน systemd เพื่อให้ทำงานอัตโนมัติเมื่อ server reboot ที่สำคัญควรตั้งค่า default action เป็น XDP_PASS เสมอ เพื่อให้ traffic ผ่านได้ปกติในกรณีที่ program มีปัญหา
XDP กับ Cloud DDoS Protection ใช้ร่วมกันได้
คำถามที่พบบ่อยคือ ควรใช้ XDP หรือบริการ DDoS Protection จาก Cloud อย่าง Cloudflare คำตอบคือ ใช้ร่วมกัน XDP เหมาะกับการป้องกันที่ Layer 3 และ Layer 4 โดยมี latency ต่ำมากเพียง 10 microsecond และไม่มีค่าใช้จ่ายเพิ่ม แต่รองรับ volumetric attack ได้จำกัดตามขนาด bandwidth ของเซิร์ฟเวอร์ ในขณะที่บริการ Cloud มี latency สูงกว่าที่ 20 ถึง 50 millisecond แต่รองรับ volumetric attack ได้ไม่จำกัดและป้องกัน application-layer attack ได้ด้วย
กลยุทธ์ที่ดีที่สุดคือใช้ XDP เป็นด่านแรกจัดการ Layer 3/4 attack ที่ตัวเซิร์ฟเวอร์ แล้วใช้ Cloud DDoS protection จัดการ Layer 7 attack ทำให้ได้ทั้งความเร็วและความครอบคลุม หากต้องการระบบ security ที่ครอบคลุมทุกชั้น การวางแผนป้องกันแบบ multi-layer เช่นนี้คือสิ่งที่ทีมผู้เชี่ยวชาญจะช่วยออกแบบให้ได้
สรุป
eBPF/XDP คือเทคโนโลยีที่เปลี่ยนวิธีการป้องกัน DDoS โดยสิ้นเชิง ด้วยการทำงานที่ระดับ Network Driver ทำให้สามารถ drop packet ที่เป็นอันตรายได้เร็วกว่า iptables ถึง 100 เท่า รองรับได้ถึง 100 ล้าน packets ต่อวินาทีต่อ core บริษัทระดับ Cloudflare และ Meta ก็ใช้เทคโนโลยีนี้เป็นแกนหลัก ไม่ว่าคุณจะใช้ VPS หรือ Dedicated Server การเข้าใจและนำ XDP ไปประยุกต์ใช้ จะช่วยยกระดับความปลอดภัยของระบบให้แข็งแกร่งขึ้นอย่างก้าวกระโดด
