Score:0

Backtesting บันทึกประวัติใน fail2ban

ธง tk

ติดตั้ง ฉันใช้ apache บนเซิร์ฟเวอร์ Ubuntu ฉันได้สร้างกฎ fail2ban ซึ่งแบน ip เมื่อพวกเขาร้องขอหน้าเว็บมากเกินไปเร็วเกินไป

#กฏFail2ban
failregex = ^.*?(:80|:443) <HOST> - .* "(GET|POST|HEAD).*$
ละเลยregex =.*(.ico|.jpg|.png|.gif|.js|.css|.woff|.mp4)

หาเวลา = 30
สูงสุด = 10

เป้าหมาย:
ฉันต้องการเรียกใช้บันทึก apache เก่ากับกฎใหม่นี้เพื่อที่ฉันจะได้ดูว่ามันจะห้ามคำขอที่ถูกต้องตามกฎหมายหรือไม่

ความพยายาม #1 ฉันคิดว่าฉันอาจใช้ fail2ban-regex เพื่อรับรายชื่อผู้ใช้ที่อาจถูกแบนได้ แต่ไม่มีฟังก์ชันดังกล่าว

ความพยายาม #2 ฉันคิดว่าการสะท้อนบันทึกประวัติลงในบันทึกที่ fail2ban กำลังดูอยู่จะทำให้แยกวิเคราะห์ได้ หลังจากแก้ไข Hangup ขนาดเล็กโดยที่บรรทัดบันทึกที่มีวันที่เก่าถูกละเว้น (แก้ไขโดยเพิ่มปีเข้าไป) Fail2ban เริ่มแยกวิเคราะห์และแบน IP จากมัน อย่างไรก็ตาม ฉันต้องดู IP แรกที่ถูกแบนเท่านั้นเพื่อดูว่ามันผิด IP ที่เป็นปัญหาได้ส่งคำขอทั้งหมด 10 รายการเท่านั้น และไม่ได้ใกล้เคียงกันตามเวลา ฉันสามารถสันนิษฐานได้ว่า fail2ban ไม่ได้ใช้การประทับเวลาของบรรทัดบันทึกเพื่อกำหนดความถูกต้องซึ่งทำให้วิธีการทดสอบนี้ล้มเหลว

#ตัวอย่างเสียงสะท้อน
zcat other_vhosts_access.log.8.gz | sed -n 's/\/2022:/\/2032:/p' >> /var/log/apache2/fail2ban_test.log

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

Score:0
ธง il

ความพยายาม #1

เห็นตรง ๆ ก็ไม่เห็นจริง ๆ แต่...

แม้ว่า Failed2ban-regex เวอร์ชันล่าสุดจะรองรับพารามิเตอร์เอาต์พุต คุณจึงสามารถทำสิ่งนี้ได้:

ไคลเอ็นต์fail2banตั้งค่า "$jail" banip $(
   Failed2ban-regex -o 'ip' /var/log/path/some.log กรองบาง | เรียง --unique | ตร '\n' ' '
)

มันจะเหมาะสมก็ต่อเมื่อคุณพบว่า IP ใด ๆ ที่ล้มเหลว ไม่ว่าจะนับ/ครั้ง. ในกรณีของคุณ อย่างน้อยก็ไร้เหตุผลหากไม่มีการประมวลผลล่วงหน้าเพิ่มเติม

ความพยายาม #2 ฉันคิดว่าการสะท้อนบันทึกประวัติลงในบันทึกที่ fail2ban กำลังดูอยู่จะทำให้แยกวิเคราะห์ได้

มันจะไม่ทำงานเนื่องจาก fail2ban จะไม่พิจารณาเวลาของข้อความอย่างถูกต้อง: อาจเก่าเกินไป (หากบันทึกโดยไม่ได้แก้ไข) หรืออาจไม่ถูกต้อง (หากตอนนี้บันทึกเป็นเวลาของความล้มเหลว เนื่องจากคุณต้องพิจารณา สูงสุด และ หาเวลา จากการใช้งานจริง) หมายเหตุที่จะกล่าวถึงว่า fail2ban จะพยายาม ตอนนี้ - หาเวลา โดยเริ่มต้น (เนื่องจากข้อความอื่นไม่น่าสนใจเนื่องจากล้าสมัยเกินไป) ดู https://github.com/fail2ban/fail2ban/issues/2909#issuecomment-758036512.

อย่างไรก็ตาม ในขณะนี้ แทบเป็นไปไม่ได้เลยที่จะมีการนำเครื่องมือ Fails2bans ออกจากกล่อง (อย่างน้อยเว้นแต่สิ่งอำนวยความสะดวกในการ "สแกนซ้ำ" จาก RFE ด้านบนจะถูกนำมาใช้และเผยแพร่)

แต่เนื่องจากfail2ban (เช่นเดียวกับ Failed2ban-regex) เป็นโมดูลใน python เป็นไปได้ด้วยตัวกรองจากการเขียน python แบนไปยังบันทึกบางส่วนหรือส่งโดยตรงไปยังอินสแตนซ์หลักที่ล้มเหลว 2 แบน ดู https://github.com/fail2ban/fail2ban/issues/2909#issuecomment-1039267423 สำหรับตัวอย่างสคริปต์ดังกล่าว

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

failregex = ^"<ADDR>" \S+ \S+ [^"]*"[A-Z]+ /(?:\S+/)*[^\.]*(?:\.(?!ico|jpg|png |gif|js|css|woff|mp4)\w+)? [^"]+"

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

tk flag
ขอบคุณ คุณเซเบอร์ ฉันไม่สามารถขอคำตอบที่สมบูรณ์กว่านี้ได้ ฉันจะตรวจสอบสคริปต์หลามนั้น การปรับปรุง regex ของคุณก็ได้รับการชื่นชมอย่างมากเช่นกัน สำหรับเหตุผลของฉัน ฉันไม่ได้พยายามห้ามเชิงป้องกัน แต่พยายามระบุผลบวกปลอมแทน จากการเรียกใช้บันทึกเก่าอีกครั้ง ฉันหวังว่าจะพบสถานการณ์ที่ผู้ใช้ถูกแบนเนื่องจากการใช้งานที่ถูกต้องตามกฎหมาย จากนั้นฉันจะแก้ไข failregex เพื่อยอมรับ การเรียกใช้ backtest จะให้ผลลัพธ์ที่รวดเร็วและแม่นยำกว่าการทดสอบด้วยตนเอง

โพสต์คำตอบ

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