วิธีเปิดใช้งานการป้องกัน DDoS


87

DDoS (Distributed Denial of Service Attacks) มักถูกบล็อกในระดับเซิร์ฟเวอร์ใช่ไหม

มีวิธีบล็อกในระดับ PHP หรืออย่างน้อยก็ลดได้หรือไม่?

ถ้าไม่วิธีใดที่เร็วที่สุดและใช้บ่อยที่สุดในการหยุดการโจมตี DDoS


จากที่ไม่มีอะไรดีขึ้นนี่คือรายการโมดูล Apache ที่อาจช่วยได้ ดูเหมือนว่าจะไม่ร่ำรวยมากนักและทั้งสองโครงการจากสี่โครงการ (ตามที่ค้นหาโดย 'dos') ปรากฏว่าไม่มีที่ไหนเลย
Audrius Meskauskas

อะไรทำนองนี้? mod-antiloris.sourceforge.net
K-Gun

DDOS จะประสบความสำเร็จเมื่อระบบไม่สามารถดำเนินการตามคำขอทั้งหมดที่โจมตีได้อีกต่อไป หากคุณเพิ่มโค้ดในแอปพลิเคชันของคุณที่ตรวจสอบคำขอแต่ละรายการว่า "นี่เป็นการโจมตี DDOS หรือไม่" แสดงว่ารหัสนั้นทำอันตรายมากกว่านั้นเป็นผลดีเพราะต้องใช้ทรัพยากรเพิ่มขึ้นเล็กน้อยสำหรับแต่ละคำขอ สิ่งนี้จะใช้ได้เฉพาะในสภาพแวดล้อมที่ จำกัด มากซึ่งไม่อนุญาตให้มีการร้องขอแบบไม่ระบุตัวตน
Hugo Delsing

คำตอบ:


189

DDOS เป็นกลุ่มของการโจมตีที่ครอบงำระบบสำคัญในดาต้าเซ็นเตอร์ ได้แก่ :

  • การเชื่อมต่อเครือข่ายของศูนย์โฮสติ้งกับอินเทอร์เน็ต
  • เครือข่ายและเราเตอร์ภายในของศูนย์โฮสติ้ง
  • ไฟร์วอลล์และโหลดบาลานเซอร์ของคุณ
  • เว็บเซิร์ฟเวอร์แอ็พพลิเคชันเซิร์ฟเวอร์และฐานข้อมูลของคุณ

ก่อนที่คุณจะเริ่มสร้างการป้องกัน DDOS ของคุณให้พิจารณาว่ามูลค่าที่เสี่ยงต่อกรณีเลวร้ายที่สุดคืออะไร สำหรับบริการที่ไม่สำคัญและใช้งานได้ฟรีสำหรับชุมชนขนาดเล็กมูลค่ารวมที่เสี่ยงอาจเป็นถั่วลิสง สำหรับระบบภารกิจสำคัญที่ต้องจ่ายเงินสำหรับธุรกิจที่มีมูลค่าหลายพันล้านดอลลาร์มูลค่าอาจเป็นมูลค่าของ บริษัท ในกรณีหลังนี้คุณไม่ควรใช้ StackExchange :) อย่างไรก็ตามในการป้องกัน DDOS คุณต้องมีแนวทางการป้องกันเชิงลึก:

  1. ทำงานร่วมกับศูนย์โฮสติ้งของคุณเพื่อทำความเข้าใจเกี่ยวกับบริการที่พวกเขานำเสนอรวมถึงการกรอง IP และพอร์ตที่การเชื่อมต่อเครือข่ายกับอินเทอร์เน็ตและบริการไฟร์วอลล์ที่พวกเขานำเสนอ นี่เป็นสิ่งสำคัญ: เว็บไซต์จำนวนมากถูกดึงออกจากอินเทอร์เน็ตโดย บริษัท โฮสติ้งเนื่องจาก บริษัท โฮสติ้งเกี่ยวข้องกับการหยุดชะงักของศูนย์ข้อมูลที่เกิดจาก DDOS ให้กับลูกค้ารายหนึ่ง นอกจากนี้ในระหว่างการโจมตี DDOS คุณจะต้องทำงานอย่างใกล้ชิดกับเจ้าหน้าที่ของศูนย์โฮสติ้งดังนั้นโปรดทราบหมายเลขฉุกเฉินของพวกเขาและปฏิบัติตามเงื่อนไขที่ดี :) พวกเขาควรจะสามารถปิดกั้นภูมิภาคระหว่างประเทศทั้งหมดบล็อกบริการหรือเครือข่ายเฉพาะอย่างสมบูรณ์ โปรโตคอลและมาตรการป้องกันในวงกว้างอื่น ๆ หรืออนุญาตเฉพาะ IP ที่อนุญาตพิเศษเท่านั้น (ขึ้นอยู่กับรูปแบบธุรกิจของคุณ)
  2. ขณะอยู่ในศูนย์โฮสต์ให้ใช้เครือข่ายการจัดส่งเนื้อหาเพื่อแจกจ่ายบริการ (ส่วนใหญ่คงที่) ใกล้กับผู้ใช้ของคุณและซ่อนเซิร์ฟเวอร์จริงของคุณจากสถาปนิก DDOS CDN แบบเต็มมีขนาดใหญ่เกินไปสำหรับ DDOS ที่จะนำโหนดทั้งหมดออกไปในทุกประเทศ หาก DDOS มุ่งเน้นไปที่ประเทศเดียวอย่างน้อยผู้ใช้รายอื่นก็ยังใช้ได้
  3. อัปเดตระบบและแพ็คเกจซอฟต์แวร์ทั้งหมดของคุณด้วยแพตช์ความปลอดภัยล่าสุด - และฉันหมายถึงทั้งหมด:

    • สวิตช์ที่มีการจัดการ - บางครั้งสิ่งเหล่านี้จำเป็นต้องอัปเดต
    • เราเตอร์
    • ไฟร์วอลล์
    • โหลดบาลานเซอร์
    • ระบบปฏิบัติการ
    • เว็บเซิร์ฟเวอร์
    • ภาษาและไลบรารี
  4. ตรวจสอบให้แน่ใจว่าคุณมีไฟร์วอลล์ที่ดีหรือการรักษาความปลอดภัยเครื่องใช้ในการตั้งค่าและสม่ำเสมอตรวจสอบโดยผู้เชี่ยวชาญด้านความปลอดภัยที่มีคุณภาพ กฎที่แข็งแกร่งของไฟร์วอลล์คือการป้องกันที่ดีจากการโจมตีง่ายๆ นอกจากนี้ยังมีประโยชน์ในการจัดการแบนด์วิดท์ที่พร้อมใช้งานสำหรับแต่ละบริการที่เปิดอยู่

  5. มีเครื่องมือตรวจสอบเครือข่ายที่ดีซึ่งจะช่วยให้คุณเข้าใจ:

    • ว่าคุณถูกโจมตีแทนที่จะอยู่ภายใต้ภาระหนัก
    • แหล่งที่มาของการโจมตี (ซึ่งอาจรวมถึงประเทศที่คุณไม่ได้ทำธุรกิจด้วยตามปกติ) และ
    • การโจมตีคืออะไร (พอร์ตบริการโปรโตคอล IP และเนื้อหาแพ็คเก็ต)
  6. การโจมตีอาจเป็นการใช้บริการเว็บไซต์ที่ถูกต้องตามกฎหมายอย่างหนัก (เช่นการกดปุ่ม URI ที่ 'ถูกกฎหมาย' เพื่อเรียกใช้การสืบค้นหรือการแทรก / อัปเดต / ลบข้อมูล) คำขอหลายพันหรือหลายล้านรายการที่มาจากที่อยู่ IP ที่แตกต่างกันหลายสิบถึงหลายล้านรายการจะนำเว็บไซต์ไปที่ หัวเข่า. อีกทางเลือกหนึ่งบริการบางอย่างอาจมีราคาแพงมากในการเรียกใช้ซึ่งมีคำขอเพียงไม่กี่คำขอเท่านั้นที่ทำให้เกิด DOS - คิดว่าเป็นรายงานที่มีราคาแพงมาก ดังนั้นคุณต้องมีการตรวจสอบระดับแอปพลิเคชันที่ดีว่าเกิดอะไรขึ้น:

    • มีการเรียกใช้บริการใดบ้างและมีการส่งข้อโต้แย้ง / ข้อมูลใดบ้าง (เช่นการเข้าสู่ระบบแอปพลิเคชันของคุณ)
    • ผู้ใช้รายใดกำลังทำการเรียกใช้และจาก IP ใด (เช่นการเข้าสู่ระบบแอปพลิเคชันของคุณ)
    • สิ่งที่เคียวรีและแทรก / อัพเดต / ลบ DB กำลังดำเนินการอยู่
    • โหลดค่าเฉลี่ยการใช้งาน CPU ดิสก์ i / o ทราฟฟิกเครือข่ายบนคอมพิวเตอร์ทุกเครื่อง (และ VM) ในระบบของคุณ
    • ตรวจสอบให้แน่ใจว่าข้อมูลทั้งหมดนี้สามารถเรียกคืนได้อย่างง่ายดายและคุณสามารถเชื่อมโยงบันทึกจากคอมพิวเตอร์และบริการต่างๆได้ (เช่นตรวจสอบให้แน่ใจว่าคอมพิวเตอร์ทุกเครื่องซิงโครไนซ์โดยใช้ ntp)
  7. ข้อ จำกัด ที่เหมาะสมและข้อ จำกัด ในการใช้งานของคุณ ตัวอย่างเช่นคุณอาจ:

    • ใช้คุณลักษณะ QoS ในตัวโหลดบาลานเซอร์เพื่อส่งเซสชันที่ไม่ระบุชื่อทั้งหมดไปยังแอ็พพลิเคชันเซิร์ฟเวอร์ที่แยกจากกันในคลัสเตอร์ของคุณในขณะที่ผู้ใช้ที่ล็อกออนใช้ชุดอื่น สิ่งนี้ป้องกัน DDOS ที่ไม่ระบุตัวตนในระดับแอปพลิเคชันเพื่อแย่งลูกค้าที่มีคุณค่า
    • การใช้ CAPCHA ที่แข็งแกร่งเพื่อปกป้องบริการที่ไม่ระบุตัวตน
    • หมดเวลาเซสชัน
    • มีข้อ จำกัด เซสชันหรือ จำกัด อัตราสำหรับคำขอบางประเภทเช่นรายงาน ตรวจสอบให้แน่ใจว่าคุณสามารถปิดการเข้าถึงแบบไม่ระบุตัวตนได้หากจำเป็น
    • ตรวจสอบให้แน่ใจว่าผู้ใช้มีการ จำกัด จำนวนเซสชันพร้อมกัน (เพื่อป้องกันไม่ให้บัญชีที่ถูกแฮ็กเข้าสู่ระบบล้านครั้ง)
    • มีผู้ใช้แอปพลิเคชันฐานข้อมูลที่แตกต่างกันสำหรับบริการที่แตกต่างกัน (เช่นการใช้ธุรกรรมและการใช้รายงาน) และใช้การจัดการทรัพยากรฐานข้อมูลเพื่อป้องกันคำขอเว็บประเภทหนึ่งจากผู้อื่นทั้งหมด
    • ถ้าเป็นไปได้ทำให้ข้อ จำกัด เหล่านี้เป็นแบบไดนามิกหรืออย่างน้อยก็กำหนดค่าได้ ด้วยวิธีนี้ในขณะที่คุณอยู่ภายใต้การโจมตีคุณสามารถกำหนดขีด จำกัด ชั่วคราวเชิงรุกได้ ('ควบคุมปริมาณ' การโจมตี) เช่นเซสชันเดียวต่อผู้ใช้และไม่มีการเข้าถึงแบบไม่ระบุตัวตน สิ่งนี้ไม่ดีสำหรับลูกค้าของคุณอย่างแน่นอน แต่ดีกว่าการไม่มีบริการเลย
  8. สุดท้าย แต่ไม่ท้ายสุดเขียนเอกสารแผนการตอบสนอง DOSและรับการตรวจสอบภายในโดยผู้เกี่ยวข้องทั้งหมด: ธุรกิจการจัดการทีมพัฒนา SW ทีมไอทีและผู้เชี่ยวชาญด้านความปลอดภัย ขั้นตอนการเขียนเอกสารจะทำให้คุณและทีมของคุณต้องครุ่นคิดถึงประเด็นต่างๆและช่วยให้คุณเตรียมพร้อมหากสิ่งที่เลวร้ายที่สุดควรเกิดขึ้นในเวลา 03.00 น. ของวันหยุด เอกสารควรครอบคลุม (เหนือสิ่งอื่นใด):

    • อะไรคือความเสี่ยงและต้นทุนของธุรกิจ
    • มาตรการที่ดำเนินการเพื่อปกป้องทรัพย์สิน
    • วิธีตรวจพบการโจมตี
    • ขั้นตอนการตอบสนองและการเลื่อนระดับตามแผน
    • กระบวนการเพื่อให้ระบบและเอกสารนี้ทันสมัยอยู่เสมอ

ดังนั้นขอเกริ่นก่อนนี่คือคำตอบเฉพาะบางส่วน:

DDOS มักถูกบล็อกในระดับเซิร์ฟเวอร์ใช่ไหม?

ไม่จริง - การโจมตี DDOS ที่เลวร้ายที่สุดส่วนใหญ่เป็นระดับต่ำ (ที่ระดับแพ็กเก็ต IP) และได้รับการจัดการโดยกฎการกำหนดเส้นทางไฟร์วอลล์และอุปกรณ์รักษาความปลอดภัยที่พัฒนาขึ้นเพื่อรองรับการโจมตี DDOS

มีวิธีบล็อกในระดับ PHP หรืออย่างน้อยก็ลดได้หรือไม่?

การโจมตี DDOS บางอย่างมีเป้าหมายที่แอปพลิเคชันเองโดยส่งคำขอ URI และ HTTP ที่ถูกต้อง เมื่ออัตราการร้องขอสูงขึ้นเซิร์ฟเวอร์ของคุณจะเริ่มดิ้นรนและคุณจะหยุดทำงานของ SLA ในกรณีนี้คุณสามารถทำได้ในระดับ PHP:

  • การตรวจสอบระดับแอปพลิเคชัน: ตรวจสอบว่าแต่ละบริการ / เพจบันทึกคำขอในลักษณะที่คุณสามารถเห็นสิ่งที่เกิดขึ้น (เพื่อให้คุณสามารถดำเนินการเพื่อลดการโจมตีได้) แนวคิดบางประการ:

    • มีรูปแบบบันทึกที่คุณสามารถโหลดลงในเครื่องมือบันทึก (หรือ Excel หรือที่คล้ายกัน) ได้อย่างง่ายดายและแยกวิเคราะห์ด้วยเครื่องมือบรรทัดคำสั่ง (grep, sed, awk) โปรดจำไว้ว่า DDOS จะสร้างบันทึกนับล้านบรรทัด คุณอาจจะต้องหั่นบันทึกของคุณ (โดยเฉพาะที่เกี่ยวกับ URI, เวลา, IP และผู้ใช้) เพื่อหาสิ่งที่เกิดขึ้นและจำเป็นต้องสร้างข้อมูลเช่น:

      • มีการเข้าถึง URI ใดบ้าง
      • URI ใดที่ล้มเหลวในอัตราที่สูง (ตัวบ่งชี้ที่เป็นไปได้ของ URI เฉพาะที่ผู้โจมตีกำลังโจมตี)
      • ผู้ใช้รายใดกำลังเข้าใช้บริการ
      • ผู้ใช้แต่ละรายเข้าถึงบริการจากกี่ IP
      • URI คือผู้ใช้ที่ไม่ระบุชื่อเข้าถึงอะไร
      • ข้อโต้แย้งใดที่ใช้สำหรับบริการที่กำหนด
      • ตรวจสอบการกระทำของผู้ใช้เฉพาะ
    • บันทึกที่อยู่ IP ของแต่ละคำขอ อย่าย้อน DNS สิ่งนี้ - แดกดันค่าใช้จ่ายในการทำเช่นนี้ทำให้ DDOS ง่ายขึ้นสำหรับผู้โจมตี

    • บันทึกวิธีการ URI และ HTTP ทั้งหมดเช่น "GET http://example.com/path/to/service?arg1=ddos "
    • บันทึก ID ผู้ใช้ถ้ามี
    • บันทึกอาร์กิวเมนต์ HTTP ที่สำคัญ
  • ขีด จำกัด อัตราที่เหมาะสม: คุณสามารถกำหนดจำนวนคำขอที่ IP ที่กำหนดหรือผู้ใช้สามารถทำได้ในช่วงเวลาที่กำหนด ลูกค้าที่ชอบด้วยกฎหมายสามารถทำการร้องขอมากกว่า 10 ครั้งต่อวินาทีได้หรือไม่? ผู้ใช้ที่ไม่ระบุชื่อสามารถเข้าถึงรายงานราคาแพงได้หรือไม่?

  • CAPTCHA สำหรับการเข้าถึงแบบไม่ระบุตัวตน: ใช้ CAPTCHA สำหรับคำขอที่ไม่ระบุชื่อทั้งหมดเพื่อตรวจสอบว่าผู้ใช้เป็นบุคคลไม่ใช่บอท DDOS

วิธีใดที่เร็วและพบบ่อยที่สุดในการหยุดการโจมตี DDOS

วิธีที่เร็วที่สุดคือยอมให้แบล็กเมล์แม้ว่าสิ่งนี้อาจไม่เป็นที่ต้องการก็ตาม

มิฉะนั้นสิ่งแรกที่คุณต้องทำคือติดต่อผู้ให้บริการโฮสติ้งและ / หรือ CDN ของคุณและทำงานร่วมกับพวกเขา (หากพวกเขาไม่ได้ติดต่อคุณแล้วถามว่าเกิดอะไรขึ้น ... ) เมื่อ DDOS เกิดขึ้นมีแนวโน้มที่จะส่งผลกระทบต่อลูกค้ารายอื่น ๆ ของผู้ให้บริการโฮสติ้งและผู้ให้บริการอาจถูกกดดันให้ปิดไซต์ของคุณเพียงเพื่อปกป้องทรัพยากรของตน เตรียมพร้อมที่จะแบ่งปันบันทึกของคุณ (ข้อมูลใด ๆ และทั้งหมด) กับผู้ให้บริการ บันทึกเหล่านี้รวมกับการตรวจสอบเครือข่ายอาจให้ข้อมูลเพียงพอที่จะป้องกัน / บรรเทาการโจมตี

หากคุณคาดหวังว่าจะมี DDOS เป็นความคิดที่ดีมากที่จะตรวจสอบคุณสมบัติผู้ให้บริการโฮสติ้งของคุณในระดับการป้องกันที่พวกเขาสามารถให้ได้ พวกเขาควรมีประสบการณ์ DDOS และเครื่องมือในการบรรเทาปัญหา - เข้าใจเครื่องมือกระบวนการและขั้นตอนการยกระดับ นอกจากนี้ยังถามเกี่ยวกับสิ่งที่สนับสนุนผู้ให้บริการโฮสติ้งมีจากพวกเขาให้บริการต้นน้ำ บริการเหล่านี้อาจหมายถึงค่าใช้จ่ายล่วงหน้าหรือรายเดือนที่มากขึ้น แต่ถือว่าเป็นนโยบายการประกัน

ในขณะที่ถูกโจมตีคุณจะต้องคว้าบันทึกของคุณและขุดมัน - พยายามหารูปแบบของการโจมตี คุณควรพิจารณาปิดการเข้าถึงแบบไม่ระบุตัวตนและควบคุมบริการที่ถูกโจมตี (เช่นลดการ จำกัด อัตราของแอปพลิเคชันสำหรับบริการ

หากโชคดีและคุณมีฐานลูกค้าจำนวนน้อยคุณอาจสามารถระบุที่อยู่ IP ของลูกค้าที่ถูกต้องได้ หากเป็นกรณีนี้คุณอาจเปลี่ยนไปใช้แนวทางไวท์ลิสต์ชั่วขณะ ตรวจสอบให้แน่ใจว่าลูกค้าของคุณทุกคนรู้ว่าสิ่งนี้เกิดขึ้นเพื่อให้สามารถโทรติดต่อได้หากต้องการเข้าถึงจาก IP ใหม่ :)


Doug McCleanมีคำแนะนำดีๆที่: https://stackoverflow.com/a/1029613/1395668


20

ตามส่วน PHP ของคำถาม;

แม้ว่าฉันจะไม่พึ่งพา PHP สำหรับสิ่งนี้ แต่ก็สามารถใช้งานได้ แต่ต้องพิจารณาความเป็นไปได้ทั้งหมดเหล่านี้หรือมากกว่านั้น

  1. ผู้โจมตีอาจเปลี่ยน IP สำหรับแต่ละคำขอ
  2. ผู้โจมตีอาจส่งผ่านพารามิเตอร์ไปยัง URI ที่ไซต์เป้าหมายไม่สนใจพารามิเตอร์เหล่านี้
  3. ผู้โจมตีอาจรีสตาร์ทเซสชันก่อนหมดอายุ ...

หลอกง่ายๆ

<?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;
?>

8

ระดับ 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 ที่เราใช้มันสำหรับเว็บไซต์ที่มีการเข้าชมสูงของเราเพียงเพื่อความสามารถในการแคช . มันแย่มาก!


5

คุณไม่สามารถทำได้ในระดับ PHP DDOS เป็นการโจมตีประเภทหนึ่งที่ส่งคำขอไปยังเว็บเซิร์ฟเวอร์ของคุณมากเกินไป เว็บเซิร์ฟเวอร์ของคุณจะปฏิเสธคำขอก่อนที่จะเรียกสคริปต์ PHP ของคุณ

หากคุณใช้ Apache นี่คือเคล็ดลับบางส่วนจาก Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html


5

DDoS ได้รับการจัดการที่ดีที่สุดโดยอุปกรณ์เครือข่ายที่สร้างขึ้นตามวัตถุประสงค์ที่มีราคาแพงมาก โดยทั่วไปโฮสต์ไม่ดีในการป้องกัน DDoS เนื่องจากมีประสิทธิภาพการทำงานที่ค่อนข้างต่ำสภาวะหมดแรงแบนด์วิดท์ที่ จำกัด ฯลฯ การใช้ iptables, apache mods และบริการที่คล้ายกันสามารถช่วยได้ในบางสถานการณ์หากคุณไม่สามารถเข้าถึงฮาร์ดแวร์ลด DDoS ได้ หรือบริการลด DDoS แต่ก็ยังห่างไกลจากความเหมาะสมและยังทำให้คุณเสี่ยงต่อการถูกโจมตี


8
เราต้องการวิธีแก้ปัญหาและหากไม่มีทางออกที่ดีก็จำเป็นต้องมีวิธีแก้ปัญหาบางส่วน ไม่มีใครต้องการคำแนะนำแบบ "คุณทำไม่ได้"
Audrius Meskauskas

5

เกี่ยวกับสิ่งนี้ในฝั่ง 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;
}

1
มีข้อผิดพลาดบางประการในรหัสนี้: 10 เป็นฮาร์ดโค้ดไม่จำเป็นต้องใช้ strtotime ในเซิร์ฟเวอร์และตัวแปรเซสชันและ $ _SESSION ['ban_up'] == 1 ควรเป็น = 1
Jason Silver

3

มีปลั๊กอินที่คุณสามารถใช้ใน 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

สิ่งเหล่านี้เป็นจุดเริ่มต้นที่ดีราคาไม่แพง


2

อย่าไม่ใช้การป้องกัน PHP-based ก็แทบจะไม่น่ากลัวและจะมีผลกระทบที่ทุกคน! กำหนดค่าเว็บเซิร์ฟเวอร์ของคุณให้เป็นคำขอ จำกัด อัตราตัวอย่างเช่นใน Nginx โดยใช้โมดูล limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )

แม้ว่าฉันจะแนะนำให้ใช้ CloudFlare เพื่อต่อสู้กับ Layer-4 แต่ไม่ใช่การโจมตีแบบ Layer-7 เว้นแต่คุณจะเต็มใจจ่าย


ใช่ทำงานได้ดีสำหรับฉันเช่นกันประสบการณ์ของฉันที่นี่softwareengineeringsolutions.co.uk/…
Elvis Ciotti

2

โดยทั่วไป 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 เพื่อให้เซิร์ฟเวอร์สามารถจัดการกับจำนวนการเชื่อมต่อพร้อมกันสูงสุดโดยที่ทรัพยากรไม่หมด


2

ขั้นตอนการต่อต้าน DDOS :

  • สิ่งแรกที่สำคัญมากคือการระบุการโจมตีของ ddos ​​ก่อน การระบุการโจมตี ddos ​​เร็วขึ้นหมายถึงเซิร์ฟเวอร์ของคุณดีขึ้น
  • รับแบนด์วิดท์ที่ดีขึ้นสำหรับเซิร์ฟเวอร์ของคุณ รักษาแบนด์วิดท์ให้มากเกินพอที่จำเป็นสำหรับเซิร์ฟเวอร์ของคุณเสมอ วิธีนี้จะไม่ป้องกันการโจมตี DDOS แต่จะใช้เวลานานขึ้น โดยคุณจะมีเวลาพิเศษในการดำเนินการ
  • หากคุณเป็นเจ้าของเว็บเซิร์ฟเวอร์ของคุณเองคุณสามารถป้องกันที่พารามิเตอร์เครือข่ายโดย จำกัด อัตราเราเตอร์ของคุณเพิ่มตัวกรองเพื่อวางแพ็กเก็ตไปยังแหล่งที่มาของการโจมตีต่างๆหมดเวลาการเชื่อมต่อที่เปิดอยู่ครึ่งหนึ่งอย่างก้าวร้าวมากขึ้น ตั้งค่าเกณฑ์การลดลงของน้ำท่วม SYN, ICMP และ UDP ให้ต่ำลง
  • หากคุณไม่มีความคิดเกี่ยวกับสิ่งเหล่านี้มากนักให้ไปติดต่อผู้ให้บริการโฮสติ้งของคุณอย่างรวดเร็ว พวกเขาสามารถพยายามอย่างเต็มที่เพื่อป้องกันการโจมตี DDOS
  • นอกจากนี้ยังมีบริการลด DDOS พิเศษโดยCloudflareและ บริษัท อื่น ๆ อีกมากมาย ซึ่งสามารถช่วยคุณป้องกันการโจมตี DDOS นอกจากนี้ยังมีหลาย บริษัท ที่เสนอราคาถูกป้องกัน DDoSและดอสป้องกัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.