Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีป้องกันการโจมตี DDoS ด้วย Nginx

การโจมตี 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 สำหรับตัวเลือกความปลอดภัยเพิ่มเติมที่คุณสามารถวางไว้ได้