Score:0

บล็อกการเชื่อมต่อ nginx หลังจากหลาย 404 วินาทีในการเชื่อมต่อ tcp เดียวกัน

ธง de

ฉันต้องการปกป้องสองเซิร์ฟเวอร์จากผู้โจมตีที่สุ่มสี่สุ่มห้าค้นหา URL

ความคิดของฉันคือการบล็อกคำขอหลังจากรหัสสถานะ 404 จำนวนหนึ่ง

ฉันสามารถทำได้ด้วย fail2ban

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

มีวิธีใดบ้าง (โดยไม่ใช้ fail2ban, กับ fail2ban หรือด้วยเครื่องมืออื่นใด) เพื่อตรวจหาข้อผิดพลาดอย่างน้อย 404 รายการ จากการเชื่อมต่อ https เดียวกัน และจะยุติการเชื่อมต่อนี้หรือปล่อยให้ 404 ยกเลิกโดยไม่มีเงื่อนไขสำหรับคำขอใดๆ ในภายหลัง?

โปรดบอกฉันหากคำถามของฉันไม่ชัดเจน ฉันจะพยายามใช้ถ้อยคำใหม่เพื่อให้ข้อมูลเพิ่มเติม

Score:1
ธง cn

คุณสามารถตั้งค่า Nginx เพื่อแคชการตอบสนอง รวมถึงการตอบสนองที่มีข้อผิดพลาดเช่น 404 อย่างไรก็ตาม เท่าที่ฉันทราบ คุณไม่สามารถนับจำนวนข้อผิดพลาดได้ (แต่นั่นไม่ควรสำคัญ)

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

นั่นจะช่วยได้มากอย่างแน่นอน ฮิตทั้งหมดที่จะไปที่แบ็กเอนด์ของคุณและสร้าง 404 จะหยุดที่อินสแตนซ์ Nginx และส่งคืนข้อผิดพลาด 404 เดียวกันซ้ำแล้วซ้ำอีก

อีกวิธีหนึ่งคือการกำหนดตำแหน่งและเรียกใช้คำสั่ง (ซึ่งสามารถเรียกใช้ ipset เพื่อเพิ่มที่อยู่ IP) ดังนั้นสิ่งที่ต้องการ:

ตำแหน่ง /phpmyadmin.php {
  content_by_lua_block {
    os.execute("/usr/bin/block-ip.sh")
  } 
}

ฉันไม่แน่ใจเหมือนกันว่าคุณจะจัดการกับเส้นทางต่างๆ ได้อย่างไร


ประสบการณ์ของตัวเองกับ ล้มเหลว 2 แบน คือค่อนข้างช้าและ "ถอยหลัง" (ไม่ใช่เชิงรุก) หากคุณต้องการบล็อกที่อยู่ IP โดยสิ้นเชิง วิธีที่ง่ายที่สุดคือมีแอปของคุณ ส่งข้อความไปยังส่วนหน้าที่คุณสามารถเรียกใช้ได้ iptables เพื่อบล็อคไอพี เพื่อที่คุณจะต้องส่งต่อ IP ดั้งเดิมซึ่ง Nginx ไม่ได้ทำโดยค่าเริ่มต้น แต่การเพิ่ม X-ส่งต่อ-สำหรับ ส่วนหัวว่าแอปของคุณ จากนั้นสามารถส่งกลับไปยังเครื่องมือขนาดเล็กที่คุณใช้เพื่อเพิ่ม IP ให้กับคุณได้ iptables. โปรดทราบว่าคุณไม่ควรเพิ่มเข้าไปโดยตรง iptables. คุณควรใช้รายการแทน สำหรับการดูที่ ipset.

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

gelonida avatar
de flag
ขอบคุณสำหรับคำตอบ. ใช่ การแคช 404 วินาทีอาจลดการโจมตี DOS หากผู้โจมตีหลายคนสแกนเซิร์ฟเวอร์ภายในอายุแคช อย่างไรก็ตาม สิ่งที่ฉันต้องการจริงๆ คือการหยุดคนที่พยายามเดา URL และบนเซิร์ฟเวอร์ที่ฉันไม่สามารถดำเนินการได้เนื่องจากไม่มีที่อยู่ IP ต้นทาง ฉันต้องการหลีกเลี่ยงอย่างน้อยที่สุด การเชื่อมต่อ SSL หนึ่งครั้งสามารถตรวจสอบ URL จำนวนมากเกินไปได้ ด้วยความอยากรู้อยากเห็น: การตั้งค่าเพื่อแคชข้อผิดพลาด 404 คืออะไร การแคชต้องเป็นฝั่งเซิร์ฟเวอร์ เนื่องจากฉันต้องการลดการโจมตีโดยบอท ไม่ใช่การโจมตีจากเบราว์เซอร์
cn flag
@gelonida คิดเกี่ยวกับมัน คุณสามารถเรียกใช้คำสั่งเชลล์จาก Nginx ดังนั้นสามารถใช้คำสั่งนั้นเพื่อบล็อก IP ได้ทันที (คุณอาจยังได้รับอีก 2 หรือ 3 ครั้ง แต่นั่นจะเร็วมาก) เพื่อให้รวดเร็ว โปรดใช้กฎที่ชี้ไปยังรายการ IP ที่จัดการโดย `ipset`
gelonida avatar
de flag
ขอบคุณสำหรับคำตอบที่อัปเดตของคุณ ฉันยังไม่แน่ใจว่าจะช่วยในกรณีปัจจุบันของฉันได้อย่างไร ฉันอาจต้องรอจนกว่า reverse proxy จะเพิ่มส่วนหัว X-Forwarded-For แต่ฉันก็ยังต้องดูวิธีบล็อกคำขอ (โปรดดูคำถามที่เกี่ยวข้อง: https://serverfault.com/questions/1094926/ can-fail2ban-add-deny-rules-to-nginx-แทนการใช้-iptables )
Score:0
ธง il

Nginx มี limit_req โมดูล ดังนั้นคุณจึงสามารถใช้เป็นการกรองล่วงหน้าได้

ดู https://stackoverflow.com/questions/37877242/nginx-limit-req-based-on-http-header สำหรับคำถามที่คล้ายกัน

ตัวอย่างเช่น โดยการนับและจำกัดความพยายาม 404 ครั้ง (เช่น ในตำแหน่งข้อผิดพลาดที่เกี่ยวข้อง) และ/หรือกรองโดย Failed2ban หลังจากนี้ หากคุณจะบันทึกเฉพาะคำขอที่จำกัด วิธีนี้คุณสามารถลดลงได้ สูงสุด และ หาเวลา สำหรับคุกใน fail2ban และสามารถหลีกเลี่ยงการโหลดที่สูงเกินไปจากข้อความจำนวนมากในบันทึก (ดู fail2ban :: wiki / แนวทางปฏิบัติที่ดีที่สุด).

สำหรับตัวอย่างตัวกรอง (โดยพื้นฐานแล้ว คุณไม่จำเป็นต้องใช้ตัวกรองที่คุณตั้งค่าได้ง่ายๆ ล้มเหลวregex ฯลฯ ติดคุกโดยตรง) ดู filter.d/nginx-limit-req.conf. คุณยังสามารถกำหนดค่า nginx เพื่อเข้าสู่ระบบ X-ส่งต่อ-สำหรับ ส่วนหัวแทนหรือเพิ่มเติมจาก IP จริง และห้ามใช้ทั้งสองอย่างด้วยซ้ำ สูงสุด/หาเวลา ผสมผสานกับขีดจำกัดต่าง ๆ ประดังประเดเข้ามา limit_req โมดูล.

gelonida avatar
de flag
ฉันเปลี่ยนชื่อเรื่องและเน้นบางส่วนของข้อความของฉัน ในความเป็นจริงปัญหาหลักคือฉันต้องการตรวจหา 404 ในการเชื่อมต่อ http เดียวกัน ฉันเกรงว่าจะต้องใช้เวลามากก่อนที่จะเปลี่ยนพร็อกซีย้อนกลับและให้ข้อมูลแก่ฉัน ที่ฉันต้องการจริงๆ

โพสต์คำตอบ

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