Fail2Ban: ถูกแบนแล้ว?


17

ฉันมี Fail2Ban ทำงานบนเซิร์ฟเวอร์ Centos ของฉัน (กำหนดค่าด้านล่าง)

ในvar / log / messagesฉันสังเกตเห็นบางสิ่งที่แปลกจริง ๆ :

Jun 19 12:09:32 localhost fail2ban.actions: INFO   [postfix] 114.43.245.205 already banned

ฉันกำหนดค่า Fail2Ban เพื่อเพิ่ม IP ที่ถูกแบนไปยัง iptables

jail.conf ของฉัน:

[postfix]

enabled  = true
filter   = postfix
action   = iptables
port     = smtp,ssmtp
filter   = postfix
logpath  = /var/log/maillog
bantime  = 43200
maxretry = 2

postfix.conf ของฉัน:

[INCLUDES]

before = common.conf

[Definition]
failregex = reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
            reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
            reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
            reject: RCPT from (.*)\[<HOST>\]: (.*)@yahoo.com.tw
ignoreregex =

คำถามของฉันคือใครที่ถูกบล็อกในiptablesยังเชื่อมต่อกับเซิร์ฟเวอร์ได้อย่างไร


คุณสามารถเพิ่มผลลัพธ์ของiptables -L -nvคำถามของคุณ?
Ladadadada

คำตอบ:


14

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

Fail2ban เท่านั้นบล็อกผ่าน TCP โดยค่าเริ่มต้น อย่างน้อยเมื่อมีการตั้งค่าของฉันฉันสังเกตเห็นข้อความ "ถูกแบนแล้ว" ปรากฏขึ้นเมื่อบอทกลับมาลองพอร์ตที่ถูกบล็อกเหนือ UDP แทน

เพื่อแก้ไขปัญหานี้บอก Fail2ban เพื่อบล็อกพอร์ตผ่านโปรโตคอลทั้งหมดแทนที่จะเป็นเพียง TCP คุณจะต้องทำให้การเปลี่ยนแปลงใน/etc/fail2ban/jail.confและใน[Init] ส่วนของทุกการกระทำที่คุณกำลังใช้อยู่ใน/etc/fail2ban/action.d/

เปลี่ยนสิ่งนี้:

# Default protocol
protocol = tcp

ถึง:

# Default protocol
protocol = all

ถัดไปฉันปิดใช้งานการร้องขอ ICMP echo เพื่อให้ IP ที่ถูกบล็อกไม่มีวิธีการกดปุ่มเซิร์ฟเวอร์:

  1. nano /etc/sysctl.conf
  2. เพิ่มสองบรรทัดเหล่านี้:

    net.ipv4.icmp_echo_ignore_all = 1  
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    
  3. ออกและบันทึกไฟล์
  4. รันsysctl -pเพื่อให้การเปลี่ยนแปลงมีผล

หลังจากนั้นให้รันการโหลดล้มเหลวของไคลเอ็นต์ 2banและคุณไม่ควรเห็นข้อความ "ถูกแบน" เหล่านี้อีกต่อไปเว้นแต่ว่าคุณได้รับสแปมจาก IP ที่ได้รับความพยายามในการเข้าถึงสองสามครั้งก่อนที่บล็อกจะมีผล

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


3
สำหรับฉันมันไม่ชัดเจนมาก ... ใน/etc/fail2ban/jail.localตัวกรองบางตัวของฉันมีaction = iptables-multiport[name=apache-myadmin, port="http,https", protocol=tcp]และตัวกรองบางตัวไม่ควรเปลี่ยนทั้งหมดหรือไม่ ฉันควรจะเปลี่ยนแปลงอะไรบางอย่างใน/etc/fail2ban/filter.d?
NineCattoRules

1
ขออภัย แต่โปรโตคอล = ทั้งหมดไม่ทำงานทำให้เกิดข้อผิดพลาด!
Patrik Laszlo

1
"iptables v1.6.2: ความต้องการ multiport -p tcp', -p udp ', -p udplite', -p sctp' หรือ` -p dccp '"
Patrik Laszlo

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

3

หากคุณดูที่ผลลัพธ์ของiptables-saveคุณจะเห็นว่าfail2banเชนมีการตั้งค่าเพื่อให้พวกเขาประเมินแพ็กเก็ตตามกฎที่กำหนดโดยตัวกรองตัวอย่างเช่น

:fail2ban-ssh - [0:0]
-A INPUT -p tcp -A INPUT -p tcp -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh 
-A fail2ban-ssh -j RETURN

ทราฟฟิกยังมาถึงเซิร์ฟเวอร์ก่อนที่จะใช้กฎการกำหนดเส้นทางอื่นและทราฟฟิกถูกปฏิเสธ fail2banยังคงเห็นการรับส่งข้อมูลเริ่มต้นและนี่คือสาเหตุที่คุณเห็นข้อความ "ถูกแบนแล้ว" นอกจากนี้ยังมีตัวกรองพิเศษสำหรับผู้บันทึกซ้ำ ( /etc/fail2ban/filter.d/recidive.conf):

# Fail2Ban filter for repeat bans
#
# This filter monitors the fail2ban log file, and enables you to add long
# time bans for ip addresses that get banned by fail2ban multiple times.
#
# Reasons to use this: block very persistent attackers for a longer time,
# stop receiving email notifications about the same attacker over and
# over again.
#
# This jail is only useful if you set the 'findtime' and 'bantime' parameters
# in jail.conf to a higher value than the other jails. Also, this jail has its
# drawbacks, namely in that it works only with iptables, or if you use a
# different blocking mechanism for this jail versus others (e.g. hostsdeny
# for most jails, and shorewall for this one).

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

_daemon = fail2ban\.server\.actions

# The name of the jail that this filter is used for. In jail.conf, name the
# jail using this filter 'recidive', or change this line!
_jailname = recidive

failregex = ^(%(__prefix_line)s| %(_daemon)s%(__pid_re)s?:\s+)WARNING\s+\[(?!%(_jailname)s\])(?:.*)\]\s+Ban\s+<HOST>\s*$

[Init]

journalmatch = _SYSTEMD_UNIT=fail2ban.service PRIORITY=4

# Author: Tom Hendrikx, modifications by Amir Caspi

1

นี้จะเกิดขึ้นถ้าอยู่ IP ที่คุณห้ามไม่ได้จริงที่อยู่ IP ของลูกค้าที่เชื่อมต่อกับเซิร์ฟเวอร์ เช่นหากเซิร์ฟเวอร์ของคุณเกิดขึ้นหลัง load balancer หรือ proxy

ฉันใช้เวลาพอสมควรในการคิดออกเมื่อเร็ว ๆ นี้ ปลาเฮอริ่งแดงคือบันทึกถูกกำหนดค่าให้จับที่X-Forwarded-Forอยู่ IP แทนที่จะเป็นที่อยู่แหล่งที่แท้จริงซึ่งในกรณีของฉันคือตัวโหลดบาลานซ์

ในกรณีนี้ fail2ban นั้นไม่ได้ช่วยอะไรมากนักเนื่องจากการแบนไอพีที่ละเมิดนั้นจะเป็นการปิดกั้น ทุกการจราจร


ดังนั้นคุณต้องทำอะไรอีกบ้าง
Hassan Baig

@HassanBaig - ไม่มี Fail2ban ไม่สามารถทำอะไรได้หากมันทำงานอยู่เบื้องหลัง load balancer หรือ reverse proxy
เดลเดอร์สัน

ถ้าอย่างนั้นคุณจะใช้มาตรการอะไรกับDistributed DoS ที่เกิดขึ้นที่เลเยอร์ของแอปพลิเคชันพูด HTTP GET ท่วมท้น
Hassan Baig

1
@HassanBaig พูดคุยกับผู้ให้บริการโฮสต์ของคุณ โอกาสที่คุณไม่ใช่คนเดียวที่พบปัญหาเดียวกันในระบบของพวกเขา
Dale Anderson

0

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

ก่อนที่ฉันจะเริ่มนี่คือระบบของฉัน:

  • Plesk 12
  • Centos 7
  • Plesk-Module ได้รับการติดตั้งใช้งานและกำหนดค่า fail2ban สำหรับฉัน

เมื่อฉันติดตั้ง OpenVPN บน rooterver ของฉันฉันได้เปลี่ยน firewalld เป็น iptables ที่อาจทำให้เกิดปัญหานี้สำหรับฉัน แต่นอกเหนือจากที่ระบบของฉันส่วนใหญ่มิได้ถูกแตะต้องและติดตั้งค่อนข้างสด (rootato Strato แนะนำอิมเมจการติดตั้ง)

หากคุณมีปัญหานี้โปรดตรวจสอบ/etc/fail2ban/jail.d/00-firewalld.confเพื่อดูบรรทัดที่มีลักษณะดังนี้:

banaction = firewallcmd-ipset

จากเวลาที่ฉันคอมเม้นต์นั้นให้บันทึกไฟล์และรีสตาร์ท fail2ban.serviceทุกอย่างทำได้ดีด้วย fail2ban ไม่มีข้อความเพิ่มเติม

ฉันไม่ใช่ผู้เชี่ยวชาญ แต่หวังว่าจะให้คำตอบที่ถูกต้องแก่คุณ ถ้านั่นเหมาะกับคุณโปรดแจ้งให้เราทราบ!


0

คำถามของฉันคือใครที่ถูกบล็อกใน iptables ยังสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้อย่างไร

มันเชื่อมต่อกับเซิร์ฟเวอร์เพียงครั้งเดียว แต่ในการเชื่อมต่อครั้งนั้นมันพยายามส่งอีเมลหลายฉบับไปยังกล่องจดหมายที่ไม่มีคุณสมบัติที่เหมาะสม (เช่น info@domain.com, sales@domain.com, tech@domain.com เป็นต้น)

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


0

คำถามของฉันคือใครที่ถูกบล็อกใน iptables ยังสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้อย่างไร

คำถามที่ดีอย่างไม่น่าเชื่อ ฉันค้นหารอบ ๆ ว่ากฎไฟร์วอลล์ของฉันไม่ทำงานหรือไม่iptables --list-rulesตรงจับคู่กับเซิร์ฟเวอร์การผลิตอื่นที่มี fail2ban ทำงาน

โซลูชัน mindblowing คือการเพิ่มพอร์ต 8080 ไปยังพอร์ตที่ถูกบล็อกเนื่องจากฉันยังคงเข้าถึงหน้าล็อกอินผ่านพอร์ตการพัฒนา

ดังนั้นการแก้ไขในสถานการณ์ของฉันคือปัญหานี้เป็นการปรับตัวที่ค่อนข้างง่ายของฉันjail.local:

[JIRA-LOGIN-tcp]
  enabled = true
  port = http,https,8080
  protocol = tcp
  filter = JIRA-LOGIN-ERROR
  logpath = /var/atlassian/application-data/jira/log/atlassian-jira-security.log
  bantime = 600
  maxretry = 1

0

ดู/unix//a/525798/22315

คุณอาจจะขาดพอร์ต 587 จากบรรทัด "port =" และคุณสามารถตรวจสอบไฟล์การกำหนดค่า postfix หรือทำ "lsof -i: 587" เพื่อค้นหาโดยตรงหาก postfix ได้รับการกำหนดค่าให้เปิดพอร์ตนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.