DDoS (Distributed Denial of Service Attacks) มักถูกบล็อกในระดับเซิร์ฟเวอร์ใช่ไหม
มีวิธีบล็อกในระดับ PHP หรืออย่างน้อยก็ลดได้หรือไม่?
ถ้าไม่วิธีใดที่เร็วที่สุดและใช้บ่อยที่สุดในการหยุดการโจมตี DDoS
DDoS (Distributed Denial of Service Attacks) มักถูกบล็อกในระดับเซิร์ฟเวอร์ใช่ไหม
มีวิธีบล็อกในระดับ PHP หรืออย่างน้อยก็ลดได้หรือไม่?
ถ้าไม่วิธีใดที่เร็วที่สุดและใช้บ่อยที่สุดในการหยุดการโจมตี DDoS
คำตอบ:
DDOS เป็นกลุ่มของการโจมตีที่ครอบงำระบบสำคัญในดาต้าเซ็นเตอร์ ได้แก่ :
ก่อนที่คุณจะเริ่มสร้างการป้องกัน DDOS ของคุณให้พิจารณาว่ามูลค่าที่เสี่ยงต่อกรณีเลวร้ายที่สุดคืออะไร สำหรับบริการที่ไม่สำคัญและใช้งานได้ฟรีสำหรับชุมชนขนาดเล็กมูลค่ารวมที่เสี่ยงอาจเป็นถั่วลิสง สำหรับระบบภารกิจสำคัญที่ต้องจ่ายเงินสำหรับธุรกิจที่มีมูลค่าหลายพันล้านดอลลาร์มูลค่าอาจเป็นมูลค่าของ บริษัท ในกรณีหลังนี้คุณไม่ควรใช้ StackExchange :) อย่างไรก็ตามในการป้องกัน DDOS คุณต้องมีแนวทางการป้องกันเชิงลึก:
อัปเดตระบบและแพ็คเกจซอฟต์แวร์ทั้งหมดของคุณด้วยแพตช์ความปลอดภัยล่าสุด - และฉันหมายถึงทั้งหมด:
ตรวจสอบให้แน่ใจว่าคุณมีไฟร์วอลล์ที่ดีหรือการรักษาความปลอดภัยเครื่องใช้ในการตั้งค่าและสม่ำเสมอตรวจสอบโดยผู้เชี่ยวชาญด้านความปลอดภัยที่มีคุณภาพ กฎที่แข็งแกร่งของไฟร์วอลล์คือการป้องกันที่ดีจากการโจมตีง่ายๆ นอกจากนี้ยังมีประโยชน์ในการจัดการแบนด์วิดท์ที่พร้อมใช้งานสำหรับแต่ละบริการที่เปิดอยู่
มีเครื่องมือตรวจสอบเครือข่ายที่ดีซึ่งจะช่วยให้คุณเข้าใจ:
การโจมตีอาจเป็นการใช้บริการเว็บไซต์ที่ถูกต้องตามกฎหมายอย่างหนัก (เช่นการกดปุ่ม URI ที่ 'ถูกกฎหมาย' เพื่อเรียกใช้การสืบค้นหรือการแทรก / อัปเดต / ลบข้อมูล) คำขอหลายพันหรือหลายล้านรายการที่มาจากที่อยู่ IP ที่แตกต่างกันหลายสิบถึงหลายล้านรายการจะนำเว็บไซต์ไปที่ หัวเข่า. อีกทางเลือกหนึ่งบริการบางอย่างอาจมีราคาแพงมากในการเรียกใช้ซึ่งมีคำขอเพียงไม่กี่คำขอเท่านั้นที่ทำให้เกิด DOS - คิดว่าเป็นรายงานที่มีราคาแพงมาก ดังนั้นคุณต้องมีการตรวจสอบระดับแอปพลิเคชันที่ดีว่าเกิดอะไรขึ้น:
ข้อ จำกัด ที่เหมาะสมและข้อ จำกัด ในการใช้งานของคุณ ตัวอย่างเช่นคุณอาจ:
สุดท้าย แต่ไม่ท้ายสุดเขียนเอกสารแผนการตอบสนอง DOSและรับการตรวจสอบภายในโดยผู้เกี่ยวข้องทั้งหมด: ธุรกิจการจัดการทีมพัฒนา SW ทีมไอทีและผู้เชี่ยวชาญด้านความปลอดภัย ขั้นตอนการเขียนเอกสารจะทำให้คุณและทีมของคุณต้องครุ่นคิดถึงประเด็นต่างๆและช่วยให้คุณเตรียมพร้อมหากสิ่งที่เลวร้ายที่สุดควรเกิดขึ้นในเวลา 03.00 น. ของวันหยุด เอกสารควรครอบคลุม (เหนือสิ่งอื่นใด):
ดังนั้นขอเกริ่นก่อนนี่คือคำตอบเฉพาะบางส่วน:
DDOS มักถูกบล็อกในระดับเซิร์ฟเวอร์ใช่ไหม?
ไม่จริง - การโจมตี DDOS ที่เลวร้ายที่สุดส่วนใหญ่เป็นระดับต่ำ (ที่ระดับแพ็กเก็ต IP) และได้รับการจัดการโดยกฎการกำหนดเส้นทางไฟร์วอลล์และอุปกรณ์รักษาความปลอดภัยที่พัฒนาขึ้นเพื่อรองรับการโจมตี DDOS
มีวิธีบล็อกในระดับ PHP หรืออย่างน้อยก็ลดได้หรือไม่?
การโจมตี DDOS บางอย่างมีเป้าหมายที่แอปพลิเคชันเองโดยส่งคำขอ URI และ HTTP ที่ถูกต้อง เมื่ออัตราการร้องขอสูงขึ้นเซิร์ฟเวอร์ของคุณจะเริ่มดิ้นรนและคุณจะหยุดทำงานของ SLA ในกรณีนี้คุณสามารถทำได้ในระดับ PHP:
การตรวจสอบระดับแอปพลิเคชัน: ตรวจสอบว่าแต่ละบริการ / เพจบันทึกคำขอในลักษณะที่คุณสามารถเห็นสิ่งที่เกิดขึ้น (เพื่อให้คุณสามารถดำเนินการเพื่อลดการโจมตีได้) แนวคิดบางประการ:
มีรูปแบบบันทึกที่คุณสามารถโหลดลงในเครื่องมือบันทึก (หรือ Excel หรือที่คล้ายกัน) ได้อย่างง่ายดายและแยกวิเคราะห์ด้วยเครื่องมือบรรทัดคำสั่ง (grep, sed, awk) โปรดจำไว้ว่า DDOS จะสร้างบันทึกนับล้านบรรทัด คุณอาจจะต้องหั่นบันทึกของคุณ (โดยเฉพาะที่เกี่ยวกับ URI, เวลา, IP และผู้ใช้) เพื่อหาสิ่งที่เกิดขึ้นและจำเป็นต้องสร้างข้อมูลเช่น:
บันทึกที่อยู่ IP ของแต่ละคำขอ อย่าย้อน DNS สิ่งนี้ - แดกดันค่าใช้จ่ายในการทำเช่นนี้ทำให้ DDOS ง่ายขึ้นสำหรับผู้โจมตี
ขีด จำกัด อัตราที่เหมาะสม: คุณสามารถกำหนดจำนวนคำขอที่ IP ที่กำหนดหรือผู้ใช้สามารถทำได้ในช่วงเวลาที่กำหนด ลูกค้าที่ชอบด้วยกฎหมายสามารถทำการร้องขอมากกว่า 10 ครั้งต่อวินาทีได้หรือไม่? ผู้ใช้ที่ไม่ระบุชื่อสามารถเข้าถึงรายงานราคาแพงได้หรือไม่?
CAPTCHA สำหรับการเข้าถึงแบบไม่ระบุตัวตน: ใช้ CAPTCHA สำหรับคำขอที่ไม่ระบุชื่อทั้งหมดเพื่อตรวจสอบว่าผู้ใช้เป็นบุคคลไม่ใช่บอท DDOS
วิธีใดที่เร็วและพบบ่อยที่สุดในการหยุดการโจมตี DDOS
วิธีที่เร็วที่สุดคือยอมให้แบล็กเมล์แม้ว่าสิ่งนี้อาจไม่เป็นที่ต้องการก็ตาม
มิฉะนั้นสิ่งแรกที่คุณต้องทำคือติดต่อผู้ให้บริการโฮสติ้งและ / หรือ CDN ของคุณและทำงานร่วมกับพวกเขา (หากพวกเขาไม่ได้ติดต่อคุณแล้วถามว่าเกิดอะไรขึ้น ... ) เมื่อ DDOS เกิดขึ้นมีแนวโน้มที่จะส่งผลกระทบต่อลูกค้ารายอื่น ๆ ของผู้ให้บริการโฮสติ้งและผู้ให้บริการอาจถูกกดดันให้ปิดไซต์ของคุณเพียงเพื่อปกป้องทรัพยากรของตน เตรียมพร้อมที่จะแบ่งปันบันทึกของคุณ (ข้อมูลใด ๆ และทั้งหมด) กับผู้ให้บริการ บันทึกเหล่านี้รวมกับการตรวจสอบเครือข่ายอาจให้ข้อมูลเพียงพอที่จะป้องกัน / บรรเทาการโจมตี
หากคุณคาดหวังว่าจะมี DDOS เป็นความคิดที่ดีมากที่จะตรวจสอบคุณสมบัติผู้ให้บริการโฮสติ้งของคุณในระดับการป้องกันที่พวกเขาสามารถให้ได้ พวกเขาควรมีประสบการณ์ DDOS และเครื่องมือในการบรรเทาปัญหา - เข้าใจเครื่องมือกระบวนการและขั้นตอนการยกระดับ นอกจากนี้ยังถามเกี่ยวกับสิ่งที่สนับสนุนผู้ให้บริการโฮสติ้งมีจากพวกเขาให้บริการต้นน้ำ บริการเหล่านี้อาจหมายถึงค่าใช้จ่ายล่วงหน้าหรือรายเดือนที่มากขึ้น แต่ถือว่าเป็นนโยบายการประกัน
ในขณะที่ถูกโจมตีคุณจะต้องคว้าบันทึกของคุณและขุดมัน - พยายามหารูปแบบของการโจมตี คุณควรพิจารณาปิดการเข้าถึงแบบไม่ระบุตัวตนและควบคุมบริการที่ถูกโจมตี (เช่นลดการ จำกัด อัตราของแอปพลิเคชันสำหรับบริการ
หากโชคดีและคุณมีฐานลูกค้าจำนวนน้อยคุณอาจสามารถระบุที่อยู่ IP ของลูกค้าที่ถูกต้องได้ หากเป็นกรณีนี้คุณอาจเปลี่ยนไปใช้แนวทางไวท์ลิสต์ชั่วขณะ ตรวจสอบให้แน่ใจว่าลูกค้าของคุณทุกคนรู้ว่าสิ่งนี้เกิดขึ้นเพื่อให้สามารถโทรติดต่อได้หากต้องการเข้าถึงจาก IP ใหม่ :)
Doug McCleanมีคำแนะนำดีๆที่: https://stackoverflow.com/a/1029613/1395668
ตามส่วน PHP ของคำถาม;
แม้ว่าฉันจะไม่พึ่งพา PHP สำหรับสิ่งนี้ แต่ก็สามารถใช้งานได้ แต่ต้องพิจารณาความเป็นไปได้ทั้งหมดเหล่านี้หรือมากกว่านั้น
หลอกง่ายๆ
<?php
// Assuming session is already started
$uri = md5($_SERVER['REQUEST_URI']);
$exp = 3; // 3 seconds
$hash = $uri .'|'. time();
if (!isset($_SESSION['ddos'])) {
$_SESSION['ddos'] = $hash;
}
list($_uri, $_exp) = explode('|', $_SESSION['ddos']);
if ($_uri == $uri && time() - $_exp < $exp) {
header('HTTP/1.1 503 Service Unavailable');
// die('Easy!');
die;
}
// Save last request
$_SESSION['ddos'] = $hash;
?>
ระดับ php ช้าเกินไปในห่วงโซ่คำขอ
การวางเซิร์ฟเวอร์ apache ไว้หลังอุปกรณ์โอเพนซอร์สอาจเป็นตัวเลือกที่ดีสำหรับคุณ
http://tengine.taobao.org/มีเอกสารประกอบและซอร์สโค้ดโมดูลเพิ่มเติมที่มุ่งเป้าไปที่การป้องกัน DDOS เป็นส่วนขยายของ nginx ดังนั้นคุณสามารถตั้งค่าเป็น reverse proxy สำหรับอินสแตนซ์ apache ของคุณได้อย่างง่ายดาย
ดู: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/สำหรับวิธีต่อสู้กับการชนกันมีการโจมตี DoS
ลืมไปโดยสิ้นเชิงเช่นกันhttp://www.cloudflare.comเป็นหนึ่งในไฟร์วอลล์เว็บแอปพลิเคชันฟรีอันดับต้น ๆ พวกเขามีแผนฟรีและจ่ายเงินและจะช่วยคุณจาก DDOS ที่เราใช้มันสำหรับเว็บไซต์ที่มีการเข้าชมสูงของเราเพียงเพื่อความสามารถในการแคช . มันแย่มาก!
คุณไม่สามารถทำได้ในระดับ PHP DDOS เป็นการโจมตีประเภทหนึ่งที่ส่งคำขอไปยังเว็บเซิร์ฟเวอร์ของคุณมากเกินไป เว็บเซิร์ฟเวอร์ของคุณจะปฏิเสธคำขอก่อนที่จะเรียกสคริปต์ PHP ของคุณ
หากคุณใช้ Apache นี่คือเคล็ดลับบางส่วนจาก Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
DDoS ได้รับการจัดการที่ดีที่สุดโดยอุปกรณ์เครือข่ายที่สร้างขึ้นตามวัตถุประสงค์ที่มีราคาแพงมาก โดยทั่วไปโฮสต์ไม่ดีในการป้องกัน DDoS เนื่องจากมีประสิทธิภาพการทำงานที่ค่อนข้างต่ำสภาวะหมดแรงแบนด์วิดท์ที่ จำกัด ฯลฯ การใช้ iptables, apache mods และบริการที่คล้ายกันสามารถช่วยได้ในบางสถานการณ์หากคุณไม่สามารถเข้าถึงฮาร์ดแวร์ลด DDoS ได้ หรือบริการลด DDoS แต่ก็ยังห่างไกลจากความเหมาะสมและยังทำให้คุณเสี่ยงต่อการถูกโจมตี
เกี่ยวกับสิ่งนี้ในฝั่ง PHP:
//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second
$limitps = 10;
if (!isset($_SESSION['first_request'])){
$_SESSION['requests'] = 0;
$_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
$_SESSION['requests']++;
if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){
//write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP
$_SESSION['banip']==1;
}elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){
$_SESSION['requests'] = 0;
$_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
if ($_SESSION['banip']==1) {
header('HTTP/1.1 503 Service Unavailable');
die;
}
มีปลั๊กอินที่คุณสามารถใช้ใน apache สำหรับ ddos / dos เริ่มต้นได้ดีที่นี่ http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
หากคุณใช้ LEMP คุณสามารถตรวจสอบได้ที่นี่ http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
สิ่งเหล่านี้เป็นจุดเริ่มต้นที่ดีราคาไม่แพง
อย่าไม่ใช้การป้องกัน PHP-based ก็แทบจะไม่น่ากลัวและจะมีผลกระทบที่ทุกคน! กำหนดค่าเว็บเซิร์ฟเวอร์ของคุณให้เป็นคำขอ จำกัด อัตราตัวอย่างเช่นใน Nginx โดยใช้โมดูล limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )
แม้ว่าฉันจะแนะนำให้ใช้ CloudFlare เพื่อต่อสู้กับ Layer-4 แต่ไม่ใช่การโจมตีแบบ Layer-7 เว้นแต่คุณจะเต็มใจจ่าย
โดยทั่วไป DDOS จะถูกบล็อกในระดับเซิร์ฟเวอร์โปรดเปิดใช้งานการป้องกัน DDOS ในระดับเซิร์ฟเวอร์ของคุณ โปรดตรวจสอบหมายเหตุด้านล่างสำหรับการป้องกัน DDOS
การตั้งค่าการกำหนดค่า Apache HTTP Server ที่สามารถช่วยป้องกันปัญหา DDOS:
คำสั่ง RequestReadTimeout อนุญาตให้ จำกัด เวลาที่ไคลเอ็นต์อาจใช้ในการส่งคำขอ
อนุญาต 10 วินาทีในการรับคำขอรวมถึงส่วนหัวและ 30 วินาทีในการรับเนื้อหาคำขอ:
RequestReadTimeout header=10 body=30
รออย่างน้อย 10 วินาทีเพื่อรับเนื้อหาที่ร้องขอ หากไคลเอ็นต์ส่งข้อมูลให้เพิ่มระยะหมดเวลา 1 วินาทีสำหรับทุกๆ 1,000 ไบต์ที่ได้รับโดยไม่มีขีด จำกัด สูงสุดสำหรับการหมดเวลา (ยกเว้นขีด จำกัด ที่กำหนดโดย LimitRequestBody ทางอ้อม):
RequestReadTimeout body=10,MinRate=1000
RequestReadTimeout header=10-30,MinRate=500
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
คำสั่ง KeepAliveTimeout อาจลดลงในไซต์ที่อาจมีการโจมตี DoS บางไซต์ถึงกับปิด KeepAlive โดยสิ้นเชิงผ่าน KeepAlive ซึ่งมีข้อเสียอื่น ๆ เกี่ยวกับประสิทธิภาพ ควรตรวจสอบค่าของคำสั่งที่เกี่ยวข้องกับการหมดเวลาต่างๆที่มาจากโมดูลอื่น ๆ
คำสั่ง LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine และ LimitXMLRequestBody ควรได้รับการกำหนดค่าอย่างรอบคอบเพื่อ จำกัด การใช้ทรัพยากรที่ทริกเกอร์โดยอินพุตของไคลเอ็นต์ ปรับแต่งคำสั่ง MaxRequestWorkers เพื่อให้เซิร์ฟเวอร์สามารถจัดการกับจำนวนการเชื่อมต่อพร้อมกันสูงสุดโดยที่ทรัพยากรไม่หมด
ขั้นตอนการต่อต้าน DDOS :