บล็อกถาวรของ IP หลังจากลองใหม่โดยใช้ fail2ban


38

ฉันมี fail2ban ที่กำหนดค่าไว้ด้านล่าง:

  • บล็อก ip หลังจาก 3 ครั้งที่ล้มเหลว
  • ปล่อย IP หลังจากหมดเวลา 300 วินาที

มันทำงานได้อย่างสมบูรณ์และฉันต้องการให้มันเป็นเช่นนี้เพื่อให้ผู้ใช้ที่ถูกต้องได้รับโอกาสที่จะลองเข้าสู่ระบบอีกครั้งหลังจากหมดเวลา ตอนนี้ฉันต้องการใช้กฎที่หากตรวจพบว่า IP เดียวกันเป็นการโจมตีและบล็อกไม่ถูกบล็อก 5 ครั้งบล็อก IP อย่างถาวรและไม่ต้องยกเลิกการบล็อกอีกครั้ง สามารถทำได้ด้วย fail2ban เพียงอย่างเดียวหรือฉันต้องเขียนสคริปต์ของตัวเองเพื่อทำเช่นนั้น?

ฉันกำลังทำสิ่งนี้ใน centos


2
มันเป็นความคิดที่ค่อนข้างงี่เง่า - ยิ่งคุณเพิ่ม iptables มากเท่าไหร่กฎก็ยิ่งช้าลงเท่านั้น
symcbean

14
ขอบคุณสำหรับความคิดเห็นของคุณ แต่สิ่งที่ฉันต้องการคือคำตอบไม่ใช่คำแนะนำ ขอบคุณอยู่ดี
BTR Naidu

5
บางครั้งคำตอบที่ถูกต้องสำหรับ "ฉันจะทำ X อย่างไร" คือ "อย่าทำ X"
ceejayoz

คำตอบ:


32

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

จนแล้ววิธีที่ดีที่สุดของคุณอาจตั้งค่าfail2ban ในการตรวจสอบแฟ้มบันทึกของตัวเอง มันเป็นกระบวนการสองขั้นตอน ...

ขั้นตอนที่ 1

เราอาจต้องสร้างตัวกรองเพื่อตรวจสอบการแบนในไฟล์บันทึก (ล็อกไฟล์ของ fail2ban)

ขั้นตอนที่ 2

เราจำเป็นต้องกำหนดคุกคล้ายกับต่อไปนี้ ...

[fail2ban]
เปิดใช้งาน = จริง
ตัวกรอง = fail2ban
การกระทำ = iptables-allports [name = fail2ban]
logpath = /path/to/fail2ban.log
# findtime: 1 วัน
findtime = 86400
# bantime: 1 ปี
bantime = 31536000

ในทางเทคนิคมันไม่ได้เป็นบล็อกถาวรแต่บล็อกเพียงหนึ่งปี (ที่เราสามารถเพิ่มได้เช่นกัน)

อย่างไรก็ตามสำหรับคำถามของคุณ (สามารถทำได้โดย fail2ban คนเดียวหรือฉันต้องเขียนสคริปต์ของตัวเองเพื่อทำอย่างนั้น?) ... การเขียนสคริปต์ของตัวเองอาจทำงานได้ดี การตั้งค่าสคริปต์เพื่อแยกIP ที่ถูกแบนบ่อย ๆจากนั้นนำไปไว้ใน/etc/hosts.denyที่ที่ฉันแนะนำ


1
การเพิ่มคำตอบที่ยอดเยี่ยมนี้ ... ขึ้นอยู่กับการกำหนดค่าการบันทึกและ MaxAuthTries สิ่งsshd_configนี้อาจบล็อกเฉพาะการเข้าสู่ระบบ 3 ครั้งที่ล้มเหลวสำหรับ sshd "เซสชั่น" - ไม่ใช่การล็อกอินที่ล้มเหลว 3 ครั้ง ตัวอย่างเช่นโดยค่าเริ่มต้นผู้โจมตีสามารถลอง ['pass1', 'pass2', 'pass3'] ในเซสชันเดียวก่อนที่ sshd จะยกเลิกการเชื่อมต่อ ขึ้นอยู่กับวิธีตั้งค่า sshd เพื่อบันทึกสิ่งนี้อาจปรากฏเป็น 1, 2 หรือ 3 ครั้งเพื่อพยายามล้มเหลว 2 แบน
Jonathan Vanasco

5
ตอนนี้มีตัวกรองการซ้ำซ้อนของ fail2ban แล้ว
Guillermo Prandi

คุณหมายถึงอะไรในการปล่อย 0.11 ที่กำลังมาถึง ล่าสุดดูเหมือนว่าจะเป็น 10.3.1: github.com/fail2ban/fail2ban/releases
user5950

ฉันหวังว่าคุณหมาย0.10.3.1 คุณสามารถติดตามความคืบหน้าของ "0.11" ที่github.com/fail2ban/fail2ban/tree/0.11 โดยพื้นฐานแล้วมันยังไม่เปิดตัว!
Pothi Kalimuthu

29

ฉันเชื่อว่าถ้าคุณใส่bantime = -1ในส่วนการตั้งค่ามันเป็นบล็อกถาวร


2
อันที่จริงการตั้งค่าbantimeเป็นลบใด ๆ เป็นการห้ามถาวร (ณ Fail2Ban ver. 0.6.1 (2006/03/16))
voretaq7

3
การเพิ่ม -1 ในการตั้งค่าทำให้ fail2ban ไม่ตอบสนอง
Erdem Ece

13

Phil Hagen เขียนบทความยอดเยี่ยมเกี่ยวกับเรื่องนี้ " ห้ามแบนซ้ำผู้กระทำผิดซ้ำอย่างถาวรด้วย fail2ban "

คำแนะนำของเขาเหมือนกับ Pothi แต่ให้คำแนะนำทีละขั้นตอน

รวมถึง:

  • รายการแบนแยกจากคุก (ip.blocklist.ssh, ip.blocklist.xxx)
  • แบนแสดงรายการโหลดอัตโนมัติถ้าบริการรีสตาร์ท (ข้อได้เปรียบหลักของเมธอดนี้ imho)
  • แจ้งเตือนทางอีเมลหากมีการทวนซ้ำ

6

เพื่อขยายคำตอบของชินนี่ง่ายมาก เพียงแก้ไขการตั้งค่า 2 รายการ/etc/fail2ban/jail.localเพื่อให้ตรงกับความต้องการของคุณ

 # ban time in seconds. Use -1 for forever. Example is 1 week.
 bantime  = 604800
 # number of failures before banning
 maxretry = 5

4

fail2ban ได้ติดคุกเพื่อห้ามการกระทำความผิด หากคุณดู/etc/fail2ban/jail.confคุณจะพบ:

# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
#   Make sure that your loglevel specified in fail2ban.conf/.local
#   is not at DEBUG level -- which might then cause fail2ban to fall into
#   an infinite loop constantly feeding itself with non-informative lines
[recidive]

enabled  = false
filter   = recidive
logpath  = /var/log/fail2ban.log
action   = iptables-allports[name=recidive]
           sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

วิธีการเพิ่มใน jail.local?

[recidive]
enabled  = true
bantime  = 31536000  ; 1 year
findtime = 18144000  ; 1 month
maxretry = 2

สำหรับการตรวจสอบคุณ LogLevel fail2ban-client get loglevelคุณสามารถทำได้:

  • ตั้งค่า loglevel MYLEVEL : ตั้งค่าระดับการบันทึกเป็น MYLEVEL ระดับ: วิกฤตผิดพลาดคำเตือนประกาศข้อมูลข้อบกพร่อง
  • เพิ่มเติมคำสั่งบนวิกิพีเดีย

ด้วย fail2ban เวอร์ชันเก่าคุณสามารถรับข้อผิดพลาดนี้ได้


0

ไปที่กลุ่ม, เปิด /etc/fail2ban/jail.conf

และเพียงแก้ไขหลังจากfail2ban service restart:

# "bantime" is the number of seconds that a host is banned.
bantime  = ***1296000***

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = ***60000***

# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.