การโจมตี DDoS (Distributed Denial of Service)ผ่านกลยุทธ์การสื่อสารดิจิทัลที่ไม่เหมาะสม ทรัพยากรเซิร์ฟเวอร์โอเวอร์โหลด การโจมตีประเภทนี้ถือเป็นการโจมตีในโลกคอมพิวเตอร์ การกระทำที่น่ารังเกียจนับไม่ถ้วนรวมกันเพื่อสร้างภัยคุกคามที่น่าเกรงขามพอที่จะบังคับให้เซิร์ฟเวอร์ต้องหยุดทำงาน
ที่แย่ที่สุดคือมีหลายวิธีในการ "ทำสงคราม" บนเว็บแบบกองโจรกับโฮสต์ดังกล่าว โชคดีที่เซิร์ฟเวอร์สามารถกำหนดค่าให้ต้านทานการโจมตีดังกล่าวได้
Nginx ซึ่งเป็นระบบเซิร์ฟเวอร์ยอดนิยมสำหรับเครื่อง Unix มาพร้อมกับฟังก์ชันในตัวที่เพียงพอเพื่อจำกัดประสิทธิภาพของการโจมตี DDoS อย่างมาก
ต่อไปนี้คือตัวเลือกที่มีประสิทธิภาพบางส่วนในการจัดการกับภัยคุกคามดังกล่าวด้วย Nginx
จะป้องกันการโจมตี DDoS ด้วย Nginx ได้อย่างไร
สำรองไฟล์การกำหนดค่า
ก่อนที่คุณจะเปลี่ยนการตั้งค่าใดๆ ตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลการกำหนดค่าเซิร์ฟเวอร์ของคุณอย่างรวดเร็ว คำสั่งต่อไปนี้ทำงานเพื่อจุดประสงค์นี้:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original
เมื่อเสร็จแล้วคุณก็พร้อมที่จะดำเนินการต่อ
ตรวจสอบการจราจร
การตรวจสอบการรับส่งข้อมูลบนเซิร์ฟเวอร์ของคุณทำให้ง่ายต่อการเพิ่มประสิทธิภาพการรักษาความปลอดภัยและปรับใช้กลยุทธ์เพิ่มเติม Nginx มีโมดูลที่สร้างขึ้นเพื่อจุดประสงค์นี้โดยเฉพาะ
ตั้งค่าหน้าสถานะ
Nginx มักจะมาพร้อมกับโมดูลที่เรียกว่า"stub status" (http_stub_status_module) ซึ่งช่วยให้ฟังก์ชันประเภทนี้สามารถรวมเข้ากับสภาพแวดล้อมของเซิร์ฟเวอร์ได้อย่างง่ายดาย ขั้นแรก ให้ทดสอบโดยใช้คำสั่งต่อไปนี้:
nginx -V
หรือใช้คำสั่งต่อไปนี้เพื่อค้นหาได้เร็วขึ้น:
nginx -V 2>&1 | grep -o with-http_stub_status_module
หากผลลัพธ์ของคุณดูเหมือนข้างต้น แสดงว่าทุกอย่างเรียบร้อยดี มิฉะนั้น คุณจะต้องติดตั้งหรือคอมไพล์การติดตั้ง Nginx อีกครั้งด้วยโมดูลที่ให้มาด้วย
การตั้งค่าหน้าสถานะที่คุณสามารถตรวจสอบได้นั้นง่ายดาย แต่คุณยังต้องจำกัดการเข้าถึงขั้นต่ำ (คอมพิวเตอร์เท่านั้น) เพื่อรักษาความปลอดภัย เริ่มต้นด้วยการเปิดไฟล์การกำหนดค่าหลักของเซิร์ฟเวอร์ซึ่งอยู่ที่/etc/nginx/nginx.conf
เปิดและเพิ่มโค้ดต่อไปนี้ใน"http directive"เพื่อเปิดใช้งานโมดูล โดยแทนที่ข้อมูลของคุณเองใน"localhost" "/status_page"และ"127.0.0.1"
server {
listen 80;
listen [::]:80;
server_name localhost;
##
# Status Page Settings
##
location /status_page {
stub_status on;
allow 127.0.0.1;
allow ::1;
deny all;
}
}
หมายเหตุ : คุณจะต้องมีสิทธิ์ sudo เพื่อแก้ไขไฟล์นี้
ตอนนี้ ทดสอบการกำหนดค่าของคุณ:
sudo nginx -t
หากทุกอย่างเรียบร้อยดี ให้ส่งสัญญาณรีโหลดไปยังเซิร์ฟเวอร์:
sudo systemctl reload nginx
หากต้องการเข้าถึงหน้าสถานะของคุณ ให้ไปที่ตำแหน่งserver_nameตามด้วย“/status_page”ในเว็บเบราว์เซอร์หรือโดยใช้เครื่องมือบรรทัดคำสั่ง เช่นcurl (ซึ่งจะเป็นประโยชน์หากแคชของเบราว์เซอร์ของคุณไม่ได้รับการอัพเดตโดยอัตโนมัติ) นี่คือคำสั่ง curlเพื่อเข้าถึงเพจตามตัวอย่าง:
curl localhost/status_page
ในเบราว์เซอร์ ผลลัพธ์คำสั่งดังกล่าวจะมีลักษณะเหมือนภาพต่อไปนี้
ตรวจสอบบันทึกการเข้าถึง
หากคุณสังเกตเห็นการรับส่งข้อมูลที่ผิดปกติเมื่อตรวจสอบหน้าสถานะที่กำหนดค่าไว้ด้านบน คุณอาจต้องการตรวจสอบบันทึกการเข้าถึงของเซิร์ฟเวอร์ สามารถดูบันทึกการเข้าถึงเซิร์ฟเวอร์ได้ที่“/var/log/nginx/access.log”บันทึกจะแสดงวิธี HTTP ที่ใช้ วันที่/เวลาที่พยายามเข้าถึง ตัวแทนผู้ใช้ และหน้าที่เข้าถึง
ขีดจำกัดการเชื่อมต่อ
ในบรรดากลยุทธ์ที่มีประโยชน์มากมายในการป้องกันการโจมตี DDoS ที่ควรค่าแก่การลอง หนึ่งในกลยุทธ์ที่ง่ายและมีประสิทธิภาพมากที่สุดคือการจำกัดอัตราการรับส่งข้อมูลขาเข้า
ตามหลักการแล้ว คุณควรจำกัดการเข้าถึงให้เพียงพอเพื่อป้องกันบอทที่เป็นอันตรายล้นเซิร์ฟเวอร์ของคุณ ในขณะที่ยังคงรักษาอัตราที่สมเหตุสมผลไว้ ใน Nginx สามารถทำได้ด้วย คำสั่งlimit_req_zoneและlimit_reqรหัสต่อไปนี้จะตั้งค่าข้อจำกัดหน่วยความจำและความเร็วเพื่อใช้ในตำแหน่งใดก็ตามที่เซิร์ฟเวอร์ของคุณได้รับการกำหนดค่าให้แสดง:
limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;
“โซน”ระบุชื่อและความจุ (ในหน่วยเมกะไบต์ในกรณีนี้) ของพื้นที่หน่วยความจำที่จัดเก็บคำขอของผู้ใช้“อัตรา”กำหนดจำนวนคำขอทั้งหมดที่ Nginx จะยอมรับต่อวินาที (10 คำขอในตัวอย่างนี้) คิดว่าโค้ดนี้เป็นกฎ และสิ่งต่อไปนี้คือการใช้กฎนั้น:
limit_req zone=speedbump burst=20;
โค้ดข้างต้นมีประโยชน์มากกว่าการใช้กฎขีดจำกัดเพียงเล็กน้อย นอกจากนี้ยังเพิ่มคิวเล็กๆ สูงสุดถึง 20 คำขอเพื่อจัดการการเชื่อมต่อที่ถูกต้องตามกฎหมายอย่างสวยงาม ซึ่งแสดงผลเร็วกว่าปกติเล็กน้อย ซึ่งเกินกฎและคิวซึ่งส่งผลให้เกิดข้อผิดพลาด 503 สำหรับไคลเอนต์ คำสั่งทั้งสองมีลักษณะเช่นนี้ใน nginx.conf:
สร้างบัญชีดำของที่อยู่ IP
หากคุณได้รับที่อยู่ IPที่ทำการโจมตี DDoS บนเซิร์ฟเวอร์ของคุณ คุณสามารถแบล็คลิสต์ที่อยู่นั้นและกำจัดการเชื่อมต่อใด ๆ ที่มาจากที่อยู่ IP นี้
เพิ่มรหัสต่อไปนี้ลงในคำสั่งเซิร์ฟเวอร์ของคุณ:
location / {
deny 123.123.123.0/28;
# ...
}
บล็อกคำขอสำหรับไฟล์บางไฟล์
หากการโจมตี DDoS กำหนดเป้าหมายไปที่ไฟล์บางไฟล์บนเซิร์ฟเวอร์ เช่น ไฟล์ xmlrpc.phpบนWordPress (ซึ่งเป็นไฟล์ที่มีการกำหนดเป้าหมายโดยทั่วไปในเซิร์ฟเวอร์ WordPress ส่วนใหญ่) คุณสามารถบล็อกไฟล์เหล่านั้นทั้งหมดได้ ตามข้อกำหนดทั้งหมด เพิ่มรหัสนี้ลงในคำสั่งเซิร์ฟเวอร์ของคุณ:
location /xmlrpc.php {
deny all;
}
ทำตามขั้นตอนข้างต้นแล้วคุณจะสามารถจำกัดการโจมตี DDoS ส่วนใหญ่ได้ อย่าลืมตรวจสอบเอกสาร Nginxเพื่อดูตัวเลือกความปลอดภัยเพิ่มเติมที่คุณสามารถใช้ได้
หวังว่าคุณจะประสบความสำเร็จ