การปฏิเสธบริการแบบกระจายหรือการโจมตี “DDoS” ยึดทรัพยากรของเซิร์ฟเวอร์ผ่านกลยุทธ์การสื่อสารทางดิจิทัลที่ไม่เหมาะสม การโจมตีประเภทนี้เป็นการจู่โจมของโลกคอมพิวเตอร์ การกระทำต่อต้านการคล้ายที่น่ารำคาญจำนวนมากรวมกันเพื่อสร้างภัยคุกคามที่น่าเกรงขามมากพอที่จะหยุดเซิร์ฟเวอร์ที่ช่ำชองในเส้นทางของมัน ที่เลวร้ายที่สุด มีหลายวิธีในการทำสงครามเว็บแบบกองโจรกับเซิร์ฟเวอร์ที่ไม่สงสัย โชคดีที่เซิร์ฟเวอร์สามารถกำหนดค่าให้ต่อสู้กลับได้
Nginx ซึ่งเป็นระบบเซิร์ฟเวอร์ที่ได้รับความนิยมอย่างสูงสำหรับเครื่อง Unix มาพร้อมกับฟังก์ชันในตัวที่เพียงพอที่จะจำกัดประสิทธิภาพของการโจมตี DDoS ได้อย่างมาก
ต่อไปนี้คือตัวเลือกที่มีประสิทธิภาพบางประการสำหรับการจัดการภัยคุกคามดังกล่าวบนเซิร์ฟเวอร์ที่ขับเคลื่อนด้วย Nginx:
สำรองไฟล์การกำหนดค่าของคุณ
ก่อนที่คุณจะเปลี่ยนการตั้งค่าใดๆ โปรดตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลการกำหนดค่าเซิร์ฟเวอร์ของคุณอย่างรวดเร็ว คำสั่งต่อไปนี้ใช้ได้กับสิ่งนี้:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original
เมื่อเสร็จแล้วคุณก็พร้อมที่จะไปต่อ
ตรวจสอบสภาพการจราจร
การตรวจสอบการรับส่งข้อมูลของเซิร์ฟเวอร์ทำให้ง่ายต่อการเพิ่มประสิทธิภาพการรักษาความปลอดภัยและนำกลวิธีเพิ่มเติมไปใช้ Nginx มีโมดูลที่สร้างขึ้นมาเพื่อสิ่งนี้โดยเฉพาะ
ตั้งค่าหน้าสถานะ
โดยทั่วไปแล้ว Nginx จะมาพร้อมกับโมดูลที่ชื่อว่า “stub status” (http_stub_status_module) ที่ช่วยให้ฟังก์ชันประเภทนี้สามารถรวมเข้ากับสภาพแวดล้อมเซิร์ฟเวอร์ของคุณได้อย่างง่ายดาย ก่อนอื่น ให้ตรวจสอบโดยใช้คำสั่งต่อไปนี้:
nginx -V
หรือไพพ์ด้านบนเพื่อให้ grep ค้นหาได้เร็วขึ้น:
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
ในการเข้าถึงหน้าสถานะของคุณ ไปที่ตำแหน่งเซิร์ฟเวอร์_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;
โค้ดด้านบนนี้ทำมากกว่าแค่การใช้กฎการจำกัดของเรา นอกจากนี้ยังเพิ่มคิวขนาดเล็กถึงยี่สิบคำขอเพื่อจัดการการเชื่อมต่อที่ถูกต้องอย่างนุ่มนวลซึ่งแสดงเร็วกว่าปกติเล็กน้อย ซึ่งเกินทั้งกฎและคิวส่งผลให้เกิดข้อผิดพลาด 503 สำหรับลูกค้า นี่คือสิ่งที่ทั้งสองคำสั่งดูเหมือนใน nginx.conf:
การขึ้นบัญชีดำที่อยู่ IP
หากคุณสามารถยึดที่อยู่ IP ที่เป็น DDoSing เซิร์ฟเวอร์ของคุณ คุณสามารถขึ้นบัญชีดำและยกเลิกการเชื่อมต่อใดๆ ที่มาจากที่อยู่ IP นี้
เพิ่มรหัสต่อไปนี้ในคำสั่งเซิร์ฟเวอร์ของคุณ:
location / { deny 123.123.123.0/28; # ... }
การบล็อกคำขอบางไฟล์
หากการโจมตี DDoS กำหนดเป้าหมายไปยังไฟล์บางไฟล์บนเซิร์ฟเวอร์ของคุณ ตัวอย่างเช่น ไฟล์ xmlrpc.php บน WordPress (ไฟล์นี้เป็นไฟล์ที่มีการกำหนดเป้าหมายอย่างหนักในเซิร์ฟเวอร์ WordPress ส่วนใหญ่) คุณสามารถบล็อกคำขอทั้งหมดที่ส่งถึงได้ เพิ่มรหัสนี้ในคำสั่งเซิร์ฟเวอร์ของคุณ:
location /xmlrpc.php { deny all; }
ปฏิบัติตามขั้นตอนข้างต้น และคุณจะสามารถจำกัดการโจมตี DDoS ส่วนใหญ่ได้ อย่าลืมตรวจสอบเอกสาร Nginx สำหรับตัวเลือกความปลอดภัยเพิ่มเติมที่คุณสามารถใช้ได้