我有我的Centos服务器上运行的Fail2Ban。 (下面的configuration)
在我的var / log / messages中,我注意到一些很奇怪的东西:
Jun 19 12:09:32 localhost fail2ban.actions: INFO [postfix] 114.43.245.205 already banned
我configuration了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
被阻止的任何人仍然连接到服务器?
在这里的其他答案build议recadive监狱没有解决我的问题。 但是,我最终解决了这个问题,所以这里是我的方法,以防万一。
Fail2ban默认只在TCP上阻塞。 至less在我的设置中,我注意到当机器人回来尝试使用UDP上的阻塞端口时,出现了“已经被禁止”的消息。
要解决这个问题,请告诉Fail2ban通过所有协议而不是TCP来阻塞端口。 您需要在/etc/fail2ban/jail.conf中以及在/etc/fail2ban/action.d/中使用的每个操作的[Init]部分进行此更改。
改变这个:
# Default protocol protocol = tcp
至:
# Default protocol protocol = all
接下来,我禁用了ICMP回应请求,这样封锁的IP就无法击中服务器:
添加这两行:
net.ipv4.icmp_echo_ignore_all = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1
之后,运行fail2ban-client重新加载 ,你不应该再看到这些“已经被禁止”的消息,除非你被在这个模块生效之前获得一些访问尝试的IP垃圾邮件。
此外,为每个攻击者拦截所有端口,而不是通过在每个Jail中使用iptables-allports动作,尝试访问端口是非常重要的。 否则,他们可能会触发另一个监狱,最终成为“已经被禁止”的日志。
如果您查看iptables-save
的输出,您将看到fail2ban
链已经设置,因此它们将根据filter定义的规则评估数据包,例如:
: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
在应用其他路由规则之前, stream量仍然到达服务器 ,stream量被拒绝。 fail2ban
仍然看到这个初始stream量,这就是为什么你看到“已经被禁止”的消息。 此外,还有一个特别的filter( /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 (eg 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
如果您禁止的IP地址实际上不是连接到服务器的客户端的IP地址,则会发生这种情况。 例如,如果您的服务器恰好在负载均衡器或代理之后。
最近我花了一段时间才弄明白这一点。 红鲱鱼是日志被configuration为捕获X-Forwarded-For
IP地址,而不是真正的源地址,在我的情况下是负载平衡器。
在这种情况下,fail2ban没有什么帮助,因为禁止违规的IP最终会阻止所有的stream量。
我想用“已经被禁止”的信息来提出我自己的问题和解决scheme。 正如你写的,我在几分钟之内就有数百个,而攻击者应该已经被禁止了。
在我开始之前,这里是我的系统:
当我在rootserver上安装OpenVPN时,我已经将firewalld切换到了iptables。 这可能对我造成这个问题,但除此之外,我的系统大部分是未经修改的,而且新鲜安装(Strato rootserverbuild议安装映像)。
如果你有这个问题,请检查/etc/fail2ban/jail.d/00-firewalld.conf ,看起来像这样:
banaction = firewallcmd-ipset
从我评论出来的时候,保存文件,并重新启动fail2ban.service
,一切都很好fail2ban。 没有更多的消息
我不是专家,但希望能给你提供正确的答案。 如果这对你有用,请让我知道!
我的问题是,如何在iptables中被阻止的任何人仍然连接到服务器?
它连接到服务器只是一次,但在一个连接,它试图传递多个电子邮件到可疑的远程邮箱(如[email protected],[email protected],[email protected]等)
你已经configuration你的后缀filter来禁止这些尝试,所以在X尝试之后IP将被禁止。 客户端可能已经与postfix断开连接,但是由于postfix可能没有完成所有电子邮件的处理,当postfix处理邮件时,fail2ban可以检测到同一个客户端的另一个尝试,因此你的邮件地址已经被禁止了。 这是因为后缀队列的工作原理。
我的问题是,如何在iptables中被阻止的任何人仍然连接到服务器?
难以置信的好问题。 我正在search我的防火墙规则是否无效,但是iptables --list-rules
与另一台正在运行fail2ban的生产服务器完全匹配。
mindblowing解决scheme是将端口8080添加到阻塞端口,因为我仍然通过开发端口访问login页面。
所以在我的情况下解决这个问题是一个相当简单的适应我的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