การโจมตี Distributed Denial of Service หรือ "DDoS" ยึดทรัพยากรเซิร์ฟเวอร์ผ่านกลยุทธ์การสื่อสารดิจิทัลที่เป็นการละเมิด สוג การโจมตีนี้คือการปล้นแบบมี組织的ของโลกคอมพิวเตอร์ การกระทำรบกวนมากมายรวมกันสร้างภัยคุกคามที่พอจะหยุดเซิร์ฟเวอร์ที่มีประสบการณ์ได้ สิ่งที่แย่ที่สุด คือมีหลายวิธีในการทำสงครามเว็บแบบกuerrilla ต่อเซิร์ฟเวอร์ที่ไม่ได้เตรียมพร้อม โชคดีที่เซิร์ฟเวอร์สามารถตั้งค่าให้ต่อสู้กลับได้
Nginx ระบบเซิร์ฟเวอร์ยอดนิยมสำหรับเครื่อง Unix มาพร้อมฟังก์ชัน Built-in พอที่จะจำกัดประสิทธิภาพของการโจมตี DDoS ได้มาก
นี่คือตัวเลือกที่มีประสิทธิภาพสำหรับจัดการภัยคุกคามดังกล่าวบนเซิร์ฟเวอร์ที่ขับเคลื่อนด้วย Nginx:
สำรองไฟล์การตั้งค่า
ก่อนเปลี่ยนการตั้งค่าใดๆ ให้สำรองไฟล์ Config ของเซิร์ฟเวอร์ก่อน คำสั่งต่อไปนี้ทำได้:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original
เมื่อเสร็จ คุณพร้อมดำเนินการต่อ
ตรวจสอบトラフィก
ติดตามトラフィกของเซิร์ฟเวอร์ทำให้ง่ายต่อการเพิ่มประสิทธิภาพความปลอดภัยและนำกลยุทธ์เพิ่มเติมมาใช้ภายหลัง Nginx มีโมดูลสำหรับสิ่งนี้โดยเฉพาะ
ตั้งค่า Status Page
Nginx มักมาพร้อมโมดูลชื่อ "stub status" (http_stub_status_module) ที่อนุญาตให้ฟังก์ชันนี้รวมเข้าสู่สภาพแวดล้อมเซิร์ฟเวอร์ได้ง่าย ก่อนอื่น ตรวจสอบด้วยคำสั่ง:
nginx -V
หรือ Pipe ไป grep เพื่อหาเร็วขึ้น:
nginx -V 2>&1 | grep -o with-http_stub_status_module
หากเอาต์พุทเหมือนข้างต้น คุณพร้อมแล้ว มิฉะนั้น คุณต้องติดตั้งใหม่หรือคอมไพล์ Nginx ใหม่พร้อมโมดูลนี้
การตั้งค่า Status Page ที่คุณตรวจสอบได้ง่าย แต่อยู่ดี คุณต้องจำกัดการเข้าถึงให้แค่ขั้นต่ำ (เครื่องของคุณ) เพื่อความปลอดภัย เริ่มด้วยการเปิดไฟล์ Config หลักของเซิร์ฟเวอร์ที่ /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
หากทุกอย่างดี ส่งสัญญาณ Reload ให้เซิร์ฟเวอร์:
sudo systemctl reload nginx
เพื่อเข้าถึง Status Page ไปที่ server_name ของคุณตามด้วย "/status_page" ในเบราว์เซอร์ หรือใช้เครื่องมือบรรทัดคำสั่งอย่าง curl (ช่วยหาก Cache เบราว์เซอร์ไม่อัปเดตอัตโนมัติ) คำสั่ง curl ตัวอย่าง:
curl localhost/status_page
ตรวจสอบ Access Logs
หากสังเกตトラフィกผิดปกติเมื่อเช็ค Status Page ข้างต้น อาจดีที่จะเช็ค Access Log ของเซิร์ฟเวอร์ หาได้ที่ /var/log/nginx/access.log Log แสดง HTTP Methods, วันที่/เวลาการเข้าถึง, User Agents และหน้าที่เข้าถึง
จำกัดการเชื่อมต่อ
ในกลยุทธ์ที่มีประโยชน์มากสำหรับป้องกัน DDoS หนึ่งในที่เรียบง่ายและมีประสิทธิภาพที่สุดคือการจำกัดอัตราการเข้าถึง (Rate Limiting)
ในทาง lý tưởng คุณควรกำจัดการเข้าถึงพอที่จะป้องกัน Bot ร้ายกาจไม่ให้ überwältigen เซิร์ฟเวอร์ด้วยอัตราที่มนุษย์ทำไม่ได้ ในขณะที่รักษาอัตราที่สมเหตุสมผลสำหรับ Client มนุษย์ ใน Nginx ทำได้ด้วย Directives limit_req_zone และ limit_req โค้ดต่อไปตั้งค่าข้อจำกัดหน่วยความจำและอัตราสำหรับใช้ใน Location ใดก็ตามที่เซิร์ฟเวอร์ตั้งค่าแสดง:
limit_req_zone $binary_remote_addr zone=speedbump:10m rate=10r/s;
"Zone" ระบุชื่อและขนาด (Megabytes ในกรณีนี้) ของพื้นที่ในหน่วยความจำที่เก็บคำขอของผู้ใช้ "Rate" กำหนดจำนวนคำขอทั้งหมดที่ Nginx จะยอมรับทุกวินาที (10 ในตัวอย่าง) คิดโค้ดนี้เป็นกฎ และโค้ดต่อไปเป็นการใช้กฎนั้น:
limit_req zone=speedbump burst=20;
โค้ดข้างต้นทำมากกว่าการ implement กฎจำกัด มันเพิ่มคิวเล็กๆ สูงสุด 20 คำขอ เพื่อจัดการการเชื่อมต่อที่ถูกต้องที่มาถึงเร็วกว่าปกติเล็กน้อย เกินทั้งกฎและคิว จะได้ Error 503 สำหรับ Client นี่คือลักษณะของทั้งสอง Directives ใน nginx.conf:
บล็อคลิ้ง IP Address (Blacklisting)
หากคุณได้ IP Address ที่กำลัง DDoS เซิร์ฟเวอร์ของคุณ คุณสามารถ Blacklist มันและ Drop การเชื่อมต่อจาก IP นั้นได้
เพิ่มโค้ดต่อไปไปยัง Server Directive:
location / {
deny 123.123.123.0/28;
# ...
}
บล็อคคำขอไปยังไฟล์บางไฟล์
หากการโจมตี DDoS มุ่งเป้าไฟล์บนเซิร์ฟเวอร์ของคุณ - ตัวอย่าง ไฟล์ xmlrpc.php บน WordPress (ไฟล์ที่ถูกมุ่งเป้ามากที่สุดในเซิร์ฟเวอร์ WordPress ส่วนใหญ่) - คุณสามารถบล็อคคำขอทั้งหมดไปยังมันได้ เพิ่มโค้ดนี้ไปยัง Server Directive:
location /xmlrpc.php {
deny all;
}
ปฏิบัติตามขั้นตอนข้างต้น และคุณจะสามารถจำกัดการโจมตี DDoS ส่วนใหญ่ได้ อย่าลืมดูเอกสาร Nginx สำหรับตัวเลือกความปลอดภัยเพิ่มเติมที่คุณสามารถวางไว้ได้