Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

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

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

การปฏิเสธบริการแบบกระจายหรือการโจมตี “DDoS” ยึดทรัพยากรของเซิร์ฟเวอร์ผ่านกลยุทธ์การสื่อสารทางดิจิทัลที่ไม่เหมาะสม การโจมตีประเภทนี้เป็นการจู่โจมของโลกคอมพิวเตอร์ การกระทำต่อต้านการคล้ายที่น่ารำคาญจำนวนมากรวมกันเพื่อสร้างภัยคุกคามที่น่าเกรงขามมากพอที่จะหยุดเซิร์ฟเวอร์ที่ช่ำชองในเส้นทางของมัน ที่เลวร้ายที่สุด มีหลายวิธีในการทำสงครามเว็บแบบกองโจรกับเซิร์ฟเวอร์ที่ไม่สงสัย โชคดีที่เซิร์ฟเวอร์สามารถกำหนดค่าให้ต่อสู้กลับได้

Nginx ซึ่งเป็นระบบเซิร์ฟเวอร์ที่ได้รับความนิยมอย่างสูงสำหรับเครื่อง Unix มาพร้อมกับฟังก์ชันในตัวที่เพียงพอที่จะจำกัดประสิทธิภาพของการโจมตี DDoS ได้อย่างมาก

ต่อไปนี้คือตัวเลือกที่มีประสิทธิภาพบางประการสำหรับการจัดการภัยคุกคามดังกล่าวบนเซิร์ฟเวอร์ที่ขับเคลื่อนด้วย Nginx:

สำรองไฟล์การกำหนดค่าของคุณ

ก่อนที่คุณจะเปลี่ยนการตั้งค่าใดๆ โปรดตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลการกำหนดค่าเซิร์ฟเวอร์ของคุณอย่างรวดเร็ว คำสั่งต่อไปนี้ใช้ได้กับสิ่งนี้:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original

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

เมื่อเสร็จแล้วคุณก็พร้อมที่จะไปต่อ

ตรวจสอบสภาพการจราจร

การตรวจสอบการรับส่งข้อมูลของเซิร์ฟเวอร์ทำให้ง่ายต่อการเพิ่มประสิทธิภาพการรักษาความปลอดภัยและนำกลวิธีเพิ่มเติมไปใช้ Nginx มีโมดูลที่สร้างขึ้นมาเพื่อสิ่งนี้โดยเฉพาะ

ตั้งค่าหน้าสถานะ

โดยทั่วไปแล้ว Nginx จะมาพร้อมกับโมดูลที่ชื่อว่า “stub status” (http_stub_status_module) ที่ช่วยให้ฟังก์ชันประเภทนี้สามารถรวมเข้ากับสภาพแวดล้อมเซิร์ฟเวอร์ของคุณได้อย่างง่ายดาย ก่อนอื่น ให้ตรวจสอบโดยใช้คำสั่งต่อไปนี้:

nginx -V

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

หรือไพพ์ด้านบนเพื่อให้ grep ค้นหาได้เร็วขึ้น:

nginx -V 2>&1 | grep -o with-http_stub_status_module

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

หากผลลัพธ์ของคุณดูเหมือนผลลัพธ์ข้างต้น คุณก็พร้อมแล้ว มิฉะนั้น คุณจะต้องติดตั้งใหม่หรือคอมไพล์การติดตั้ง Nginx ของคุณใหม่โดยมีโมดูลรวมอยู่ด้วย

การตั้งค่าหน้าสถานะที่คุณสามารถตรวจสอบได้นั้นง่ายมาก แต่คุณจะต้องจำกัดการเข้าถึงให้เหลือน้อยที่สุด (เครื่องของคุณ) เพื่อความปลอดภัย เริ่มต้นด้วยการเปิดไฟล์กำหนดค่าหลักของเซิร์ฟเวอร์ที่ “/etc/nginx/nginx.conf”

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

เปิดและเพิ่มโค้ดต่อไปนี้ใน "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 เพื่อแก้ไขไฟล์นี้

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

ตอนนี้ทดสอบการกำหนดค่าของคุณ:

sudo nginx -t

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

ถ้าทุกอย่างเรียบร้อย ส่งสัญญาณโหลดเซิร์ฟเวอร์ของคุณ:

sudo systemctl reload nginx

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

ในการเข้าถึงหน้าสถานะของคุณ ไปที่ตำแหน่งเซิร์ฟเวอร์_name ตามด้วย “/status_page” ในเว็บเบราว์เซอร์หรือใช้เครื่องมือบรรทัดคำสั่ง เช่น curl (สิ่งนี้มีประโยชน์หากแคชของเบราว์เซอร์ของคุณไม่อัปเดตโดยอัตโนมัติ) ต่อไปนี้คือคำสั่ง curl เพื่อเข้าถึงหน้าในตัวอย่างของเรา:

curl localhost/status_page

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

ในเบราว์เซอร์ด้านบนจะมีลักษณะเหมือนภาพต่อไปนี้

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

ตรวจสอบบันทึกการเข้าใช้

หากคุณสังเกตเห็นการรับส่งข้อมูลที่ผิดปกติเมื่อตรวจสอบหน้าสถานะที่กำหนดค่าไว้ด้านบน คุณควรตรวจสอบบันทึกการเข้าถึงของเซิร์ฟเวอร์ สามารถพบได้ที่ “/var/log/nginx/access.log” บันทึกแสดงรายการวิธี HTTP ที่ใช้ วันที่/เวลาที่พยายามเข้าถึง ตัวแทนผู้ใช้ และหน้าที่เข้าถึง

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

จำกัดการเชื่อมต่อ

ในบรรดากลวิธีที่มีประโยชน์มากมายที่ควรค่าแก่ความพยายามในการป้องกันการโจมตี 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:

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

การขึ้นบัญชีดำที่อยู่ IP

หากคุณสามารถยึดที่อยู่ IP ที่เป็น DDoSing เซิร์ฟเวอร์ของคุณ คุณสามารถขึ้นบัญชีดำและยกเลิกการเชื่อมต่อใดๆ ที่มาจากที่อยู่ IP นี้

เพิ่มรหัสต่อไปนี้ในคำสั่งเซิร์ฟเวอร์ของคุณ:

location / {
    deny 123.123.123.0/28;
    # ...
}

การบล็อกคำขอบางไฟล์

หากการโจมตี DDoS กำหนดเป้าหมายไปยังไฟล์บางไฟล์บนเซิร์ฟเวอร์ของคุณ ตัวอย่างเช่น ไฟล์ xmlrpc.php บน WordPress (ไฟล์นี้เป็นไฟล์ที่มีการกำหนดเป้าหมายอย่างหนักในเซิร์ฟเวอร์ WordPress ส่วนใหญ่) คุณสามารถบล็อกคำขอทั้งหมดที่ส่งถึงได้ เพิ่มรหัสนี้ในคำสั่งเซิร์ฟเวอร์ของคุณ:

location /xmlrpc.php {
    deny all;
}

ปฏิบัติตามขั้นตอนข้างต้น และคุณจะสามารถจำกัดการโจมตี DDoS ส่วนใหญ่ได้ อย่าลืมตรวจสอบเอกสาร Nginx สำหรับตัวเลือกความปลอดภัยเพิ่มเติมที่คุณสามารถใช้ได้