Fail2Ban:已经被禁止了吗?


17

我的Centos服务器上运行了Fail2Ban。(配置如下)

在我的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 2014年

Answers:


14

在另一个答案中推荐的隐蔽监狱对我来说没有解决此问题。但是,我最终解决了这个问题,因此,这是我的方法,以防它对其他人有帮助。

默认情况下,Fail2ban仅通过TCP进行阻止。至少在我的设置中,我注意到,当僵尸程序再次尝试通过UDP尝试阻止的端口时,会出现“已经禁止”消息。

要解决此问题,请告诉Fail2ban阻止所有协议(而不只是TCP)的端口。您需要在/etc/fail2ban/jail.conf以及/etc/fail2ban/action.d/上使用的每个操作的[Init]部分中进行此更改。

更改此:

# Default protocol
protocol = tcp

至:

# Default protocol
protocol = all

接下来,我禁用了ICMP回显请求,因此被阻止的IP无法访问服务器:

  1. 纳米/etc/sysctl.conf
  2. 添加这两行:

    net.ipv4.icmp_echo_ignore_all = 1  
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    
  3. 退出并保存文件。
  4. 运行sysctl -p以使更改生效。

此后,运行fail2ban-client reload,除非您被IP垃圾邮件拦截,该IP在该块生效之前进行了几次访问尝试,否则您将不再看到这些“已被禁止”的消息。

同样,重要的是,通过使用每个Jail中的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:多端口需要-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地址,则会发生这种情况。例如,如果您的服务器恰好位于负载均衡器或代理之后。

最近花了我一段时间才弄清楚。令人头疼的是,日志被配置为捕获X-Forwarded-ForIP地址,而不是真实的源地址,在我的情况下是负载平衡器。

在这种情况下,fail2ban并没有太大帮助,因为禁止有问题的IP最终将阻止所有流量。


那么,您采取了哪些替代措施?
哈桑·贝格

@HassanBaig-没有。如果Fail2ban在负载平衡器或反向代理后面运行,则无法执行任何操作。
Dale Anderson

那么,对于HTTP GET泛洪,您将采取什么措施应对应用程序层发生的分布式DoS
哈桑·拜格

1
@HassanBaig与您的托管服务提供商联系。您不是唯一在系统上遇到相同问题的人。
Dale Anderson

0

我想用“已经禁止”消息贡献自己的问题和解决方案。正如您所写,几分钟之内我就有数百个,而攻击者应该已经被禁止了。

在开始之前,这是我的系统:

  • Plesk 12
  • Centos 7
  • 已安装Plesk-Module,为我运行和配置fail2ban

当我在根服务器上安装OpenVPN时,我已将Firewalld切换到iptables。那可能对我造成了这个问题,但是除此之外,我的系统几乎没有被改动过,并且是全新安装的(Strato rootserver建议安装映像)。

如果您有此问题,请检查/etc/fail2ban/jail.d/00-firewalld.conf中的行,如下所示:

banaction = firewallcmd-ipset

自从我注释掉之后,保存了文件并重新启动fail2ban.service,使用fail2ban一切都很好。没有更多讯息

我不是专家,但希望为您提供正确的答案。如果这样对您有效,请告诉我!


0

我的问题是,已经被iptables阻止的任何人如何仍然可以连接到服务器?

它仅一次连接到服务器,但是在那种连接中,它试图将多封电子邮件发送到可能不存在的邮箱(例如info @ domain.com,sales @ domain.com,tech @ domain.com等)。

您已将后缀过滤器配置为禁止这些尝试,因此X尝试后IP将被禁止。客户端可能已经从postfix断开连接,但是由于postfix可能尚未完成其所有电子邮件的处理,因此fail2ban可以在postfix处理其邮件时检测到来自同一客户端的另一次尝试,因此您获得的邮件地址已被禁止。这是因为后缀队列的工作原理。


0

我的问题是,已经被iptables阻止的任何人如何仍然可以连接到服务器?

令人难以置信的好问题。我正在搜索我的防火墙规则是否不起作用,但iptables --list-rules与具有工作fail2ban的另一台生产服务器完全匹配。

令人鼓舞的解决方案是将端口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

您可能在“ port =”行中缺少端口587,并且可以检查postfix配置文件,或者直接执行“ lsof -i:587”来查找是否已将postfix配置为打开该端口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.